早上好,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,但它还没有被回答,因此对我毫无帮助。
修改
我能做的最好的事情就是尝试解释代码的逻辑流程:
答案 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
}