Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Parser szablonów
seba_bwo
post 4.04.2009, 10:04:13
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 3
Dołączył: 7.03.2009

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


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


Ten post edytował seba_bwo 4.04.2009, 10:04:39
Go to the top of the page
+Quote Post
erix
post 5.04.2009, 00:15:05
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przyda się właściwie to, co tutaj:
http://forum.php.pl/index.php?showtopic=117889


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Cypherq
post 5.04.2009, 08:50:21
Post #3





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


Cytat
indexy puki co tylko numeryczne


blinksmiley.gif

Zajrzyj tutaj i w powiązane:

http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow


--------------------
"Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
Go to the top of the page
+Quote Post
seba_bwo
post 5.04.2009, 10:05:06
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 3
Dołączył: 7.03.2009

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


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?
Go to the top of the page
+Quote Post
Cypherq
post 5.04.2009, 11:09:01
Post #5





Grupa: Zarejestrowani
Postów: 181
Pomógł: 9
Dołączył: 28.08.2006
Skąd: Katowice

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


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


--------------------
"Zero 'errorów' nic nie oznacza. Walidator sprawdza tylko składnię. Kod strony jest jak psu z d**y wyjęty i to, że walidator świeci się na zielono nie oznacza, że ta kupa jest ładna" - mike
Go to the top of the page
+Quote Post
pejott
post 5.04.2009, 11:24:49
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


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.

Ten post edytował pejott 5.04.2009, 11:26:46
Go to the top of the page
+Quote Post
seba_bwo
post 5.04.2009, 13:29:15
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 3
Dołączył: 7.03.2009

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


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.
Go to the top of the page
+Quote Post
Zyx
post 5.04.2009, 13:45:49
Post #8





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.

Ten post edytował Zyx 5.04.2009, 13:47:25


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
seba_bwo
post 5.04.2009, 14:08:04
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 3
Dołączył: 7.03.2009

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


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?
Go to the top of the page
+Quote Post
Zyx
post 5.04.2009, 14:29:51
Post #10





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.

Ten post edytował Zyx 5.04.2009, 14:32:01


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
pejott
post 6.04.2009, 14:57:18
Post #11





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


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.
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: 18.07.2025 - 12:23