SMARTY - Вопрос про наследование шаблонов

StalkerClasses

Новичок
Практично ли использовать возможность наследования в SMARTY? - либо это в дальнейшем при поддержке проекта приведет к путанице... Или лучше пользоваться банальным {include}?
 

hell0w0rd

Продвинутый новичок
зачем вообще использовать шаблонизатор, не используя наследование шаблонов? По моему это самая мощная и нужная штука
 

hell0w0rd

Продвинутый новичок
Absinthe, на сколько я понял из интерентов об этом паттерне - мы это и делаем в твиге с блоками и наследованием, правда в обратном порядке
Родительский шаблон задает расположение элементов с помощью блоков - вторая вьюха в паттерне
Дочерний шаблон определяет стили для каждых блоков по отдельности
 

StalkerClasses

Новичок
зачем вообще использовать шаблонизатор, не используя наследование шаблонов? По моему это самая мощная и нужная штука
Правильно ли понимаю идею наследования.

Имеем основной шаблон (header, меню, [место для вставки блока дочки], подвал) - родитель
Имеем дочерний шаблон с измененным контентом - дочка

--
В итоге два данных шаблона сливаются (родитель + дочка, блок контента заполняется из дочки - в родителе к примеру) - и на выходе мы имеем слитый закэшированный шаблон из двух шаблонов?


hell0w0rd, 2 step view - альтернатива наследованию шаблонов. Так же широко используется.
А можно пример, то что то - не нашел ничего путного кроме:
http://design-pattern.ru/patterns/two-step-view.html
 

hell0w0rd

Продвинутый новичок
StalkerClasses, я не знаю, как в смарти - знаю как в твиге.
Вот если ты понимаешь концепцию наследования в ООП - вот то же самое в шаблонах в твиге. Более того, в твиге каждый шаблон - класс, каждый блок - метод этого класса. Таким образом для реализации в шаблонах наследования используются нативные механизмы php для наследования.
соответсвенно если допустим блок 1 вложен в блок 2, и ты переопределяешь родительский блок 1, то блок 2 просто не будет отрендрен, тк этот метод не дернется. А если переопределишь блок 2 - то блок 1 его дернет в нужный момент.
Чтобы понять - просто попробуй и посмотри на кеш
 

artoodetoo

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

keltanas

marty cats
Оно может и практично, но реализация наследования в smarty в значительной степени более скудная по сравнению с twig.
Так что тут встает вопрос целесообразности выбора smarty, если планируется наследовать шаблоны?
 

AmdY

Пью пиво
Команда форума
artoodetoo, какая, зенит его побери, виртуальная машина, там просто задаётся парент шаблон и функция-кэлбэк для замены блока block_<имя_блока>, открой скомпилированный шаблон.
 

artoodetoo

великий и ужасный
ты сам-то открывал? ))) как ты себе представляешь такое наследование?
Код:
{% extends standalone ? "minimum.html" : "base.html" %}
просто нет там вот этого:
Таким образом для реализации в шаблонах наследования используются нативные механизмы php для наследования.
не нативные. все скомпилированные шаблоны наследуют от Twig_Template, а не друг от друга
если кого-то возмутило слово "виртуальная", то мне очень жаль. ок, НЕвиртуальная машина, имитирующая наследование.
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
artoodetoo, в том то и дело, что вчера со стажёром открывали и разбирали как это работает. Да, там не классическое наследование классов (как ты и писал), а замена, как я описал в после выше.
А вот про виртуальную машину звучало как-то дико.
виртуальная машина, которая эмулирует наследование.
 
Сверху