不确定如何在Smarty中执行此操作,但这是我正在尝试做的事情。
从价格中扣除25.5%。
{math assign="$percentage" equation="(x - y)" x=$product.price y="25.5%" format="%.2f"}
{$percentage}
但是我发现正在做
y="25.5%"
不起作用,我已经尝试过研究最佳实践,但到目前为止我没有发现我理解的......
任何想法都非常受欢迎;)
答案 0 :(得分:1)
首先 - 如果可能的话,你应该在PHP中进行这样的计算,并将结果简单地分配给Smarty。在大多数情况下,这是最好的方式。你还需要注意:
{math}由于使用了它而在性能上是一项昂贵的功能 php eval()函数。用PHP进行数学运算会更有效率 尽可能在脚本中进行数学计算并赋值() 结果到模板。绝对避免重复{math} 函数调用,例如在{section}循环中。
但是,让我们假设您仍然希望直接在Smarty中进行此操作
首先,当你在数学中使用赋值时,你不应该在变量名之前使用$
,因此它应该是{math assign="percentage"
而不是{math assign="$percentage"
你不能在y中使用百分比,所以你需要这样做:
{math assign="percentage" equation="(100-y)/100 * x" x=$product.price y="25.5" format="%.2f"}
{$percentage}
或者这样
{math assign="percentage" equation="(1-y/100) * x" x=$product.price y="25.5" format="%.2f"}
{$percentage}
或者你应该简单地将25.5作为y传递但是已经将它除以100,所以0.255如下所示
{math assign="percentage" equation="(1-y) * x" x=$product.price y="0.255" format="%.2f"}
{$percentage}
所有这些方法都会产生相同的预期结果。
答案 1 :(得分:1)
您不需要使用math
或assign
,只需直接进行计算,但正如Mark Baker所说,$y
需要是一个数字(0.255),而不是百分比字符串:
{($product.price - ($product.price * $y))|string_format:"%.2f%%"}
您可以将百分比字符放在Smarty标记之外,但我已将其放在string_format
中,因此它是自包含的。
答案 2 :(得分:0)
我对Smarty一点都不熟悉,但是您需要将价格乘以百分比(表示为从0到1的十进制值)来获得折扣,然后从原始价格中减去该值。所以,您正在寻找的等式是:
x - (.255 * x)
在Smarty中可能有效或无效:
{math assign="$percentage" equation="(x - (.255 * x))" x=$product.price format="%.2f"}