在 Smarty 中连接一个变量和一个字符串以包含一个文件
Concatenate a variable and a string in Smarty in order to include a file
在 tpl 文件中,我需要动态包含一个文件,其中包含一个字符串和一个变量的串联。
这项工作(无串联):
{include file="catalog/_partials/faq-86.tpl"}
然后,我想用一个变量(产品 ID)替换“86”。
这是我尝试过的方法(基于 Whosebug、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}
这是聪明的错误:
Syntax error in template "templates/catalog/product.tpl" on line 273
"{include file="catalog/_partials/{$product.name}.tpl"}" variable
template file names not allow within {block} tags
所以我的问题是,是否可以连接一个变量和一个字符串以包含一个文件?
我知道这不是最好的方法,但出于模板目的,我需要在不同的产品页面上快速加载不同的 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}
看起来您正在使用具有 smarty 版本 3.1.19 的 Prestashop 1.7,正如我在他们的论坛中发现的(并经过测试)您必须编辑文件 /vendor/prestashop/smarty/Smarty.class.php
,查找 inheritance_merge_compiled_includes
和设置为 false
。然后删除所有缓存模板(删除文件夹 /app/cache/dev
和 /app/cache/prod
),它应该在块元素内工作。它在我的测试中有效。
在 tpl 文件中,我需要动态包含一个文件,其中包含一个字符串和一个变量的串联。
这项工作(无串联):
{include file="catalog/_partials/faq-86.tpl"}
然后,我想用一个变量(产品 ID)替换“86”。
这是我尝试过的方法(基于 Whosebug、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}
这是聪明的错误:
Syntax error in template "templates/catalog/product.tpl" on line 273 "{include file="catalog/_partials/{$product.name}.tpl"}" variable template file names not allow within {block} tags
所以我的问题是,是否可以连接一个变量和一个字符串以包含一个文件?
我知道这不是最好的方法,但出于模板目的,我需要在不同的产品页面上快速加载不同的 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}
看起来您正在使用具有 smarty 版本 3.1.19 的 Prestashop 1.7,正如我在他们的论坛中发现的(并经过测试)您必须编辑文件 /vendor/prestashop/smarty/Smarty.class.php
,查找 inheritance_merge_compiled_includes
和设置为 false
。然后删除所有缓存模板(删除文件夹 /app/cache/dev
和 /app/cache/prod
),它应该在块元素内工作。它在我的测试中有效。