Объединить переменную и строку в Smarty, чтобы включить файл

В файл 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}

1

Решение

Вы можете использовать функцию 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) и он должен работать внутри элемента блока. Это сработало в моем тесте.

3

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

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

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