Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][html]Proste "udawanie" tagów
-Trejder-
post 13.09.2007, 08:50:51
Post #1





Goście







Witam,

Chcę dodać do swojego skryptu prosty mechanizm obsługi pseudo-tagów, podobnie jak w przypadku BBCode. Zastosowałem jedno z rozwiązań dostępnych w Internecie, ale jego kod jest dla mnie zbyt zagmatwany, żebym umiał rozszerzyć jego funkcjonalność do takiego poziomu, jaki jest mi potrzeby.

W zasadzie to interesuje mnie tylko jedna rzecz - jedna funkcja.

Na wejściu (w tekście wprowadzanym przez użytkownika) jest coś takiego:

Kod
[lbimg]plik_maly|plik_duzy|podpis|orientacja[/lbimg]


Chciałbym, żeby na wyjściu (na wyświetlanej stronie, tudzież w tym, co zwraca funkcja, której poszukuję) powyższy kod został zamieniony na:

  1. <a href="plik_duzy" title="podpis">
  2. <img src="plik_maly" alt=" " align="orientacja"/><br />
  3. podpis
  4. </a>


Ponieważ w moim pseudo-tagu występują parametry, więc sądzę, że zwykła - jednolinijkowa funkcja wykorzystująca wyrażenia regularne tu nie wystarczy. Próbowałem rozwiązać ten problem na wiele sposóbów, ale zawsze bez efektu - to przekracza moją wiedzę.

Być może ktoś z użytkowników będzie wiedział, jak mi pomóc?

Oczywiście to, co jest na wejściu (czyli ów pseudo-tag) może być dowolnie zmodyfikowany. Jeśli miałby to uprościć poszukiwaną przeze mnie funkcję to na przykład może on mieć taką postać:

Kod
[lbimg img_prev="plik_maly" img_main="plik_duzy" title="podpis" align="orientacja"]


Lub dowolną inną. Wszystko, czego do szczęścia potrzebuję to możliwość przekazania tych czterech parametrów dla każdego obrazka i następnie przetworzenie tego do pokazanego powyżej ciągu tagów HTML.

Z góry dziękuję za wszelką pomoc,
Trejder
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
b_chmura
post 13.09.2007, 09:09:27
Post #2





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $in = 'sdfsdf dsfsdfsd f [lbimg]plik_maly|plik_duzy|podpis|orientacja[/lbimg] fsdfdsf';
  3. $out = '<br /><a href="2" title="3"><img src="1" alt=" " align="4"/><br />3</a><br />';
  4. $tresc = preg_replace('#[lbimg](.*?)|(.*?)|(.*?)|(.*?)[/lbimg]#si', $out, $in);
  5. echo $tresc;
  6. ?>


Proszę
Go to the top of the page
+Quote Post
-Trejder-
post 13.09.2007, 16:21:07
Post #3





Goście







Witam,

Dzięki bardzo. Podany przez Ciebie kod działa świetnie. Niestety nie znam się kompletnie na wyrażeniach regularnych, dlatego nie miałbym najmniejszych szans na rozwiązanie tego samemu! sad.gif

Ale... (ja zawsze mam jakieś ale! smile.gif... w między czasie zostałem zmuszony do zmiany konceptu. Wypadł ostatni parametr (decydujący o orientacji obrazka - align), a w to miejsce pojawiły się trzy osobne pseudo-tagi. Każdy z nich pokazuje obrazek w odpowiedniej orientacji (centralnie - [lbimg], do lewej - [lbimgl] i do prawej - [lbimgr]). Mamy więc na wejściu:

Kod
[lbimg]plik_maly|plik_duzy|podpis[/lbimg]
[lbimgl]plik_maly|plik_duzy|podpis[/lbimgl]
[lbimgr]plik_maly|plik_duzy|podpis[/lbimgr]


Wziąłem Twoją linijkę:
  1. <?php
  2. $tresc = preg_replace('#[lbimg](.*?)|(.*?)|(.*?)|(.*?)[/lbimg]#si', $out, $in);
  3. ?>


i rozbudowałem ją do takiej postaci, jak mi się wydawało sensownej:

  1. <?php
  2. $tresc = preg_replace('#[lbimg](.*?)|(.*?)|(.*?)[/lbimg]#si', $out_lbimg, $in);
  3. $tresc = preg_replace('#[lbimgl](.*?)|(.*?)|(.*?)[/lbimgl]#si', $out_lbimgl, $in);
  4. $tresc = preg_replace('#[lbimgr](.*?)|(.*?)|(.*?)[/lbimgr]#si', $out_lbimgr, $in);
  5. ?>


Oczywiście zmienne $out_lbimg, $out_lbimgl i $out_lbimgr zawierają odpowiedni pattern, czyli co ma być na wyjściu dla danego pseudo-taga.

I tu zaczynają się schody. Sam nie wiem, czemu działa mi za każdym razem tylko jedna linijka. Gdy była tylko ta pierwsza - zamieniał mi pseudo-tagi wstawiające obrazki centralnie. Potem dopisałem tę drugą i zaczął prawidłowo zamieniać mi tagi [lbimgl], ale przestał [lbimg]. I tak w kółko - za każdym razem zamieniany jest tylko jeden rodzaj tagów.

Co robię źle?

Pozdrowienia,
Trejder
Go to the top of the page
+Quote Post
Kicok
post 13.09.2007, 16:55:39
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


Cytat
$tresc = preg_replace('#\[lbimg\](.*?)\|(.*?)\|(.*?)\[/lbimg\]#si', $out_lbimg, $in);
$tresc = preg_replace('#\[lbimgl\](.*?)\|(.*?)\|(.*?)\[/lbimgl\]#si', $out_lbimgl, $in);
$tresc = preg_replace('#\[lbimgr\](.*?)\|(.*?)\|(.*?)\[/lbimgr\]#si', $out_lbimgr, $in);


Widzisz już co jest nie tak? Do wszystkich trzech wyrażeń przekazujesz "bazowy tekst", który znajduje się pod zmienną $in, a nie tekst spod zmiennej $tresc


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
-Trejder-
post 13.09.2007, 20:29:34
Post #5





Goście







Witam,
Cytat(Kicok @ 13.09.2007, 16:55:39 ) *
Widzisz już co jest nie tak? Do wszystkich trzech wyrażeń przekazujesz "bazowy tekst", który znajduje się pod zmienną $in, a nie tekst spod zmiennej $tresc

Jak już pisałem wcześniej - nie jestem specjalistą od wyrażeń regularnych, ale... żeby taką głupotę strzelić to trzeba być naprawdę wysokich lotów kretynem! :/ :/ :/

No, nic - jeszcze raz dziękuję, bo oczywiście po wprowadzeniu Twoich zmian, wszystko zaczęło działać jak należy.

EoT

Podziękowania i pozdrowienia,
Trejder
Go to the top of the page
+Quote Post
mauy
post 30.09.2007, 20:19:52
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.09.2007

Ostrzeżenie: (0%)
-----


Witam!
Mam problem ze zmienna w php.
Dokladnie w ksiazce jest przyklad aby wstawic to co ponizej do html'a.

<tr>
<td>Jak dowiedzieli sie panstwo o sklepie </td>
<td><select name="jak">
<option value = "a">
<option value = "b">Jestem stalym klientem
<option value = "c">Reklama telewizyjna
<option value = "d">Ksiazka telefniczna
<option value = "e">Znajomy
</select>
</td>
</tr>



Pisze tam ze slowo "jak" to nowa zmienna dla PHP.
Idac dalej wklejam fragmet PHP gdzie slowo "jak" ma byc obslugiwane:

if($jak == 'a')
echo '<p>Zrodlo nieznane</p>';

elseif($jak == 'b')
echo '<p>Staly klien</p>';

elseif($jak == 'c')
echo '<p>Reklama telewizyjna</p>';

elseif ($jak == 'd')
echo '<p>Ksiazka telefoniczna</p>';

elseif($jak == 'e')
echo '<p>Znajomy</p>';

else
echo 'Nie dziala tak jak ma dzialac';

I niestety nie dziala. Obojeteni czego nie wybiore wyswietla Nie dziala tak jak ma dzialac.
Jak sprawdzam bledy na serwerze pokazuje mi [error] PHP Notice: Undefined variable: jak

Pomozcie
Go to the top of the page
+Quote Post
phpion
post 30.09.2007, 20:24:55
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Temat wałkowany wielokrotnie: poczytaj o register_globals off i tablicach $_GET i $_POST.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:53