Tak się sklada, że właśnie pracuję na prostym systemem szablonów do własnego frameworka - wymyślam koło na nowo

Z własnych doświadczeń wiem, że wyrażenia regularne nie należą do demonów szybkości

.
Oczywiście, jeśli wykonasz buforowanie szablonów, wówczas wyrażenia regularne będą sie wykonywać co jakiś czas, więc na wydajności raczej nie stracisz. W moim "systemie szablonów" zastosowałem nieco inne podejście. Zmienne przypisane do szablonu zapisuję do tablicy. Następnie wczytuję ten szablon przez require_once. Zanim to zrobię, uzywam funkcji
extract. Dzięki temu wszystkie klucze tablicy traktowane są jako zmienne i wczytywane do szablonu. A jak zrobić, by zawartość szablonu nie wyświetlała się w przeglądarce? Output buffering.
Poniżej zamieszciłem kod jak to robię. Niestety nie mam dostępu do ftp, na ktorym znajduje się aktualna wersja z buforowaniem do pliku.
<?php
/**
* Klasa bardzo prostych szablonow
*/
class Template
{
/**
* Tablica zmiennych globalnych - dotyczacych wsztstkich szablonow
*
* @var array
*/
protected
$aglobalvars = array();
/**
* Tablica zmiennych lokalnych - dotyczacych konkretnego szablonu
*
* @var array
*/
protected
$atemplatesglobalvars = array();
/**
* Tablica szablonow
*
* @var array
*/
protected
$atemplates = array();
public function Load($sname, $sfile) {
$this->atemplates[$sname] = $sfile;
}
public function Display($sname) {
if(!array_key_exists($sname, $this->atemplates)) throw
new TemplateException
('There is no '.$sname.' template'); if(is_array($this->atemplatesglobalvars[$sname])) extract($this->atemplatesglobalvars[$sname]); require_once TEMPLATE_PATH.$this->atemplates[$sname];
}
/**
* Przypisanie zmiennej globalnej do szablonu
*
* @param string $sname nazwa zmiennej
* @param mixed $svalue wartosc zmiennej
*/
public function AssignGlobalVariable($sname, $svalue) {
$this->aglobalvars[$sname] = $svalue;
}
/**
* Przypisanie zmiennej lokalnej do szablonu
*
* @param string $stemplate nazwa szablonu, do ktorego przypisywana jest zmienna
* @param string $sname nazwa zmiennej
* @param mixed $svalue wartosc zmiennej
*/
public function AssignTemplateVariable($stemplate, $sname, $svalue) {
if(!is_array($this->atemplatesglobalvars[$stemplate])) $this->atemplatesglobalvars[$stemplate] = array();
$this->atemplatesglobalvars[$stemplate][$sname] = $svalue;
}
}
?>