首先,抱歉,我的英语不好。如果有些事情无法理解,请告诉我,我会尽力向您解释!
晚上好,我在使用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”
怎么了? 我希望有人帮助我
答案 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)
您仍然可以使用模块开发人员为您提供的功能:
将查询结果分配给变量
$codfee = $this->getCodFeeByOrderID((int)$params['id_order']);
$codfeetax = $this->getCodFeeTaxByOrderID((int)$params['id_order']);
获取所需值并将其分配给智能变量:
'{total_fee}' => $codfee['codfee'],
'{total_fee_tax}' => $codfeetax['codfeetax'],
答案 2 :(得分:-1)
我在使用codfee模块时遇到了同样的问题,并解决了以这种方式修改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);
}
'{total_fee}' => Tools::displayPrice($order->codfee, $currency)