PrestaShop - actionOrderStatusPostUpdate Hook:它真的应该消失吗?

时间:2016-03-22 08:13:52

标签: php hook prestashop

早上好,Stack Overflow!

快速提问。根据钩子文档(http://doc.prestashop.com/display/PS15/Hooks+in+PrestaShop+1.5),如果我理解正确,那么在对象的订单状态已经改变之后,名为“actionOrderStatusPostUpdate”的钩子会被触发?

因此,我假设orderStatus已经被更改,我可以安全地在我的代码中更改它而没有任何问题。我的代码包含一个条件块,它按顺序扫描产品到达“付款已收到”状态,如果订单包含任何“受限制的项目”,它将通知用户并将订单状态更改为“受限制的:(理由)“(ID:15)。当我运行代码并且钩子触发时,我结束状态设置,然后立即替换为“已收到付款”。

https://www.dropbox.com/s/uc4ebr2ybytx2ks/Screenshot%202016-03-15%2012.52.47.jpg

这是POST更新挂钩的正常行为吗?由于状态应该已经改变,为什么它会改变呢?

...
} else {
//  Restricted order...
    $order->setCurrentState(15, 1);
...

我也试过这个:

...
$history = new OrderHistory();
$history->id_order = (int) $order_id;
$history->changeIdOrderState(15, (int) $order_id);
...

还有另一种方法可以确保它正确更改吗?

修改

我知道这个问题同样问题:Prestashop - Change order status when payment is validated,但它还没有被回答,因此对我毫无帮助。

修改

我能做的最好的事情就是尝试解释代码的逻辑流程:

  1. 当用户或其他任何内容更改订单的状态时,挂钩将从模块触发(hookActionOrderStatusPostUpdate)。
  2. 如果订单状态为“已接受付款”,请继续下一部分,否则,不执行任何操作......
  3. 然后检查订单中的订单,送货地址和产品,以查看我用来标记订单“限制”的某些标志(包括送货地址,发票地址,某些产品功能等)
  4. 如果订单受到限制,则在另一个系统中创建案例,公司可以在完成此操作后联系客户解决限制,订单应设置为订单状态:“受限制”(ID.15)以指示限制适用。
  5. 如果订单不受限制,则会将其传递到不同的系统进行处理等。

1 个答案:

答案 0 :(得分:0)

钩子actionOrderStatusPostUpdate在最后的函数OrderHistory->changeIdOrderState()内执行。

因此,如果您使用order status功能(包括电子邮件发送,库存管理等)更改OrderHistory->changeIdOrderState(),则会执行挂钩actionOrderStatusPostUpdate

如果您只想更改order status的ID,可以使用以下代码:

$order = new Order((int)$id_order);        
$order->current_state = (int)$id_order_state;
if ($order->update() && $order->setCurrentState((int)$id_order_state))
{
    // proceed
}
else
{
    // report error
}