Smarty Template 3.1错误:{block}标签

时间:2015-05-20 10:17:28

标签: php oop templates block smarty3

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

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

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

一些例子:

工作(没有嵌套变量在“param”中)

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name" items=DS::PRODUCTS()}
{/block}

NOT WORKING#1(使用``的嵌套变量

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name_`$extra`" items=DS::PRODUCTS()}
{/block}

NOT WORKING#2(使用嵌套变量{})

{block name=CONTENT}
{assign "extra" value="test"}
DropDown: {include "dropdown.html" param="product_name_{$extra}" items=DS::PRODUCTS()}
{/block}

当我使用{include}而没有{block}时,所有示例都可以

问题:是否有其他方法允许嵌套变量,还是已知问题?

提前谢谢

1 个答案:

答案 0 :(得分:1)

简单的答案是 - 不要使用这种花哨的技巧。如果你真的没办法,这可能意味着你的设计理念存在缺陷,需要重新思考,或者,如果是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}块中。但老实说,我会敦促你重新考虑你的基础设计。