<?php /** * Mini system templatow * @author ergo * @version 1.6 * @access public * @copyright Marcin Lulek */ class template { /** * katalog w ktorym znajduja sie templaty * * @var string */ var $katalog; /** * katalog w ktorym zapisywac się będzie cache * * @var string */ var $katalog_cache; /** * przestrzen zmiennych dostepna dal templata (+zmienna globalna $lang) * * @var array */ var $zmienne; /** * czy ma kompilowac templaty * * @var boolean */ var $kompiluj; /** * parsuje i wyswietla zadanego templata na wyjsciu * * @param string $wejscie */ function wyswietl($wejscie) { /** * zwracamy zmienne tak aby sie wygodnie wstawialo je do templata */ foreach ($this->zmienne as $key=>$zmienna){ $$key=$zmienna; } } $this->zmienne=NULL; $this->parsuj($wejscie); if ($this->katalog_cache . $wejscie . '.php') { /** * includujemy templata */ include ($this->katalog_cache . $wejscie . '.php'); } else { } } /** * przypisywaniee zmiennych aby weszly w zasieg klasy parsera * * @param string $nazwa * @param mixed $wartosc */ function przypisz($nazwa, $wartosc) { $this->zmienne[$nazwa] = $wartosc; } /** * wewnetrzna funkcja parsujaca templata * * @return string */ function parsuj($wejscie) { /* * czy mamy kompilowac? */ if (is_dir($this->katalog) && is_dir($this->katalog_cache) && is_writable($this->katalog) && is_writable($this->katalog_cache)) { /** * otwieramy handlery dla plikow do oczytu i zapisu */ /** * zamieniamy tagi templatow (podobne do smarty - prostsze i mniej obciazajace) na kod php kolejnosc przechodzenia przez tablice JEST wazna */ /** * wyrzucanie zmiennych przez echo i var_dump */ $patterns[] = '/<?php.*?>/i'; $replacements[] = NULL; $patterns[] = '/{ *$([^{}]*) *}/i'; $replacements[] = '<?php echo 1; ?>'; /** * skladnia for */ $patterns[] = '/{ *for[ *](.*?) *nazwa=([^}]*) *}/i'; $replacements[] = '<?php $i_2=0;for (1) {$i_2++; ?>'; $patterns[] = '/{ */for *}/'; $replacements[] = '<?php } ?>'; /** * skladnia foreach */ $patterns[] = '/{ *foreach *$(.*?) *nazwa=([^}]*) *}/i'; $replacements[] = '<?php $i_2=0; if (!empty($1)) {foreach($1 as $2){ $i_2++;?>'; $patterns[] = '/{ */foreach *}/i'; $replacements[] = '<?php }} ?>'; /** * skladnia if */ $patterns[] = '/{ *if *([^}]*?) *}/i'; $replacements[] = '<?php if(1) { ?>'; $patterns[] = '/{ */if *}/i'; $replacements[] = '<?php } ?>'; /** * elseif */ $patterns[] = '/{ *elseif *([^}]*?) *}/i'; $replacements[] = '<?php } elseif (1) { ?>'; $patterns[] = '/{ */if *}/i'; $replacements[] = '<?php } ?>'; /** * else */ $patterns[] = '/{ *else *}/i'; $replacements[] = '<?php } else { ?>'; /** * wlasna wersja cycle do zmian wartosci danego elementu przy iteracji */ $patterns[] = '/{ *cycle='(.*?)' nazwa=(.*)}/i'; $replacements[] = '<?php $cykl=array(1); if(!isset($i_2) || $i_2>=count($cykl)){$i_2=0;} echo $cykl[$i_2];$i_2++;?>'; /** * includy */ foreach ($pliki_do_parsowania[1] as $plik_do_parsowania){ $this->parsuj($plik_do_parsowania); } $patterns[] = '/{ *include *([^}]*) *}/i'; $replacements[] = '<?php include(''.$this->katalog_cache.''.str_replace('..',NULL,'.''1')'.'.'.php'); ?>'; /** * zapisujemy templata */ } } else { } } } } $tpl = new template; $tpl->katalog=TEMPLATE; $tpl->katalog_cache=TEMPLATE_CACHE; $tpl->kompiluj=KOMPILUJ_CACHE; ?>
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