Php 由于选择,状态更改为重复
我正在执行一个名为hookActionProductCancel的默认挂钩。钩子可以很好地执行我的代码,但是有一部分基于已发送的退款/退货复选框执行了不止一次 例如: 如果我有4个要选择的复选框,并且我选择了3个,那么我的订单在订单详细信息历史记录中将有3个退款状态。也可以在订单页面中看到Php 由于选择,状态更改为重复,php,prestashop-1.6,Php,Prestashop 1.6,我正在执行一个名为hookActionProductCancel的默认挂钩。钩子可以很好地执行我的代码,但是有一部分基于已发送的退款/退货复选框执行了不止一次 例如: 如果我有4个要选择的复选框,并且我选择了3个,那么我的订单在订单详细信息历史记录中将有3个退款状态。也可以在订单页面中看到 public function hookActionProductCancel($params) { $query = new DbQuery(); $query->select('i
public function hookActionProductCancel($params)
{
$query = new DbQuery();
$query->select('id_order_state')
->from('order_state_lang')
->where('name = ' . "'Refund'");
$refund_status = Db::getInstance()->getValue($query);
$objOrder = new Order($id_order);
$history = new OrderHistory();
$history->id_order = (int)$objOrder->id;
$history->id_employee = $cookie->id_employee;
$history->changeIdOrderState($refund_status, (int)($objOrder->id));
$history->add(true);
$history->save();
}
我们衷心感谢您的指导。谢谢。从订单中取消产品时,控制器会循环检查每个选定的产品并执行actionProductCancel挂钩 Tools::getValue'id\u order\u detail'将是每个将被取消的订单详细id的数组 知道您可以组合使用钩子、数组中订单细节ID的计数和模块中的计数器 您的主模块类可以包含如下代码:
public static $cancelledProductCount = 0;
public function hookActionProductCancel($params)
{
self::$cancelledProductCount++;
if (self::$cancelledProductCount == count(Tools::getValue('id_order_detail'))) {
$query = new DbQuery();
$query->select('id_order_state')
->from('order_state_lang')
->where('name = ' . "'Refund'");
$refund_status = Db::getInstance()->getValue($query);
$objOrder = new Order($id_order);
$history = new OrderHistory();
$history->id_order = (int)$objOrder->id;
$history->id_employee = $cookie->id_employee;
$history->changeIdOrderState($refund_status, (int)($objOrder->id));
$history->add(true);
$history->save();
}
}
所以,每次执行取消产品挂钩时,您都会将计数器增加1,并与取消项目的计数进行比较。如果它们是相同的,您知道这是最后一次执行挂钩,所以请更改订单状态。因为hookActionProductCancel对订单中的每个取消的产品都执行。啊,我明白了,这正是我面临此错误的原因。是否有一个变通方法或任何其他可用的挂钩,我可以使用,将返回我作为1?我的其余代码运行正常,但这现在引起了一个小问题。@那么,默认情况下,这是在循环中运行的吗?对于hookActionProductCancelYes,每个取消的产品都会执行一个循环,并执行一个钩子。Tools::getValue'id\u order\u detail'是一个已取消产品的数组,因此您可以在模块中创建一个计数器,当计数器与已取消产品的数量相同时,更改您的订单状态。是的,我正在对代码的其他部分使用Tools::getValue'id\u order\u detail',并使用foreach循环访问这些值。我可以在上面发布的代码中问一下,根据选中复选框的数量,它是如何运行的吗?代码的哪一部分触发了它切换状态的次数?我在这方面迷路了。谢谢。谢谢,我很快就会试一试的!非常感谢!您好@drot,非常感谢您的建议,它工作得非常好。if语句中缺少一个,但是你太棒了!解决方案是完美的。谢谢你。@Entu很高兴它起作用了。你是对的,它不见了。