2009年5月12日 星期二

以索引的方式取用Smarty的config變數

我遇到的狀況是這樣。假設我在Smarty的config檔裡面寫了這樣的內容:
level1 = 等級一
level2 = 等級二
level3 = 等級三
一般來說在template裡面,我要呼叫上述內容的寫法是:
{#level1#}

問題來了,如果我現在要依照PHP檔輸入的內容動態的取用上述內容的話呢?
比如說,透過PHP檔內的動作,現在template裡有個變數$para,內容是"level1"。
我想用它來取得config檔內同名的變數的數值。

很直覺的想法會是
{#$para#}
之類的對吧?不過很可惜,Smarty不支援這種語法。
Smarty的config檔的變數(已讀入的)也會以$smarty->config->level1之類的方式儲存,
不過當然的,我也不能寫成$smarty->config->$para。

另一種想法是config裡面能不能直接寫陣列?
我自己嘗試不行,我也沒看到哪個範例可以的。

最後達成的作法是藉由template內嵌php程式碼。
將config的內容重組成template variables的陣列,傳入template中。
$ar = array('level1', 'level2', 'level3');
foreach($ar as $v)
{
$ar2[$v] = $this->get_config_vars($v);
}
$this->assign('ar', $ar2);
然後在template裡面使用。
$ar[$para]


雖然是相當拐彎抹角的作法,不過會比在template裡面寫一堆重複的程式碼好多了。

沒有留言: