Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][html]Proste "udawanie" tagów
Forum PHP.pl > Forum > Przedszkole
Trejder
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
b_chmura
  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ę
Trejder
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
Kicok
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
Trejder
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
mauy
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
phpion
Temat wałkowany wielokrotnie: poczytaj o register_globals off i tablicach $_GET i $_POST.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.