В файл TPL, мне нужно включить файл динамически, с конкатенацией строки и переменной.
Эта работа (без объединения):
{include file="catalog/_partials/faq-86.tpl"}
Затем я хотел бы заменить «86» на переменную (идентификатор продукта).
Вот что я попробовал (основываясь на других ответах на stackoverflow, на форуме smarty или документации smarty):
1)
{include file="catalog/_partials/{$product.name}.tpl"}
2)
{assign var="id_pr" value="85"}
{include file="catalog/_partials/.$id_pr.tpl"}
3)
{assign var="id_pr" value="85"}
{include file="catalog/_partials/$id_pr.tpl"}
4)
{include file="{'catalog/_partials/'}{$product.name}{'.tpl'}"}
5)
{assign var='url' value="{'catalog/_partials/'}{$product.name}{'.tpl'}"}
{include file=$url}
Вот умная ошибка:
Синтаксическая ошибка в шаблоне «templates / catalog / product.tpl» в строке 273
Переменная «{include file =» catalog / _partials / {$ product.name} .tpl «}»
имена тегов не допускаются в тегах {block}
Итак, мой вопрос, возможно ли объединить переменную и строку для включения файла?
Я знаю, что это не лучший подход, но для шаблонной цели мне нужно быстро загружать разные файлы tpl на странице разных продуктов.
Я думаю, что это возможно, так как это условие работает (нет конкатенации, но файл включен динамически):
{if $product.id === 85}
{include file="catalog/_partials/faq-85.tpl"}
{elseif $product.id === 86}
{include file="catalog/_partials/faq-86.tpl"}
{/if}
Вы можете использовать функцию cat следующим образом:
{assign var='url' value="catalog/_partials/"|cat:$product.name|cat:".tpl"}
{include file=$url}
Похоже, вы используете Prestashop 1.7 с версией smarty 3.1.19, и, как я обнаружил на их форумах (и протестировал), вы должны отредактировать файл /vendor/prestashop/smarty/Smarty.class.php
, Ищу inheritance_merge_compiled_includes
и установить false
, Затем удалите все шаблоны кеша (удалите папку /app/cache/dev
а также /app/cache/prod
) и он должен работать внутри элемента блока. Это сработало в моем тесте.
Других решений пока нет …