При расширении с помощью doLayout
у вас может быть только один подшаблон, но вы можете include
больше одного.
В чем разница и как лучше всего?
При расширении с помощью doLayout
у вас может быть только один подшаблон, но вы можете include
больше одного.
В чем разница и как лучше всего?
Они как бы инверсны друг другу.
doLayout
используется как часть тега extends
. Тег extends указывает, какой шаблон вы хотите расширить, а тег doLayout
указывает, где в расширенном шаблоне вводится ваш код.
Тег include
просто указывает, что в указанную точку должен быть введен другой шаблон.
Таким образом, doLayout работает аналогично включению, за исключением того, что тег doLayout не указывает, какой шаблон внедряется. Это делается с помощью тега extends и означает, что шаблон (который обычно содержит заголовки, нижние колонтитулы и общие css и javascript) может быть расширен без необходимости знать что-либо о шаблоне, который его расширяет.
Include
, это просто тупая инъекция кода.
Если вы хотите добиться функциональности doLayout с помощью include (и именно так вы сделаете это в PHP или чем-то подобном), вы можете сделать
#{include 'header.html'}
your template code
#{include 'footer.html'}
Это должно быть реплицировано на каждой странице вашего шаблона. В то время как использование extends
и doLayout
позволяет вам просто делать
#{extends 'template.html'}
А когда ваш код вводится в template.html, он управляется тегом doLayout.
Подход с расширением — просто более аккуратный способ. Кроме того, если вы решите изменить макет своей страницы, вам нужно будет обновить только один файл, что дает вам больше гибкости в отношении того, где ваш контент находится внутри вашего расширенного шаблона.
Из группы Google я заметил различия между extends (doLayout), include and a tag
:
extend и include похожи, разница в основном в том, как вы передаете переменные
С расширением родительский шаблон предоставляет шаблон, а дочерний шаблон предоставляет «тело». Например, родительский шаблон может отображать верхний и нижний колонтитулы, а дочерний шаблон может отображать основное содержимое страницы. Обычно вы устанавливаете переменные в дочернем шаблоне, которые считываются и применяются в родительском шаблоне, например, #{set title:'Pet shop' /}
или #{set
showLoginBox:true /}
.
Вы используете include, когда хотите сделать одно и то же много раз в одном родительском шаблоне. Например #{include 'formStatusFields.html' /}
Переменные в родительском шаблоне доступны для включенного шаблона.
Если у вас есть фрагмент кода шаблона, который выполняется из нескольких разных родительских шаблонов, вам следует использовать тег. Вы можете передавать переменные в тег. например #{button label:'Ok', id:'ok-button'}