Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] prosta klasa templatow
ergo
post 4.07.2006, 12:53:36
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 8.03.2005

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


cos w desen smarty , duzo prostsze i zdecydowanie szybsze w dzialaniu ( przy wlaczeniu cacheowania ) , ma kilka niedogodnien ale mozna latwo rozbudowac, chcialbym zebyscie powiedzieli co mozna ulepszyc i poprawic

  1. <?php
  2. /**
  3.  * Mini system templatow
  4.  * @author ergo
  5.  * @version 1.6
  6.  * @access public
  7.  * @copyright Marcin Lulek
  8.  */
  9. class template {
  10. /**
  11.  * katalog w ktorym znajduja sie templaty
  12.  *
  13.  * @var string
  14.  */
  15. var $katalog;
  16. /**
  17.  * katalog w ktorym zapisywac się będzie cache
  18.  *
  19.  * @var string
  20.  */
  21. var $katalog_cache;
  22. /**
  23.  * przestrzen zmiennych dostepna dal templata (+zmienna globalna $lang)
  24.  *
  25.  * @var array
  26.  */
  27. var $zmienne;
  28. /**
  29.  * czy ma kompilowac templaty
  30.  *
  31.  * @var boolean
  32.  */
  33. var $kompiluj;
  34. /**
  35.  * parsuje i wyswietla zadanego templata na wyjsciu
  36.  *
  37.  * @param string $wejscie
  38.  */
  39. function wyswietl($wejscie) {
  40. /**
  41.  * zwracamy zmienne tak aby sie wygodnie wstawialo je do templata
  42.  */
  43. if(!empty($this->zmienne)){
  44. foreach ($this->zmienne as $key=>$zmienna){
  45. $$key=$zmienna;
  46. }
  47. }
  48. $this->zmienne=NULL;
  49. $this->parsuj($wejscie);
  50. if ($this->katalog_cache . $wejscie . '.php') {
  51. /**
  52.  * includujemy templata
  53.  */
  54. include ($this->katalog_cache . $wejscie . '.php');
  55. } else {
  56. die('templat nie istnieje');
  57. }
  58. }
  59. /**
  60.  * przypisywaniee zmiennych aby weszly w zasieg klasy parsera
  61.  *
  62.  * @param string $nazwa
  63.  * @param mixed $wartosc
  64.  */
  65. function przypisz($nazwa, $wartosc) {
  66. $this->zmienne[$nazwa] = $wartosc;
  67. }
  68. /**
  69.  * wewnetrzna funkcja parsujaca templata
  70.  *
  71.  * @return string
  72.  */
  73. function parsuj($wejscie) {
  74.  
  75. /*
  76. * czy mamy kompilowac?
  77. */
  78. if ($this->kompiluj == TRUE || !file_exists($this->katalog_cache . $wejscie . '.php')) {
  79. if (is_dir($this->katalog) && is_dir($this->katalog_cache) && is_writable($this->katalog) && is_writable($this->katalog_cache)) {
  80. /**
  81.  * otwieramy handlery dla plikow do oczytu i zapisu
  82.  */
  83. $zawartosc_templata=file_get_contents($this->katalog . $wejscie);
  84. /**
  85.  * zamieniamy tagi templatow (podobne do smarty - prostsze i mniej obciazajace) na kod php kolejnosc przechodzenia przez tablice JEST wazna 
  86.  */
  87. $patterns = array ();
  88. $replacements = array ();
  89. /**
  90.  * wyrzucanie zmiennych przez echo i var_dump
  91.  */
  92. $patterns[] = '/<?php.*?>/i';
  93. $replacements[] = NULL;
  94. $patterns[] = '/{ *$([^{}]*) *}/i';
  95. $replacements[] = '<?php echo 1; ?>';
  96. /**
  97.  * skladnia for
  98.  */
  99. $patterns[] = '/{ *for[ *](.*?) *nazwa=([^}]*) *}/i';
  100. $replacements[] = '<?php $i_2=0;for (1) {$i_2++; ?>';
  101. $patterns[] = '/{ */for *}/';
  102. $replacements[] = '<?php } ?>';
  103. /**
  104.  * skladnia foreach
  105.  */
  106. $patterns[] = '/{ *foreach *$(.*?) *nazwa=([^}]*) *}/i';
  107. $replacements[] = '<?php $i_2=0; if (!empty($1)) {foreach($1 as $2){ $i_2++;?>';
  108. $patterns[] = '/{ */foreach *}/i';
  109. $replacements[] = '<?php }} ?>';
  110. /**
  111.  * skladnia if
  112.  */
  113. $patterns[] = '/{ *if *([^}]*?) *}/i';
  114. $replacements[] = '<?php if(1) { ?>';
  115. $patterns[] = '/{ */if *}/i';
  116. $replacements[] = '<?php } ?>';
  117. /**
  118.  * elseif
  119.  */
  120. $patterns[] = '/{ *elseif *([^}]*?) *}/i';
  121. $replacements[] = '<?php } elseif (1) { ?>';
  122. $patterns[] = '/{ */if *}/i';
  123. $replacements[] = '<?php } ?>';
  124. /**
  125.  * else
  126.  */
  127. $patterns[] = '/{ *else *}/i';
  128. $replacements[] = '<?php } else { ?>';
  129. /**
  130.  * wlasna wersja cycle do zmian wartosci danego elementu przy iteracji
  131.  */
  132. $patterns[] = '/{ *cycle='(.*?)' nazwa=(.*)}/i';
  133. $replacements[] = '<?php $cykl=array(1); if(!isset($i_2) || $i_2>=count($cykl)){$i_2=0;} echo $cykl[$i_2];$i_2++;?>';
  134. /**
  135.  * includy
  136.  */
  137. preg_match_all('/{ *include *([^}]*) *}/i',$zawartosc_templata,$pliki_do_parsowania);
  138. foreach ($pliki_do_parsowania[1] as $plik_do_parsowania){
  139.  
  140. $this->parsuj($plik_do_parsowania);
  141. }
  142. $patterns[] = '/{ *include *([^}]*) *}/i';
  143. $replacements[] = '<?php include(''.$this->katalog_cache.''.str_replace('..',NULL,'.''1')'.'.'.php'); ?>';
  144. $parsed_templat = preg_replace($patterns, $replacements, $zawartosc_templata );
  145. /**
  146.  * zapisujemy templata
  147.  */
  148.  
  149. $handle = fopen($this->katalog_cache . $wejscie.'.php', 'wb');
  150. if (fwrite($handle, $parsed_templat) === FALSE) {
  151. die('blad_kompilacji_templata');
  152. }
  153. } else {
  154. die('blad katalogow cache');
  155. }
  156. fclose($handle);
  157. }
  158. }
  159. }
  160. $tpl = new template;
  161. $tpl->katalog=TEMPLATE;
  162. $tpl->katalog_cache=TEMPLATE_CACHE;
  163. $tpl->kompiluj=KOMPILUJ_CACHE;
  164. ?>


tagi:

{foreach $zmienna nazwa=element}{/foreach}
{for warunek nazwa=element}{/for}
{if warunek}{elseif warunek}{else}{/if}
{$$zmienna} - echo
{cycle='param1,param2,param3,..' nazwa=sekcja}
{include plik}
{vardump $zmienna}

system dziala duzo szybciej niz smarty dla wlaczonego cacheowania.

UPDATE ver. 1.8

Ten post edytował ergo 6.07.2006, 09:50:02


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


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: 19.06.2025 - 10:44