我创建了一个模块,用于在使用某些运营商的新订单上插入跟踪链接。我检查了跟踪号是否已插入数据库中,并且也可以在“订单”页面中找到。在数据库中,它存储在orders_carrier中。
$orderinfo = new Order($params['id_order']);
$carrierinifo = new Carrier($orderinfo->id_carrier);
if ($carrierinifo->name=='Standard Delivery') {
$ordercarrier = new OrderCarrier($orderinfo->id_carrier);
if ($ordercarrier->tracking_number=='') {
$ordercarrier->tracking_number = $this->config['TRACK_PRE'].str_pad($orderinfo->id, $this->config['DIGI'], "0", STR_PAD_LEFT);
Db::getInstance()->update(
'order_carrier',
array('tracking_number'=>$ordercarrier->tracking_number),
'id_order='.$orderinfo->id
);
我无法理解为什么跟踪号未显示在“已发货”模板中。仅当我单击“编辑”(在“订单”页面中“运输”选项卡下)并重新保存跟踪号时,它才会成功显示。 (当跟踪号已经保存并显示在“订单”页面中时)。这是额外的步骤,因此我无法自动执行此步骤。
我已在正在使用的运输模板中分配了该变量,当我更改为“已发货”状态时,它将触发。
有人遇到同样的问题吗?
谢谢。
答案 0 :(得分:0)
这是我使用的代码:
$order = new Order($params['id_order']);
$tracking = 'NUMBER TRACKING';
$id_order_state = 'NUMBER OF STATUS';
if (!empty($tracking) && !is_array($tracking)) {
$id_order_carrier = Db::getInstance()->getValue('
SELECT `id_order_carrier`
FROM `' . _DB_PREFIX_ . 'order_carrier`
WHERE `id_order` = ' . (int) $order->id);
if ($id_order_carrier) {
$order_carrier = new OrderCarrier($id_order_carrier);
$order_carrier->tracking_number = $tracking;
$order_carrier->update();
} else {
$order->shipping_number = $tracking;
}
}
if ($id_order_state && ($order->current_state != (int) $id_order_state)) {
$new_oh = new OrderHistory();
$new_oh->id_order = $order->id;
$new_oh->id_order_state = (int) $id_order_state;
$new_oh->date_add = date('Y-m-d H:i:s');
$new_oh->add();
$new_os = new OrderState((int) $id_order_state, $order->id_lang);
Module::hookExec('actionOrderStatusUpdate', array('newOrderStatus' => $new_os, 'id_order' => (int) $order->id), null, false, true, false, $order->id_shop);
}
致谢
答案 1 :(得分:0)
设法找到问题的根源。我实际上是在更新carrier_order,跟踪号。我还应该更新订单shipping_number。很高兴知道它现在可以工作了。
我没有意识到这一点。与寻求类似问题解决方案的任何人共享。
谢谢。