Smarty Template 3.1 ОШИБКА: имена переменных файла шаблона не допускаются в тегах {block}

В настоящее время я пытаюсь улучшить свои шаблоны, используя шаблонный движок Smarty и его тег шаблона ООП. {Блок}

Он работает довольно хорошо, но я также заметил, что когда я использую {block} — теги {include file = «[…]» variableX = «[..]»} прерывается, когда я использую вложенные переменные.

Неустранимая ошибка PHP: […] имена файлов шаблонов переменных не допускаются в тегах {block}

Некоторые примеры:

РАБОТАЮЩИЙ (без вложенной переменной внутри «param»)

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name" items=DS::PRODUCTS()}
{/block}

НЕ РАБОТАЕТ # 1 (с вложенной переменной, использующей «)

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name_`$extra`" items=DS::PRODUCTS()}
{/block}

НЕ РАБОТАЕТ # 2 (с вложенной переменной, использующей {})

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name_{$extra}" items=DS::PRODUCTS()}
{/block}

Когда я использую {include} без {block} все примеры в порядке

Вопрос: Есть ли другой метод, чтобы разрешить вложенные переменные или это известная проблема?

заранее спасибо

0

Решение

Простой ответ — не используйте такие причудливые приемы. Если вы действительно не можете обойти это, это, вероятно, означает, что ваша идея дизайна ошибочна и нуждается в переосмыслении, или, в случае Smarty, вам нужна более длинная цепочка наследования.

Проверьте что-то вроде этого.

Шаблон индекса (index.tpl):

<html><head>
<title>{block 'page-title'}Silly title{/block}</title>
</head><body>{block 'page-content'}Silly content{/block}</body></html>

Содержание одной статьи (index-content.tpl):

{extends 'index.tpl'}
{block 'page-title'}{$title|escape}{/block}
{block 'page-content'}{$content|render}{/block}

Список / постраничный контент статьи (list-content.tpl):

{extends 'list-index.tpl'}
{block 'page-title'}{$title|escape}{/block}
{block 'pager'}{somepaging}{/block}
{block 'list-content'}{somecontent}{/block}

Оболочка, от которой унаследован список (list-index.tpl):

{extends 'index.tpl'}
{block 'page-content'}
{block 'pager'}[1] [2] [3]{/block}
{block 'list-content'}x{/block}
{block 'pager'}[1] [2] [3]{/block}
{/block}

Когда я представляю простую статью, я звоню index-content.tpl, Когда мне нужен постраничный список, я звоню list-content.tpl, Я никогда не называю ни один из базовых шаблонов напрямую.

Однако, если ваша тема требует включения или отключения определенных блоков контента на странице, вы всегда можете перенести выделение в {if} блоки. Но, честно говоря, я призываю вас пересмотреть свой базовый дизайн.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector