У меня есть формула, которую я хочу написать в smarty. Поскольку в формуле более одного метода pow (), она становится сложной и, похоже, не работает.
Это формула:
rate = Kapital*((Zinssatz_Effektiv/100+1)^(1/12))^Monate/((((Zinssatz_Effektiv/100+1)^(1/12))^Monate)-1)*(((Zinssatz_Effektiv/100+1)^(1/12))-1)
моя попытка в smarty выглядит так:
{math equation="x*((y/100+1)pow(1/12))pow z/((((y/100+1)pow(1/12))powz)-1)*(((y/100+1)pow(1/12))-1)" x=$Kapital y=$Zinssatz_Effektiv z=$Monate format="%.2f"}
Каким-то образом смешивание со всеми пауами неправильно, и я не понимаю, как это сделать.
Это скелет плагина Smarty, который вы можете реализовать для упрощения вычислений.
Напишите следующую функцию в файле, который вы включаете на всех страницах:
function smarty_function_rate($params, Smarty_Internal_Template $template)
{
// Validate input parameters
// ... verify here that all the parameters are provided,
// call $smarty->trigger_error() to report invalid or missing values
// Example
if (! isset($params['kapital']) || floatval($params['kapital']) < 0) {
$smarty->trigger_error("Parameter 'kapital' is mission or it have an invalid value. A number greater than zero was expected.", E_USER_ERROR, __FILE__, __LINE__);
}// Extract the values
$kapital = $params['kapital'];
$zinssatz = $params['zinssatz']
$monate = $params['monate'];
// Do the complex calculation here using $kapital, $zinssatz, $monate
$rate = $kapital * 0.01; // this is NOT the formula :-)
// And return the value
return $rate;
}
Вы можете назвать это как хотите, это всего лишь пример.
Чтобы Smarty узнал о вашем новом плагине, вы должны зарегистрировать его.
Вы можете сделать это, как только создадите экземпляр Smarty
Объект или только на страницах, которые нуждаются в этом, как вы предпочитаете.
$smarty->registerPlugin('function', 'rate', 'smarty_function_rate');
Вот, function
это тип плагина (template function
), не связывайтесь с этим, rate
это имя функции, как вы будете вызывать ее в шаблонах (например, {rate kapital=123}
, вы можете поставить другое имя, если вы предпочитаете) и smarty_function_rate
это имя функции, которая реализует плагин, описанный выше. Если вы используете другое имя для функции, измените его также при вызове регистрации.
Замечания: В Smarty 2 есть разные методы для регистрации каждого типа плагина, и они имеют на один параметр меньше (конечно, тип плагина). Метод для функций в Smarty 2 является register_function()
,
Вы можете использовать новую функцию {rate}
в шаблонах, аналогичных функциям в комплекте с Smarty
, лайк {math}
или же {assign}
:
{rate kapital=1000 zinssatz=5 monate=12}
Во время выполнения smarty_function_rate()
функция будет вызываться с kapital
, zinssatz
а также monate
как ключи в $param
и возвращаемое значение заменит вызов функции.
Для форматирования результата вы можете либо изменить код плагина, чтобы получить дополнительный параметр $format
и вернуть значение в виде отформатированной строки или вы можете предоставить ему другой параметр assign
содержащий имя Smarty
переменная, где он будет хранить результат или оба (как {math}
делает).
Других решений пока нет …