Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][html]Proste "udawanie" tagów
-Trejder-
post
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
b_chmura
post
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
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! (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ale... (ja zawsze mam jakieś ale! (IMG:http://forum.php.pl/style_emoticons/default/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
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
Go to the top of the page
+Quote Post
-Trejder-
post
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
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
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 02:16