Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parser szablonów
seba_bwo
post
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
 
Start new topic
Odpowiedzi
Zyx
post
Post #2





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
Go to the top of the page
+Quote Post

Posty w temacie


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: 25.09.2025 - 22:48