Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Subsekcje w szablonach
Forum PHP.pl > Forum > PHP
Rudi1204
Witam w php siedzę jakiś czas, ale mimo to nie ogarniam do końca sprawy klas, a to do pisania silnika szablonów chyba jest podstawa no nie??

Mianowicie już jakiś czas temu znalazłem na stronie museum.webcity.pl artykuł jak stworzyć własny mechanizm szablonów. Całkiem niezły i przyjazny, ale na dłuższą metę jemu coś brakuje no właśnie "subsekcji". Zabrałem się za to ale patrząc na to ze kuleje z klas rozłożyłem na końcu ręce.

Na forum znalazłem takie coś
plik index.php
  1. <?php
  2. $tablica['{$div}'] = 'to jest div';
  3. $tablica['{$p}'] = 'to jest p';
  4.  
  5.  
  6. $html = file_get_contents('./tpl/main_index.html');
  7.  
  8.  
  9. foreach($tablica as $nazwa=>$wartosc)
  10. {
  11.  $html = str_replace($nazwa,$wartosc,$html);
  12. }
  13.  
  14. echo $html;
  15. ?>


plik main_index.html
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  4. <title>Untitled Document</title>
  5. </head>
  6. <body>
  7. <div style="border:1px solid red; padding:5px;">
  8. {$div}
  9. </div>
  10. <ul>
  11. <!-- test -->
  12. <li><p style="border:1px solid blue; padding:5px;">{$p}</p></li>
  13. <!-- /test -->
  14. </ul>
  15. </body>
  16. </html>


Starałem się jakoś dojść do tego jak podmieniać zakres od <!-- test --> do <!-- /test --> i wrzucić to w pętle by zrobić listing ale nie udało mi się. Jedyne do czego doszłem to jak zmienić cały zakres a mianowicie poprzez dodanie przed pętla takiego czegoś:
  1. <?php
  2. $html = preg_replace("/<!-- test -->.*?<!-- /test -->/si", '<hr />', $html);
  3. ?>


Czy ma ktoś może jakieś propozycje, porady etc... jak to ugryźć??
Zyx
Człowieku, już nie masz naprawdę nic lepszego do roboty, tylko jakieś wykopaliska archeologiczne prowadzić? Jeśli już Cię to tak bardzo interesuje, to był tam też inny artykuł pokazujący, jak to osiągnąć, a ze swojej strony polecam zainteresowanie się jakimś porządnym systemem szablonów. Na tym kodzie, który tam jest zaproponowany, zbyt wiele już nie zdziałasz, a w warstwie prezentacji potrzebne jest jednak coś więcej, niż tylko osadzanie zmiennych i robienie list...
Mati7
Najlepszym rozwiązaniem jest nie korzystanie z systemu szablonów.

Systemy takie jak smarty czy opt komplikują szablon na php co daje ci ten sam efekt co stosowanie php.

Czyli z czegoś {$Url} otzymujesz <?php echo $this->_tpl_vars['Url']; ?>

Dla początkujących, korzystanie z szablonów wydaje się ułatwieniem, ale jak trochę nad tym wszystkim posiedzisz zrozumiesz
że więcej tracisz niż zyskujesz.
nospor
Cytat
Systemy takie jak smarty czy opt komplikują szablon na php co daje ci ten sam efekt co stosowanie php.
Czyli idac twoim rozumowanie nie oplaca sie korzystac z jezykow wysokiego poziomu bo one i tak komilują kod na niski poziom.... piszmy wiec wszyscy w assemblerze smile.gif

Co cie obchodzi co robi system szablonow? No bardzo dobrze ze zamienia to na php, dzieki temu nie musi za kazdym razem kompilowac.

Nie mowie ze jestem zwolennikiem szablonow lub nie. Poprostu twoja argumentacja jest dosc dziwna winksmiley.jpg
Mati7
Hm, może źle się wyraziłem chodzi mi o to że w przypadku php nie widzę potrzeby stosowania systemów szablonów takich jak smarty czy php.

Moim zdaniem samo php do szablonów sprawdza się najlepiej. Za i przeciw znalazło by się na pewno wiele...
Rudi1204
Zyx czasem jest warto coś odkopać by zrozumieć istotę tego i skąd to się wzięło ;p

A tak na poważnie co prawda wspomniałem o przykładzie na museum.webcity.pl ale też moje pytanie tyczy się czegoś innego. Jeśli samym php będę mógł dzieki funkcją kompilować szablon bez robienia zupy z html i będzie to w miarę wydajne to skorzystam z tego, każdy ma swój sposób na pisanie skryptu.

OPT, SMARTY... jak by nie patrzeć to nauka nowego kodu a po co to komu przykład z webcity jak dla mnie jest fajny bo w html wrzucam se tylko znaczniki a resztę robię w php proste i czyste (w miarę;p) tak czy inaczej na chwile obecna mój problem jest inny i jeśli macie jakieś pomysły to prosił bym was o pomoc smile.gif
pozdrawiam
adrian.p
Rudi1204, myślałem podobnie i wyszło tyle z tego ze musiałem się przerzucić na jakiś gotowy system szablonów ponieważ praca przy większych projektach z takim "template" jest naprawdę uciążliwa.

Sam pseudokod nie jest czymś trudnym czy niezrozumiałym. W sieci przecież znajdziesz manual, artykuły czy tez dziesiątki wpisów na blogach na temat konkretnego systemu templatow.

Nic nie stracisz a jedynie zyskasz.
Rudi1204
no ok rozumiem niech będzie ;p fakt od przybytku głowa nie boli, ale tak czy inaczej wracając do przykładu co podałem w pytaniu czy ktoś wiedział by jak takie coś ugryźć??
Zyx
Takie coś realizuje się, kompilując szablony do kodu PHP, bo "manualna" obsługa pętli nie dość, że jest masakryczna, to jeszcze powolna. W ten sposób, jak zauważył Mati, działa zdecydowana większość przyzwoitych parserów oferujących coś więcej, niż tylko zamianę zmiennych, ale na pewno nie jest to żadna przesłanka do tego, że PHP jest w jakiś sposób lepsze. Dedykowany język dla systemu szablonów tworzony jest z tego samego powodu, dla którego ktoś kiedyś wpadł na pomysł, że strony WWW można robić w czymś innym, niż C/C++/assembler.

Wprawdzie takie języki najczęściej de facto są kopią PHP, tj. cała kompilacja sprowadza się do "zamień ifa w klamerkach na ifa w PHP" (gdyż jest to w sumie najprostsze do osiągnięcia), ale ponieważ są to nowe języki, można z nich wycisnąć przy odrobinie pomysłowości rzeczy, o jakich twórcom PHP się nawet nie śniło. Mogę podać co najmniej kilka przykładów problemów, które w OPT rozwiązuje się banalnie, a w PHP trzeba kombinować na potęgę, a i tak nie uzyska się podobnej prostoty. Powodem jest właśnie to, że mimo wszystko taki język to nie jest PHP smile.gif.
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.