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%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
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: 26.09.2025 - 08:49