2014-12-18 47 views
0

有沒有辦法找出哪些變量由Smarty模板中使用?考慮一個將模板作爲參數並將變量賦值給它的函數。一些變量需要大量的計算,因此我不想計算它們,並將它們分配到模板如果不需要他們。我想是這樣的:檢查,如果一個變量在Smarty的模板中使用

function addVariables($tpl) { 
    if($tpl->usesVariable('foo')) 
     $tpl->assign('foo', computationallyHeavyFunction()); 
    return $tpl; 
} 

如果$tpl = "some text using some variable {$bar}"foo不應該被分配,但是如果$tpl = "some text using some variable {$foo}"foo應計算和分配。這可能嗎?

回答

0

我不這麼認爲。但可能是一個更好的(/工作)的方法是創建一個延遲加載插件的包裝,並用它來代替直接變量調用的。

這樣,只有當它在任何地方使用,如果你在這裏做了計算/這裏所說的計算沉重的部分,你可以肯定的是,如果真正需要的計算將僅做插件會被調用。

+0

你知道,如果有,爲什麼實現這樣的功能應該不難一個很好的理由? –

+0

我不認爲這是故意的。通常編寫編譯器/解釋器是一項艱鉅的任務,有很多限制和要求。我想作者根本不需要這個功能。順便寫一個插件smarty並不困難。基本上他們只是簡單的PHP功能。 –

+0

是的,但一個Smarty插件可能並不總能解決問題。例如,如果您想知道應根據模板中使用哪些字段從數據庫中提取哪些字段。由於來自聯接的數據未在模板中使用,插件無法知道是否可以跳過昂貴的聯接。 –