繁体   English   中英

prestashop 1.7 ps_emailalerts和一个外部模块

[英]prestashop 1.7 ps_emailalerts and an external module

首先:对不起,我的英语不好。 如果有些事情无法理解,请告诉我,我会尽力向您解释!

晚上好,我在使用prestashop 1.7和外部模块时遇到了一些问题。

我购买了一个模块来增加货到付款的费用,该模块有一些电子邮件变量,例如{total_fee}或{total_fee_tax}。 它从数据库,表ps_orders,值“ codfee”和“ codfeetax”中获取此值。

在标准邮件(位于/ themes / themename / mails / it /中)中,变量可以正常工作,但在电子邮件警报模块(/ modules / ps_emailalerts)中,变量根本不起作用。

我问开发人员是否可以帮助我,他给我发送了2个要包含在/modules/ps_emailalerts/ps_emailalerts.php中的函数

public static function getCodFeeByOrderID($id_order)
        {
        return Db::getInstance()->getRow('SELECT id_currency, codfee FROM ' . _DB_PREFIX_ . 'orders WHERE id_order = ' . $id_order);
        }

public static function getCodFeeTaxByOrderID($id_order)
        {
        return Db::getInstance()->getRow('SELECT id_currency, codfeetax FROM ' . _DB_PREFIX_ . 'orders WHERE id_order = ' . $id_order);
        }

和这两个变量在同一文件中

        '{total_fee}' => $this->getCodFeeByOrderID((int)$params['order']->id),
        '{total_fee_tax}' => $this->getCodFeeTaxByOrderID((int)$params['order']->id),

但不幸的是,某些东西无法正常工作! 测试一下,我看到两个变量给出的结果都是“ 1”,而不是{total_fee}的预期结果“€4”和{total_fee_tax}的预期结果为“€0.88”

怎么了? 我希望有人帮助我

首先,您应该考虑重写ps_emailalerts模块类以添加功能并保持干净的本机模块: http ://build.prestashop.com/howtos/module/how-to-override-modules/。

您的问题是getRow()函数返回一个数组,其中的键是获取的字段(id_currency和codfee(tax)),而不是您期望的最终值。 您必须使用这些值来计算/转换所需的最终金额,无论是在每个函数中还是在调用之后。 如果您的商店只有一种货币,则可以通过getValue()更改getRow()函数,并删除id_currency字段检索。 最好检查该函数的返回值(如果查询失败,则返回false),并进行所有需要的验证(订单之一与您要显示信息的订单之间的货币匹配...)。

祝好运

您仍然可以使用模块开发人员为您提供的功能:

  1. 将查询结果分配给变量

     $codfee = $this->getCodFeeByOrderID((int)$params['id_order']); $codfeetax = $this->getCodFeeTaxByOrderID((int)$params['id_order']); 
  2. 获取并将所需的值分配给智能变量:

     '{total_fee}' => $codfee['codfee'], '{total_fee_tax}' => $codfeetax['codfeetax'], 

我在codfee模块中遇到了同样的问题,并解决了以这种方式修改ps_emailalerts.php类的问题:

  1. 添加了getCodFeeByOrderID函数:
    public static function getCodFeeByOrderID($id_order)
        {
        return Db::getInstance()->getRow('SELECT id_currency, codfee FROM ' . _DB_PREFIX_ . 'orders WHERE id_order = ' . $id_order);        
        }
  1. 在hookActionValidateOrder函数中,添加到vars数组中:
    '{total_fee}' => Tools::displayPrice($order->codfee, $currency)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM