Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parser szablonów
Forum PHP.pl > Inne > Oceny
seba_bwo
Proszę o ocenę oraz o to jak mogę ulepszyć moje "dziecko", komentarze powinny wystarczyć.
  1. <?php
  2. #sprawdzane warunków:
  3. # {if zalogowany}Lol{/if} => if($zalogowany){return "Lol";}
  4. preg_match_all("@{if (!|)(.*)}(.*){/if}@Usi",$strona,  $out);
  5. foreach($out[2] as $in=>$val)
  6. {
  7.     if($out[1][$in]=='!')
  8.     {
  9.         #zamiana spełnionej negacji na wartość pola
  10.         if(!$val){$strona=str_replace($out[0][$in], $out[3][$in], $strona);}
  11.     }
  12.     else
  13.     {
  14.         #zamiana warunku na wartość pola
  15.         if($val){$strona=str_replace($out[0][$in], $out[3][$in], $strona);}
  16.     }
  17. }
  18.  
  19. #usuwanie warunków nie spełnionych
  20. $strona=preg_replace('@{if (!|)(.*)}(.*){/if}@Usi', '', $strona);
  21.  
  22.  
  23. # zamiana {var zmienna} na $zmienna
  24. preg_match_all("@{var (.*)}@Usi",$strona,  $out);
  25. foreach($out[0] as $in=>$val)
  26. {
  27.     $name=$out[1][$in];
  28.     $strona=str_replace($val,$name, $strona);
  29. }
  30. #
  31.  
  32. # wstawienie pętli dla tablicy XYZ w miejscuy {loop XYZ} >tu akcja< {/loop}
  33. # {1} w html odpowiada elementowi $XYZ[1]
  34. # indexy puki co tylko numeryczne
  35. preg_match_all("@{loop (.*)}(.*){/loop}@Usi",$strona,  $out);
  36. foreach($out[1] as $in=>$val)
  37. {
  38.     #tymczasowa zmienna
  39.     $redesign="af_$val";
  40.    
  41.     #tablica z mozliwosciami podmiany (nie udawało mi się bez tej tablicy :( )
  42.     $a=array('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}');
  43.         foreach($val as $value)
  44.         {
  45.             #zamiana elementów z tablicy $a na elementy z zapętlanej tablicy
  46.             $redesign.=str_replace($a, $value, $out[2][$in]);    
  47.         }
  48.        
  49.     #zamiana pętli html na wygenerowany kod
  50.     $strona= str_replace($out[0][$in], $redesign, $strona);
  51. }
  52. ?>
erix
Przyda się właściwie to, co tutaj:
http://forum.php.pl/index.php?showtopic=117889
Cypherq
Cytat
indexy puki co tylko numeryczne


blinksmiley.gif

Zajrzyj tutaj i w powiązane:

http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow
seba_bwo
Cytat(Cypherq @ 5.04.2009, 09:50:21 ) *

Nie wiem co to ma wnosić do tematu, możesz trochę rozbudować swoją wypowiedź?

erix@
Po każdej zmianie kodu HTML szablonu wystarczy że go przekompiluję do kodu php (i np mi zamieni {var zmienna} np np <?php echo $zmienna; ?>). Przez co wyświetlanie polegać będzie na podstawieniu danych pod przekompilowany szablon a nie ciągłe katowanie html wyrażeniami regularnymi. Dobrze zrozumiałem to prekompilowanie?
Cypherq
Czy napisałem za mało? Gdybyś wpadł na stronę Zyx'a i poczytał co pisze o szablonach, wiedziałbyś:

- co chcesz tak naprawdę zrobić
- co robisz źle
- co robisz dobrze
- jak to co robisz powinno w przybliżeniu wyglądać.
pejott
Po co wynajdować koło na nowo ?
Jest smarty, jest OPT, mimo że nie przepadam za tego typu systemami szablonów, to jeśli potrzebujesz to lepiej z nich skorzystać.

Ja stosuje natywne PHP w template'ach i uważam, że to chyba najlepsze wyjście.
Jeśli już będziesz wybierał, to ja bym postawił na OPT.
seba_bwo
Cytat(pejott @ 5.04.2009, 12:24:49 ) *
Po co wynajdować koło na nowo ?
Jest smarty, jest OPT, mimo że nie przepadam za tego typu systemami szablonów, to jeśli potrzebujesz to lepiej z nich skorzystać.

Ja stosuje natywne PHP w template'ach i uważam, że to chyba najlepsze wyjście.
Jeśli już będziesz wybierał, to ja bym postawił na OPT.


Jeżeli pisanie autorskiego systemu szablonów uważasz za zbędną pracę (wynajdowanie koła na nowo) to pewnie to samo myślisz o pisaniu autorskich systemów CMS i innych w tym stylu. Dlatego uważam twoją wypowiedź za zbędną. Czytałem już wcześniej stronę zyx'a a co do oceny to prosiłbym bardziej od strony technicznej.
Zyx
Jeśli piszesz hobbystycznie, aby się czegoś nauczyć, to jak najbardziej ma to sens - w końcu najlepiej uczyć się przez praktykę. Jednak do praktycznego wykorzystania takie kilkunastolinijkowe parsery (kilkudziesięcio- i kilkuset- często też) są bez sensu z powodów, które zostały już przytoczone. Po prostu aby to faktycznie pomagało, trzeba nad tym wybitnie długo posiedzieć i stworzyć niesamowicie dobry projekt; inaczej taki parser będzie utrudnieniem, a nie pomocą.

Od strony czysto technicznej, zabierasz się za problem od niewłaściwej strony. Manualne wykonywanie kodu to ślepy zaułek, który nigdzie Cię nie zaprowadzi. Masz PHP, parser PHP ma wszystkie kwestie związane z interpretacją kodu już rozwiązanie i w dodatku zrobi to dużo szybciej, niż skrypt, więc najlepiej aby parser kompilował szablony do kodu PHP. Przy okazji miałbyś też załatwiony problem z tą Twoją tablicą. Druga rzecz to brak jakiejkolwiek logiki w kodzie: masz trzy elementy, które z technicznego punktu widzenia są tym samym, a od A do Z obsługujesz każdy z nich w inny sposób.
seba_bwo
Cytat
Po prostu aby to faktycznie pomagało, trzeba nad tym wybitnie długo posiedzieć i stworzyć niesamowicie dobry projekt; inaczej taki parser będzie utrudnieniem, a nie pomocą.

Co do tego to nie mam zastrzeżeń, ale moim docelowym, pożądanym efektem, jest utrzymanie szablonowej składni z np: smarty a silnik napisać samemu. Chodzi mi o to że smarty jest dobrym systemem ale jak dla mnie ma za dużo bajerów, dlatego nie chcąc się męczyć w wywalaniu zbędnych rzeczy postanowiłem napisać swój system do obsługi podstawowych poleceń jak warunki, pętle i zmienne.

Już wiem że najlepiej jakbym prekompilował szablony do postaci PHP.
dla przykładu:
Kod
Jesteś {if zalogowany}zalogowany{else}nie zalogowany{/if}.

zamieniałoby na:
Kod
Jesteś <?php if($zalogowany){echo 'zalogowany';}else{echo 'nie zalogowany';} ?>.


Takie przemieszanie kodu php z html w kodzie wynikowym szablonu miałoby sens? Może jakieś propozycje?
Zyx
Skoro twierdzisz, że ma za dużo bajerów, to znaczy, że jednak masz zastrzeżenia i nie do końca rozumiesz, w czym tkwi problem smile.gif. I już Ci mogę przepowiedzieć, że weźmiesz pierwszy większy projekt i przy pierwszym podejściu już się zatniesz właśnie przez takie "okrajanie" pozornie zbędnej funkcjonalności. Racja, piszesz "Hello world", to jest to zbędne. Ale gdy piszesz przyzwoity formularz, wtedy bez tych "bajerów" się zajedziesz, namęczysz, stwierdzisz, że systemy szablonów są bez sensu i wrócisz do PHP, bo tam przynajmniej możesz sobie pomóc obiektówką czy funkcjami (i później będziesz pisać głupoty o systemach szablonów, że one czegośtam nie potrafią, nawet gdy potrafią, i radzą sobie z tym dużo lepiej, niż PHP). One też są bajerami, ale jednak dużo pomagają przy nieco bardziej rozbudowanych problemach. Kompilacja do PHP ma ten plus, że gdy nie kompilujesz szablonu (czyli przez 99,9% czasu), to nie musisz nawet ładować odpowiedzialnego za to kodu; w szczególności - nieużywane bajery, poza zajmowaniem kilkudziesięciu kilobajtów przestrzeni dyskowej, nie będą mieć ŻADNEGO wpływu na wydajność i tego typu sprawy.

Od strony technicznej - a co Cię kod wynikowy obchodzi? Ty pracujesz z szablonem, tymczasem kod wynikowy ma działać, a nie być ładny biggrin.gif. Nawiasem mówiąc znacznie łatwiej jest stworzyć parser, który daje następujące wyjście:

Kod
Jesteś <?php if($zalogowany){ ?>zalogowany<?php } else { ?>niezalogowany<?php } ?>


Kiedyś dla testu próbowałem nauczyć OPT skracania takich krótkich fraz do postaci echo albo zwykłego sklejania ciągów, ale okazało się, że nie tylko nie działało to najlepiej, ale też nie było z tego żadnego wymiernego pożytku.
pejott
Cytat(seba_bwo @ 5.04.2009, 14:29:15 ) *
Dlatego uważam twoją wypowiedź za zbędną


Twój temat tak samo, zresztą chciałem pomóc, więc nie mów co jest niepotrzebne, k ? ;/

Za rok, dwa, zmienisz zdanie, jak będziesz miał spory, autorski projekt. Chyba nie będziesz pisał wszystkiego od zera ?
Teraz się uczysz, okay. Ale nie krytykuj ludzi, tylko dlatego, że mają inne podejście do pracy.
Dla mnie liczy się koszt i czas produkcji.

Pozdrawiam.
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.