Блок Smarty3 добавляется во включенный шаблон
У меня есть несколько шаблонов, написанных с помощью Smarty 3:
- Страница макета
- Индексная страница
- Страница включения
layout.tpl:
{block "css"}{/block}
{block "js"}{/block}
{block "content"}{/block}
index.tpl:
{extends "layout.tpl"}
{block "content"}
content text
{include "include.tpl"}
{/block}
include.tpl
{block "js" append}
include some extra js files for this included content
{/block}
include text
Но я получил исключение компилятора:
Неустранимая ошибка: необработанное исключение 'SmartyCompilerException' с сообщением 'Синтаксическая ошибка в шаблоне include.tpl {block "js" prepend} слишком много сокращенных атрибутов
Блок добавления не доступен во включенном шаблоне, даже если он включен дочерним шаблоном?
Я думаю, что было бы очень полезно, если бы я мог использовать блок append каким-то образом, или могут быть другие способы сделать это? Спасибо!
2 ответа
Шаблонное наследование Smarty обрабатывается еще до того, как парсер узнает о вашем {include}. Таким образом, он не может обрабатывать {block}s во включенных шаблонах. То есть, если включенный шаблон не расширяет сам другой шаблон.
"слишком много сокращенных атрибутов" относится к отсутствию имен атрибутов в заявлении:
{block "js" append}
Smarty сбивается с толку, потому что больше не ясно, к чему относится каждый атрибут.
Вместо этого замените сокращенный атрибут для "js" на длинную версию name = "js", и все будет в порядке:
{block name="js" append}