Separate – Шаблонизатор для PHP

от автора

Представляю вашему вниманию PHP шаблонизатор, который я разрабатывал несколько лет и только недавно выложил в сеть.

Как все началось и зачем вообще нужен еще один шаблонизатор?

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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *