Простой шаблонизатор, не зацикливаясь на скорости

14 Июн
2012

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

Для обеспечения параллельной работы дизайнера и программиста используются шаблонизаторы (как повествует нам Wikipedia). Используя мой малый опыт работы в высоко нагруженных проектах, я считаю, что мой вариант работает медленнее, чем такие же системы более опытных пользователей. Из этого следует, что это всего-лишь попытки (возможно неудачные) на пути к совершенству.
Данный класс содержит 4 функции и две приватные переменные-массивы. В матрице $data содержится перечень шаблонов и разметка «что заменить, на что заменить». В переменной $tpl содержатся шаблоны, считанные и помещенные туда для дальнейшей обработки.
GitHub Link

Для статический страниц, где требуется лишь вывести шаблон используется примерно такой «паттерн» модуля:
<?php
defined('_JEXEC') or die('You've no access.');
$main = $tpl->read('/template/my.tpl');
$tpl->make($main, '{BODY_BLOCK}');
//читал, что смысла закрывать php файл "?>" нету. Более того, это даже лучше

А для более сложных таков:
<?php
defined('_JEXEC') or die('You've no access.');
$main = $tpl->read('/template/my.tpl');
$tpl->replace($main, "{TEXT}", 'my text');
$tpl->make($main, '{BODY_BLOCK}');

Функция make в «компилирует» шаблон. Если присутствует 2й параметр, то заменяет его на «скомпилированный» вариант. В ином случае возвращает текст. Таким образом для вывода допустим списка новостей:
<?php
defined('_JEXEC') or die('You've no access.');
$main = $tpl->read('template/my.tpl');
$newsTpl = $tpl->read('template/news.tpl');
$getNews = mysql_query('SELECT * FROM ’news’ LIMIT 10');
while($news = mysql_fetch_array($getNews)) {
$tpl->replace($newsTpl, array('{TITLE}', '{TEXT}'), array($news['title'], $news['text']));
$sum .= $tpl->make($newsTpl);
}
$tpl->replace($main, "{NEWS_LIST}", $sum);
$tpl->make($main, '{BODY_BLOCK}');

Результат возвращает функция parse.
Вывод

Хочу начать с того, что это моя первая статья и пойму ваши недовольства, связанные с грамматикой либо неправильными руками.
Основным, по-моему, плюсом данной системы является возможность легкого хеширования страниц сайта.
Ну а со стороны недостатков, я думаю, что главным будет загрузка памяти и, скорее всего, скорость выполнения.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх