| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Наследование шаблонов в Smarty
Когда-то, давным-давно, мне пришлось использовать небезызвестный шаблонизатор
Smarty. Сначала я, понятное
дело, возмущался и кричал, какая же гадость эта Шаблоны я обычно строил с помощью инклюдов: в начале подключался header.tpl, в
конце — footer.tpl, в середине ещё что-нибудь нужное. В целом разметка
получалась довольно аккуратной, но не проходило ощущение, что не хватает чего-то
важного. Окончательно понимание этого чего-то появилось, когда мне случилось
написать простенькое приложение на Django. И это «что-то», как все поняли,
оказалось
наследованием шаблонов.
Простая, как и всё гениальное, идея позволяла существенно упростить шаблоны и
избавиться от дублирующих блоков. Примечание: дабы не плодить сущего, я не буду пересказывать статью про наследование шаблонов в Django, однако рекомендую её прочитать, дабы примерно понять, что нас ждёт и чтобы по исходным текстам шаблонов можно было понять, что они делаютВопреки расхожему мнению, одной из главных задач Smarty является не банальная замена <? php echo $var ?> более лаконичными {$var}, а
расширение базовой функциональности плагинами. В частности, Smarty позволяет
определять собственные блоковые функции. Именно этим и воспользуемся.Примечание: в отличие от Django, здесь будет использован не одиночный тегСинтаксис шаблонов наследования будет примерно таким: parent.tpl:Особо, думаю, ничего пояснять не надо: перед компиляцией шаблона блок
{extends} заменяется содержимым шаблона, который указан в параметре
template блока. Все именованные блоки, которые были определены внутри
{extends}, перекрывают соответствующие блоки в родительском
шаблоне.А результат работы выглядит вот так: Идея вкратце такова: внутри объекта шаблонизатора введём ассоциативный массив, ключами которого будут имена наследуемых блоков, а соответствующими им значениями — массивы, содержащие текстовые содержания этих блоков, хранящиеся в порядке их (блоков) вызова. Согласен, фраза получилась заумной, поэтому проще показать на предыдущем примере:<html> <head> <title> Inherit it! </title> </head> <body> <p>Just a paragraph</p> <p>It`s a child</p> </body> </html>
Надеюсь, всё просто. Теперь остаётся при вызове блока в шаблоне «достать» из
этого хранилища последний элемент и отобразить его на месте тегов :)Как я уже писал выше, для реализации нам понадобится зарегистрировать 2 блока с именами extends и block, а так же ввести хранилище
значений. Пусть блок {extends}{/extends} будет отвечать за получение
исходного кода шаблона-родителя, а {block}{/block} — за создание и
переопределение наследуемых блоков. Мануал поможет нам создать блоковые плагины: block.extends.php:
block.block.php:
Здесь надо сказать, что setBlock() и getBlock() — методы шаблонизатора, которые
соответственно помещают и получают текстовые значения наследуемых блоков из
стека, про который было сказано выше. Расширим класс Smarty, введя массив стека
и методы:mySmarty.class.php
Теперь, подключив mySmarty.class.php, можно создавать объект класса
mySmarty и пользоваться прелестями наследования шаблонов. Ленивые могут скачать готовый пример шаблонов и пощупать на деле (архив весит 2.2 кб, Smarty в комплект поставки, естественно, не входит). Спасибо за внимание :) Источник: habrahabr Рубрика: PHP
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|