Ostatnio miałem potrzebę napisac małą stronę, więc nie było sensu używać smart'ów.
Napisałem coś takiego:
<?php
/**
* Prosty system szablonów php
* @copyright Copyright (c) Strzalek 2005
* @author Strzalek <strzalek@vp.pl>
* @version 1.0.0
* @package Template
*/
class Template {
/**
* Ścieżka szablnów
* @var string
*/
public $templateDir = './templates/';
/**
* Przechowywuje zmienne wykorzystywane
* w szablonach
* @var array
*/
protected
$_vars = array();
/**
* Dołączenie wartości
* @param string $key Nazwa
* @param mixed $value Wartość
* @return void
*/
public function assign($key, $value){
$this -> _vars[$key] = $value;
}
/**
* Dołączenie wartości przez referencje
* @param string $key Nazwa
* @param mixed $value Wartość
* @return void
*/
public function assignByRef($key, &$value){
$this -> _vars[$key] =& $value;
}
/**
* Wyświetla plik szablonu
* @see Template::fetch();
* @param string $file Nazwa pliku
* @return void
*/
public function display($file){
echo $this -> fetch
($file); }
/**
* Zwraca wartość szablonu
* @throws TemplateException
* @param string $file Nazwa pliku
* @return mixed
*/
public function fetch($file){
$filePath = $this -> templateDir.$file;
extract($this -> _vars
, EXTR_SKIP
);
include($filePath);
}
throw new TemplateException('Błąd przy generowaniu szablonu');
return false;
}
}
class TemplateException extends Exception { }
?>
Barodz prosta klasa, którą używa się tak:
<?php
try{
$tpl = new Template();
//to można oczywiście pobrać z bazy ;)
$allNews = array(array('title' => 'newsik D:', 'id' => 1
), array('title' => 'Hej sialalala', 'id' => 2
), array('title' => 'Umc, umc, umc', 'id' => 3
) );
$tpl -> assign('allNews', $allNews);
$tpl -> display('index.tpl');
}catch(TemplateException $e){
}
?>
a plik szablonu wygląda tak:
<html>
<body>
<?php echo $title ?><br />
<?php foreach($allNews as $news): ?>
<small>
<?php echo $news['title'] ?></small><br />
<?php endforeach; ?>
</body>
</html>
To tyle. Ewentualne błędy, albo udogodnienia proszę zgłaszać.
Pozdrawiam.