在Smarty中连接变量和字符串以包含文件

时间:2017-05-31 08:01:12

标签: php include concatenation smarty prestashop

在tpl文件中,我需要动态地包含一个文件,其中包含字符串和变量的串联。

这项工作(没有连接):

{include file="catalog/_partials/faq-86.tpl"}

然后,我想取代" 86"通过变量(产品ID)。

这是我尝试过的(基于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 个答案:

答案 0 :(得分:3)

你可以像这样使用cat函数:

{assign var='url' value="catalog/_partials/"|cat:$product.name|cat:".tpl"} 
{include file=$url}

看起来您正在使用具有智能版本3.1.19的Prestashop 1.7,而且我在他们的论坛中找到(并经过测试)您必须编辑文件/vendor/prestashop/smarty/Smarty.class.php,查找inheritance_merge_compiled_includes并设置为false。然后删除所有缓存模板(删除文件夹/app/cache/dev/app/cache/prod),它应该在块元素内部工作。它在我的测试中起作用。