prestashop 1.7 ps_emailalerts和一个外部模块

时间:2018-08-25 16:23:15

标签: php prestashop

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

晚上好,我在使用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”

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

3 个答案:

答案 0 :(得分:1)

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

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

祝你好运

答案 1 :(得分:0)

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

  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'],
    

答案 2 :(得分:-1)

我在使用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)