2015-05-20 27 views
0

內變量模板文件名不能讓這些天,我嘗試使用Smarty模板引擎和OOP模板標籤{塊}Smarty的模板3.1 ERROR:{塊}標籤

其工作,以提高自己的模板相當不錯,但我也注意到當我使用{block} - 標記{include file =「[...]」variableX =「[..]」}當我使用嵌套變量時會中斷。

PHP致命錯誤:[...]變量模板文件名不允許{}塊標籤

一些示例內:

WORKING(沒有內部 「參數」 嵌套變量)

{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} 

在我使用{包括}而不{塊}的所有示例OK

問題:是有任何其他方法來允許嵌套變量或是一個已知的問題?

謝謝你提前

回答

1

簡單的答案是 - 不要使用這種奇特的技術。如果你真的沒有辦法解決這個問題,這可能意味着你的設計理念有缺陷,需要重新思考,或者在Smarty的情況下,你需要更長的繼承鏈。

檢查這樣的事情。

指數模板(在index.tpl):

<html><head> 
<title>{block 'page-title'}Silly title{/block}</title> 
</head><body>{block 'page-content'}Silly content{/block}</body></html> 

單件物品的內容(索引content.tpl):

{extends 'index.tpl'} 
{block 'page-title'}{$title|escape}{/block} 
{block 'page-content'}{$content|render}{/block} 

列表/分頁文章內容(列表content.tpl):

{extends 'list-index.tpl'} 
{block 'page-title'}{$title|escape}{/block} 
{block 'pager'}{somepaging}{/block} 
{block 'list-content'}{somecontent}{/block} 

,所述列表是從(列表在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}塊中。但說實話,我會敦促你重新考慮你的基礎設計。

+0

有意義考慮額外的塊 - 但實際上並沒有回答如何解決問題的問題 –