Привет, хабраюзеры!
Мне захотелось с вами поделиться одной простой полезной вещью — шаблонизатором. В него также встроен компилятор + кэш.

Предистория

Все началось давно. неслолько месяцев назад я даже не знал что такое оператор echo. Но мне таки очень хотелось научиться работать на PHP, хотябы делать простые сайты с шаблонами, без использования БД.

Начал с просмотра скринкаста Костикса. Неплохо, даже очень. Вроде начал разбираться, но в планах было большее. Хотелось сделать CMS.

Ну ладно. Фронтенд и бэкенд почти готовы. Но есть одно «но»: хотелось интегрировать шаблоны. Да не просто шаблоны с нативным синтаксисом PHP, а с использованием лексем, типа {CONTENT}.

Код

Код очень простой, но работающий:
class Style {
	protected $cache_dir = ""; // Путь к директории кэша 
	protected $ext = ""; // Расширение для кэша
		
        // Загрузка
	function load ($path) {
		$name = basename ($path);
		if (file_exists($cache_dir.$name.$ext)) {include_once ($cache_dir.$name.$ext);}
		else {$this->compile($path, $name);}
	}		
		
        // Компиляция
	function compile ($path, $name) {
		$file = file_get_contents ($path);
		$result = $this->replace($file);
		file_put_contents ($cache_dir.$name.$cache_ext, $result);
		include_once ($cache_dir.$name.$cache_ext);
	}
		
        // Замена переменных
	function replace ($data) {
		$matches = array (
		        "{переменная}" => "значение",
            );
		$result = str_replace (array_keys($matches), array_values($matches), $data);
		return $result;
	}
		
        // Очистка кэша
	function update () {
		$handle = opendir ($cache_dir);
		while (false !== ($file = readdir($handle))) {
			if ($file !== "." and $file !== "..") {
                   $result = unlink ($cache_dir.$file);
			}
           }
		closedir ($handle);
		return $result;
	}
}
	
$style = new Style (); // Определение объекта


Вызов

$style->load("путь_до_файла_шаблона");