【问题标题】:PHP Opencart - Edit OrdersPHP Opencart - 编辑订单
【发布时间】:2015-11-23 10:21:05
【问题描述】:

早安堆栈,

几天以来,我们一直在现有网上商店 (opencart 1.5.6) 内开发代发货服务。我已经准备好要在商店内使用的 SOAP 请求(dropshipping),唯一不确定的是所需方法的位置。由于您需要完成付款才能确认订单,因此我们似乎需要调整

catalog/controller/checkout/confirm.php

但是,当我查看此文件的代码时,我找不到任何将方法放在何处的线索。 在catalog/model/checkout/order.php 中,我们可以找到 addOrder() 方法,看起来这是一个临时订单,直到您成功完成付款并按下确认按钮。

谁能告诉我 Opencart 处理订单的方式以及如何在正确的位置以正确的方式调整代码?

【问题讨论】:

  • 您究竟需要实现什么?您需要在哪个确切时间调用该肥皂服务?
  • 我们有六个步骤,在第 5 步中您也必须选择付款选项。在第 6 步之后,您必须先完成付款,然后才能选择订单确认按钮。我需要在确认后立即调用 SOAP 请求。
  • 在这种情况下,您可以将您的 SOAP 回调添加到catalog/controller/checkout/success.php 之前会话中存储的所有订单数据都是unset,以便您仍然可以访问它们。回调完成后,会话变量未设置,结帐成功消息照常显示。
  • 太好了,会试一试:)!在之前的情况下,我将方法放在第 5 步的末尾,但这是一个很大的错误。
  • 在您调用 SOAP 回调的地方您可以访问已订购的产品 - 获取它们的 ID 并通过其 ID 加载每个产品的详细信息。没什么复杂的...

标签: php opencart


【解决方案1】:

我自己刚刚完成了这项工作,虽然我知道这个问题是不久前提出的,但我认为发布我的方法会有所帮助。

我使用的方法是在单独的文件中执行一个函数,并从catalog/controller/checkout/success.php调用它

有两种方法可以做到这一点,直接更新文件或使用 vQmod。我不会在这里详细介绍 vQmod,因为它已在其他地方广泛介绍 (https://code.google.com/p/vqmod/)。 后者是我的偏好,因为它不需要修改原始文件,但是我将同时介绍两者。

1) 要直接修改文件,只需打开它,在第 7 行就会看到

if (isset($this->session->data['order_id'])) {

您可以在此行之后立即添加您的钩子。我用过类似的东西

include("catalog/controller/checkout/dropship_order.php");
sendOrderToDropship($this->session->data);

2) 或者,使用以下 vQmod 代码即时执行相同的操作

<file name="catalog/controller/checkout/success.php" error="log">
    <operation error="skip">
    <search position="after"><![CDATA[if (isset($this->session->data['order_id'])) {]]></search>
    <add><![CDATA[
            include("catalog/controller/checkout/dropship_order.php");
            sendOrderToDropship($this->session->data);
    ]]></add>
    </operation>
</file>

这两种方法都会在加载成功页面时调用你的sendOrderToDropship函数;在该函数中,您可以执行所需的任何操作。通过发送 data 数组,您还可以访问订单信息(关键是订单 ID),以便执行所需的任何处理。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多