Как все началось и зачем вообще нужен еще один шаблонизатор?
Smarty и другие популярные шаблонизаторы мне показались слишком громоздкими для простых проектов и я решил разработать собственный шаблонизатор. Первая версия появилась еще в 2004 году. В процессе разработки интернет проектов я постоянно внедрял новые идеи и прочие улучшения. В настояший момент движок шаблонизатора состоит из всего одного файла и все равно имеет ряд уникальных возможностей.
На сайте separate.esud.info/ вы можете скачать исходный код. Также там доступна подробная документация всех функций на трех языках – русском, английском и немецком. Я надеюсь что проект заинтересует людей и будет в будущем активно развиваться. Поэтому код я выложил в Github на сайте github.com/esud/separate
Подробное описание вы найдете на сайте ru.separate.esud.info/documentation/
Ниже я коротко опишу ключевые возможности.
Заранее должен сказать что данный шаблонизатор хоть и является относительно быстрым, но тем не менее у меня не было цели сделать его самым быстрым в исполнении. В первую очередь у меня была цель спроектировать его удобным, простым и уникальным в использовании.
Самое простое что есть – присвоение значений.
Шаблон (index.htm):
${MY_VARIABLE}
PHP код:
require_once './separate/SeparateTemplate.php'; $t = SeparateTemplate::instance()->loadSourceFromFile('./index.htm'); $t->assign('MY_VARIABLE', 'my value'); $t->display();
Вывод:
my value
Можно генерировать списки с динамической информацией.
Шаблон (index.htm):
<ul> <!-- BEGIN my_block --> <li>${ROW_NUMBER}</li> <!-- END my_block --> </ul>
PHP код:
require_once './separate/SeparateTemplate.php'; $t = SeparateTemplate::instance()->loadSourceFromFile('./index.htm'); for($row = 1; $row <= 3; $row++) { $myBlock = $t->fetch('my_block'); $myBlock->assign('ROW_NUMBER', $row); $t->assign('my_block', $myBlock); } $t->display();
Вывод:
<ul> <li>1</li> <li>2</li> <li>3</li> </ul>
Одна из уникальных возможностей, это форматирование значений. В данном случае форматер «Time» конвертирует Unix-Timestamp значение в читаемое время.
Шаблон (index.htm):
${(Time)UNIX_TIMESTAMP}
PHP код:
require_once './separate/SeparateTemplate.php'; require_once './separate/formatter/TimeFormatter.php'; $t = SeparateTemplate::instance()->loadSourceFromFile('./index.htm'); $t->assign('UNIX_TIMESTAMP', time()); $t->display();
Вывод:
08:55
Также можно использовать собственные классы, которые будут форматировать значения. В ниже указанном примере форматер ToUpper преобразует строковую информацию в верхний регистр.
Шаблон (index.htm):
${(ToUpper)MY_VARIABLE}
PHP код:
require_once './separate/SeparateTemplate.php'; class ToUpperFormatter extends AbstractValueFormatter { public function formatValue($value) { return strtoupper($value); } } $t = SeparateTemplate::instance()->loadSourceFromFile('./index.htm'); $t->assign('MY_VARIABLE', 'my value'); $t->display();
Вывод:
MY VALUE
Кроме SeparateTemplate.assign(…) есть и другие методы присвоения значений. Например SeparateTemplate.assignForBlock(…). Этим методом можно присвоить значение к переменной, которая находится в определенном блоке (включая дальнейшие под-блоки). Переменные, находящиеся в других блоках, игнорируются. Метод SeparateTemplate.assignForGlobal(…) присваивает значения ко всем переменным, независимо от того, в каком блоке они находятся.
В основной шаблонный файл можно интегрировать дополнительные файлы, например:
Header-файл (header.htm):
<html> <body>
Footer-файл (footer.htm):
</body> </html>
Код основного шаблона (index.htm):
<!-- INCLUDE header.htm --> <p>Привет</p> <!-- INCLUDE footer.htm -->
Вывод:
<html> <body> <p>Привет</p> </body> </html>
В шаблонном коде также поддерживаются IF-условия:
<!-- IF '${MY_VARIABLE}' == 'hello' --> HTML код... <!-- END IF -->
С помощью параметров можно установить любые настройки в самом коде шаблона. В PHP коде все доступные параметры прочитываются методом SeparateTemplate.getParameters().
Шаблон (index.htm):
<!-- PARAMETER NUMBER_OF_ROWS '100' -->
PHP код:
require_once './separate/SeparateTemplate.php'; $t = SeparateTemplate::instance()->loadSourceFromFile('./index.htm'); print_r($t->getParameters());
Вывод:
Array ( [NUMBER_OF_ROWS] => 100 )
PS: Это моя первая статья на сайте habrahabr.ru. Если она вам понравилась и вы хотите поддержать распространение шаблонизатора Separate, то я буду очень рад если вы поставите ей +1. В комментах я постараюсь ответить на все ваши вопросы.
ссылка на оригинал статьи http://habrahabr.ru/post/170269/
Добавить комментарий