我目前正在为我的Prestashop 1.7.5开发报价模块。我已经通过覆盖Product.php来增加产品价格。
现在,当生成/显示报价时,我需要进行一些计算,以将这些价格添加到产品总数和订单总数中。
通过模板中的简单foreach,我拥有所有价格。
{foreach $products as $product}
{$product.service}
{/foreach}
输出
0,30 € 0,10 € 0,20 €
但是,我希望这些数字能够彼此添加(例如,此处总计为0.60欧元)。
顺便说一句,我知道我们应该在php文件而不是模板中这样做(我也尝试过这种方法,但是非常复杂...)。而且,我不需要保存这些数字,仅用于显示...
有什么想法吗?
谢谢;)
答案 0 :(得分:1)
以下将处理它。在第一部分中,我模拟了您的数据,然后运行与您的问题完全相同的foreach
来比较输出。
最后,在第三块中,我向您展示了用于计算总数的代码,并将输出格式设置为货币。
{* Sample code to simulate your data *}
{assign var="products" value=[
['service' => '0,30 €'],
['service' => '0,10 €'],
['service' => '0,20 €']
]}
{* Original code, exactly as showed in the question *}
{foreach $products as $product}
{$product.service}
{/foreach}
{* This is the new code for calculating the total *}
{assign var="total" value=0}
{foreach $products as $product}
{assign var="total" value=$total + $product.service|replace:' €':''|replace:',':'.'}
{/foreach}
Total: {$total|number_format:2:",":''} €
输出:
0,30 € 0,10 € 0,20 € Total: 0,60 €
但是,正如您已经知道的那样,这是非常棘手的操作,出于以下原因,通常不应该在模板内部对其进行处理:
service
属性中删除欧元符号非常脆弱。通常,您应该在将欧元符号添加到字符串之前进行总和,因为将字符串解析回数字始终很脆弱。甚至您将来在service
属性中进行的小更改(例如将其存储为“€0,30”而不是“ 0,30€”),也足以破坏求和逻辑。