0

我需要在收到新订单时发送电子邮件通知,并且我需要以与网站其他部分不同的方式格式化价格。

有没有办法向 oro_format_price 发送参数?

我试图用一个简单的 number_format 替换 oro_format_price 但它没有用......

谢谢

编辑:

挖掘代码(这里这里)我发现有一些选项可以传递给 oro_format_price 过滤器,所以我把这段代码放在我的电子邮件模板中:

{{ item.price.value|oro_format_price({symbols: {decimal_separator_symbol: '.', grouping_separator: '' }}) }}

这没有向我显示任何错误,但我也没有收到任何电子邮件:(

我正在使用版本 3.1.17 BTW

编辑2:

我再次检查并发现我写错了一些东西,我当前的版本如下所示:

{{ item.price|oro_format_price({symbols: {decimal_separator_symbol: '.', grouping_separator_symbol: '', monetary_grouping_separator_symbol: '', currency_symbol:'' }}) }}

现在电子邮件已发送,但格式未更改:(

编辑3:

我再次更改它以尝试使用更简单的方法:

{{ item.price.value|number_format(2, '.','') }}

并在日志中发现了这些错误:

app.ERROR: An error occurred while processing notification {"exception":"[object] (Oro\\Bundle\\EmailBundle\\Exception\\EmailTemplateCompilationException(code: 0): Could not found one email template with \"order_confirmation_test\" name for \"Oro\\Bundle\\OrderBundle\\Entity\\Order\" entity at /usr/share/nginx/html/oroapp/vendor/oro/platform/src/Oro/Bundle/EmailBundle/Provider/EmailTemplateContentProvider.php:71)"} []

 app.ERROR: An error occurred while sending "Oro\Bundle\NotificationBundle\Event\Handler\TemplateEmailNotificationAdapter" notification with email template "order_confirmation_test" for "Oro\Bundle\OrderBundle\Entity\Order" entity {"exception":"[object] (Oro\\Bundle\\NotificationBundle\\Exception\\NotificationSendException(code: 0): Could not send notification of type \"Oro\\Bundle\\NotificationBundle\\Event\\Handler\\TemplateEmailNotificationAdapter\" for email template \"order_confirmation_test\" for \"Oro\\Bundle\\OrderBundle\\Entity\\Order\" entity at /usr/share/nginx/html/oroapp/vendor/oro/platform/src/Oro/Bundle/NotificationBundle/Manager/EmailNotificationManager.php:125)"} []

我尝试通过常规模板(我的意思是在电子邮件之外)输出相同的内容,它工作正常。

查看 php error_log 文件,我发现了这条消息:

"NOTICE: PHP message: PHP Notice:  Calling "getvalue" method on a "Oro\Bundle\CurrencyBundle\Entity\Price" object is not allowed in ...

我检查了类 Oro\Bundle\CurrencyBundle\Entity\Price 并且 getValue 方法是公开的,所以我不明白为什么会失败:(

4

1 回答 1

0

电子邮件模板有一个单独的 Twig 渲染引擎,其中包含有限的可用功能列表。这是使用沙盒扩展来实现的。

要将函数公开给电子邮件呈现引擎,您可以使用Oro\Bundle\EmailBundle\DependencyInjection\Compiler\AbstractTwigSandboxConfigurationPass.

例如,查看现有的实现,例如\Oro\Bundle\PaymentBundle\DependencyInjection\Compiler\TwigSandboxConfigurationPass

于 2020-05-25T13:00:57.027 回答