У данного шаблонизатора подход, который отличается от прочих типов шаблонизаторов. И это не может не заинтересовать.
По запросу PHPTAL хабр выдает только одну ссылку,TAL — это Атрибутивный Язык Шаблонов. Он так называется, потому что команды языка являются атрибутами тегов.
Логика нативных шаблонов
В нативных шаблонах за основу берется PHP или какой-то другой язык, а HTML получается вследствии его работы.
- <table>
- <?foreach($myarray as $myitem) :?>
- <tr><td><?=$myitem?></td>
- <?endforeach;?>
- </table>
HTML затерялся где-то в дебрях языка. Это все плохо читабельно. Может порождать трудно обнаруживаемые ошибки. Например такие
- <div><?php if ($flag):?>текст</div><?endif;?>
Кстати говоря, потому смарти и получил такое распространение, что он не меняет логику PHP, а просто немного упрощает синтаксис.Логика TAL
Вот тот же пример цикла, написанный на PHPTAL
- <table>
- <tr tal:repeat="myitem myarray">
- <td tal:content="myitem">Текст, который будет заменен значением myitem</td>
- <td tal:replace="">Пример 1</td>
- <td tal:replace="">Пример 2</td>
- <td tal:replace="">Пример 3</td>
- </tr>
- </table>
* This source code was highlighted with Source Code Highlighter.
Его плюсы:- Такой шаблон будет корректно отображен в браузере с примерами «Пример 1», «Пример 2» и «Пример 3», поэтому можно продемонстрировать его клиенту даже на той стадии, когда код, необходимый для получения значений 'myarray', еще не существует.
- Очень краткий код, гораздо удобнее, чем при использовании нативных и смарти шаблонизаторов.
- Весь код пишем прямо в шаблоне, не надо создавать дополнительный файл с логикой, как, например, в блочных шаблонизаторах или если вы будете писать отдельные функции, а потом встраивать в HTML просто переменные.
Пространство имен TAL
В порядке их обработки шаблонизатором:- tal:define — Этот атрибут объявляет одну или более переменных, которые затем могут быть использованы в шаблоне
- tal:condition — Тег и его содержимое будет отображено только тогда, когда условие выполняется.
- tal:repeat — Этот атрибут служит для циклов над перечисляемыми данными
- tal:replace — Используя этот атрибут, можно заменить весь элемент целиком (включая открывающий и закрывающий тег) на заданную строку, или на пустую, если значение не задано.
- tal:content — Значение этого атрибута станет текстом внутри тега.
- tal:attributes — С помощью tal:attributes можно устанавливать на лету значения атрибутов тега.
- tal:omit-tag — Этот атрибут заставит парсер PHPTAL проигнорировать открывающий и закрывающий теги элемента и вывести только его содержимое.
Пространство имен METAL (макросы)
По своей сути макросы — это обычные шаблоны, которые могут быть многократно вставлены в другие шаблоны.- metal:define-macro — Этот атрибут объявляет макрос
- metal:use-macro — Этот атрибут вызывает макрос и включает результат его выполнения в текущий шаблон в то место, откуда он вызван
- metal:define-slot — Этот атрибут должен быть объявлен внутри тега, объявляющего макрос (metal:define-macro).
- metal:fill-slot — Этот атрибут может быть использован только внутри элемента с metal:use-macro.
PHPTALES
Cинтаксис выражений. позволяет, к примеру, писать php код внутри атрибутовtal:content=«php:strtolower($value)»
- path: — используется по-умолчанию. пример: tal:content=«data/user/name»
- string: — значение разбирается как строка. пример: tal:replace=«string:this is a $$100 page»
- not: — используется только в tal:condition
- exists: — аналог php isset()
- php: — синтаксис php
Пространство имен I18N (интернализация)
Инструмент, для создания мультиязычных шаблонов- i18n:translate — Этот атрибут определяет текст, который должен быть переведен с помощью системы перевода, встроенной в PHPTAL.
- i18n:attributes — Задает, какие атрибуты должны быть переведены
- i18n:name — В сам перевод можно динамически посдтавлять значения переменных.
Расширение возможностей PHPTAL
PHPTAL позволяет программисту добавлять в него триггеры, фильтры, phptales, а также просто передавать в него объекты, методы которых затем вызывать в шаблоне.Это открывает огромные возможности по расширению шаблонизатора, а также возможности внедрения в Ваш фреймворк.Ссылки на первоисточники: официальный сайт | русский перевод документации