2011-09-19 46 views
2

我想將{unset($array['index'])}變成Smarty 3模板。Smarty:取消模板中的數組索引

支持這樣的語法(或類似)嗎?谷歌搜索和文檔閱讀後,我找不到滿意的東西。

也許我應該向Smarty開發團隊請求功能請求? :)

無論如何,你會如何做到這一點目前可用的模板功能?

+0

謝謝大家的回答。似乎問題確實在控制器/視圖分離。但事情在原始代碼中完成的方式導致我「想要在模板中取消設置數組索引」... –

回答

5

我不認爲在smarty中有直接的支持。你總是可以用smarty的{php}標籤來做到這一點,但我強烈建議你不要這樣做。邏輯不屬於演示級模板。

+0

+1:絕對正確。 –

+3

如果「邏輯不屬於演示文稿」,你不需要Smarty,只需要'strtr()':-P然而,爲了使這個評論有用,你認爲你可能不需要做你的建議因爲你可以循環使用一個'{if}'和'{continue}'來跳過你不需要的密鑰?正如[例7.42](http://www.smarty.net/docs/en/language.function.foreach.tpl) – artfulrobot

+0

@artfulrobot使用'{if}'和'{continue}'是根本不同的,因爲他們不修改數據。數據修改不屬於表示層。 –

1

模板引擎背後的主要思想是,你可以做所有的負載,邏輯,解封等你解析視圖前。有人說,你不應該在你的模板中取消設置數據,我很確定他們不會實現該功能請求。

我也不明白爲什麼你想要取消一個聰明的變量:只是不使用它,它不會顯示。

0

你不覆蓋的價值?

{assign var="array" value=array()} 
{$array['index']='1'} 
{$array['index2']='2'} 
{$array['index']=''} 
{$array|print_r} 

這智者< 3爲我工作的,不知道是否仍然有效,因爲他們真的搞砸了智者。

2

試試這個

{$array.index = null} 
+0

感謝這個想法,但不幸的是,它並沒有按照我想要的那樣完成:從'Array([a] => 1 [b] => 2)''開始,'{array.a = null}' ,我得到'Array([a] => [b] => 2)'而不是'Array([b] => 2)' –

0

嘗試

{VAR分配= $ array.index值= NULL)}

3

有雖然:-)

方式
{$array=$array|array_diff_key:(['index']|array_flip)} 

即使這不是一個好主意在模板中執行,有時可以節省您的時間。