Рекомендация к использованию: Наследование шаблонов

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

Коротко о файлах в примере (ссылка на архив внизу):

  • topic.prototype.tpl — прототип топика, содержащий всю повторяющуюся разметку. Использованы вложенные конструкции типа
    {block name=...}
  • topic_link.tpl, topic_photoset.tpl, topic_question.tpl, topic_topic.tpl — файлы, наследующие и заменяющие/дописывающие некоторые блоки прототипа топика (topic.prototype.tpl)
  • topic.social.tpl — включение с кодом кнопочек публикации в разные соц-сети.


Коротко о содержании файлов:

Посмотрев файлы примера, не сложно заметить, что файлы topic_*.tpl содержат:
  1. в начале каждого файла наличиствует код
    {extends file=topic.prototype.tpl}
  2. минимум специфической разметки, обрамленной в конструкции
    {block name=... флаг}
    — это замены и дополнения блоков. Флаг может либо отсутствовать (что означает полную замену содержимого блока), либо принимать принимать значения:
    • append — дописывает в конец содержимое блока к наследуемому блоку.
    • prepend — дописывает в начало содержимое блока к наследуемому блоку.
    • hide — скрывает блок (насколько я понял, если добавить в блок прототипа, то по умолчанию блок будет скрыт).
    • nocache — запрещает кеширование содержания блока (а это вообще актуально для LS?).


Документация


ZIP-архив с примером

3 комментария

avatar
Спасибо за описание, как раз хотел плотнее разобраться, как изменять шаблоны не переписывая их большими кусками, похоже, что это подходящий механизм для уровня блоков. Но всё зависит от того, определены ли нужные части в виде именованных блоков в родительском шаблоне, верно?
  • NPC
  • 0
avatar
да. и, кстати, в моей ветке на github наследование шаблонов уже реализовано :)
avatar
Ага, посмотрел, неслабая работа, круто! Надеюсь, это включат в ствол :)

Вообще, интересно, что в Synio блоки (в вышеприведённом смысле) вообще не объявлены — получается, надо пройтись по всем .tpl, и попроставлять названия? По идее, это никому не помешает, на разметку никак не повиляет и т.п., то есть вполне безопасная операция (лишь бы начальство ЛС это так восприняло :)).
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.