Smarty Template 3.1错误:变量模板文件名不允许在{block}标签中


Smarty Template 3.1 ERROR: variable template file names not allow within {block} tags

这些天我正试图通过使用Smarty模板引擎和它的OOP模板标签{block}来改进我的模板

它工作得很好,但我也注意到当我使用{block} -标签{include file="[…]]"variableX = " [. .}在使用嵌套变量时中断。

PHP致命错误:[…]变量模板文件名不允许使用{block}标签

一些例子:

{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}时,所有示例都是ok的

问题:是否有其他方法允许嵌套变量或它是一个已知的问题?

提前感谢

简单的答案是-不要使用这种花哨的技术。如果你真的没有办法绕过它,这可能意味着你的设计思想是有缺陷的,需要重新考虑,或者,在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}块中包装选择。但是,老实说,我强烈建议您重新考虑您的基本设计。