smarty передает значение из {math} equatio в переменную


Приятного всем дня, у меня есть что спросить у вашей Хель, чтобы лучше понять вот мой код:

{math equation=((($order_total-$commission)+$discount+$delivery_charge)*$rate)}

Я хочу, чтобы это было передано в другую переменную, в php я хочу быть таким

<?php 
  $var=0
  foreach($result as $resultA){
   $var = $var+((($order_total-$commission)+$discount+$delivery_charge)*$rate);
}
?>

Надеюсь, вы сможете мне помочь, ребята!

2 5

2 ответа:

Если вы используете Smarty 3, я настоятельно рекомендую отказаться от {math}:

{$order_total = 123}
{$commission = 13}
{$discount = 10}
{$delivery_charge = 20}
{$rate = 1.1}

{$result = 0}
{$result = $result + ($order_total - $commission + $discount + $delivery_charge) * $rate}
{$result}

Он одновременно лучше читается и быстрее (так как выражение фактически компилируется, а не eval()ed снова и снова).


Эквивалент Smarty 2:

{assign var="order_total" value=123}
{assign var="commission" value=13}
{assign var="discount" value=10}
{assign var="delivery_charge" value=20}
{assign var="rate" value=1.1}

{assign var="result" value=0}
{math 
  assign="result"
  equation="result + (order_total - commission + discount + delivery_charge) * rate"
  result=$result
  order_total=$order_total
  commission=$commission
  discount=$discount
  delivery_charge=$delivery_charge
  rate=$rate
}
{$result}

Если есть шанс перейти на Smarty 3-сделайте это!

Попробуйте использовать параметр assign:

Из документации http://www.smarty.net/docsv2/en/language.function.math.tpl :

Если вы зададите атрибут assign, то выходные данные функции {math} будут назначены этой переменной шаблона, а не шаблону.

Но было бы лучше, если бы вы производили подобные вычисления с помощью PHP (на уровне бизнес-логики, а не на view)

См. http://www.smarty.net/best_practices (раздел " держите бизнес-логику отдельно!")