Шаблонизатор на PHP


Шаблонизатор на PHP Меня многократно просили дать код шаблонизатора на PHP, которым я пользуюсь. Но прежде чем перейти к этому коду, давайте немного расскажу о наиболее популярном шаблонизаторе - Smarty. Сразу скажу, что я всегда был против всех этих чужих и огромных библиотек. Но Smarty я стерпел и некоторое время использовал, а потом я подумал: "А зачем мне нужна эта помойка, если от шаблонизатора мне нужен минимум функциональности?". Действительно, а что вообще нужно от шаблонизатора? От него нужно лишь подставлять в нужные места tpl-файлов определённые переменные из PHP. Все говорят, что PHP-код в tpl-файлах - это плохо. А чем лучше Smarty-код в tpl-файлах? Да абсолютно ничем, и это даже хуже, поскольку этот Smarty-код потом преобразуется в PHP-код и выполняется. Smarty уже так сильно разошёлся, что стал вообще отдельным языком со своим синтаксисом, со своими циклами и условиями. Разве это требуется от шаблонизатора? Задача шаблонизатора - только подставлять определённые значения в определённые места, а все циклы я могу написать и на PHP, и промежуточный язык для этого не требуется. Итак, привожу код своего шаблонизатора, которым я настоятельно рекомендую Вам пользоваться: <?php class Template { private $dir_tmpl; // Директория с tpl-файлами private $data = array(); // Данные для вывода public function __construct($dir_tmpl) { $this->dir_tmpl = $dir_tmpl; } /* Метод для добавления новых значений в данные для вывода */ public function set($name, $value) { $this->data[$name] = $value; } /* Метод для удаления значений из данных для вывода */ public function delete($name) { unset($this->data[$name]); } /* При обращении, например, к $this->title будет выводиться $this->data["title"] */ public function __get($name) { if (isset($this->data[$name])) return $this->data[$name]; return ""; } /* Вывод tpl-файла, в который подставляются все данные для вывода */ public function display($template) { $template = $this->dir_tmpl.$template.".tpl"; ob_start(); include ($template); echo ob_get_clean(); } } ?> Всего 1 файл размером 0.5 КБ, вместо больше 100 файлов и примерно 1 МБ (в 2000 раз больше). Но при этом всё самое важное данный класс сделает. Теперь создадим tpl-файл (пусть называется menu.tpl), который будет без проблем обработан этим шаблонизатором: <ul> <?php foreach ($this->menu as $link => $name) { ?> <li> <a href="<?=$link?>"><?=$name?></a> </li> <?php } ?> </ul> И, наконец, давайте напишем PHP-файл, который будет вызывать шаблонизатор: <?php $template = new Template("tmpl/"); $menu = array(); $menu["http://site.ru"] = "Главная"; $menu["http://site.ru/page-1.html"] = "Страница 1"; $menu["http://site.ru/page-2.html"] = "Страница 2"; $template->set("menu", $menu); $template->display("menu"); ?> Если бы мы использовали Smarty, то у нас было бы всё ровно так же, но в tpl-файле мы бы написали код Smarty, который потом бы заменялся на PHP и выполнялся. А мы же сразу написали этот PHP-код. И какой смысл учить отдельный язык, который будет лишь тормозить работу, а также требует наличие огромной библиотеки? Надеюсь, данная статья Вам покажет, что не нужно гнаться за бессмысленной функциональностью Smarty. Всё это в гораздо большем объёме есть в PHP, а задача шаблонизатора всего лишь одна - подставлять в tpl-файлы значения, полученные из PHP. Всё.