2014-12-18 3 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 может не всегда решить проблему. Например, если вы хотите узнать, какие поля должны быть извлечены из базы данных, на основе того, какие поля используются в шаблоне. Плагин не может знать, можно ли пропускать дорогостоящее соединение из-за того, что данные из соединения не используются в шаблоне. –

Смежные вопросы