Блок Smarty3 добавляется во включенный шаблон

У меня есть несколько шаблонов, написанных с помощью Smarty 3:

  1. Страница макета
  2. Индексная страница
  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}
Другие вопросы по тегам