为了账号安全,请及时绑定邮箱和手机立即绑定

如何在foreach Smarty中对prestashop产品进行简单的计算?

如何在foreach Smarty中对prestashop产品进行简单的计算?

PHP
跃然一笑 2021-12-24 15:28:28
我目前正在为我的 Prestashop 1.7.5 开发一个报价模块。我已经添加了产品的价格(通过覆盖 Product.php)。现在,我必须在生成/显示报价时进行一些计算,以将这些价格添加到产品总数和订单总数中。通过模板中的一个简单的 foreach,我就有了所有的价格。{foreach $products as $product}   {$product.service}{/foreach}输出0,30 € 0,10 € 0,20 € 但是,我希望这些数字彼此相加(例如,这里总共 0.60 欧元)。顺便说一句,我知道我们应该在 php 文件中而不是在模板中这样做(我也尝试过这种方式,但非常复杂......)。而且,我不需要保存这些数字,它只是为了显示......有任何想法吗 ?
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

下面将处理它。在第一个块中,我模拟了您的数据,然后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 €' ,也足以打破求和逻辑。


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号