代码之家  ›  专栏  ›  技术社区  ›  JoseMarmolejos

以编程方式获取用户刚在UberCart中完成的订单

  •  4
  • JoseMarmolejos  · 技术社区  · 15 年前

    当用户被发送到“感谢页面”(购物车/结账/完成)时,我需要获得一些关于订单的信息,以便将其发送到第三方跟踪API。问题是,在这一点上,无论是在会话中还是在我所知道的任何其他地方,都没有关于订单的信息。作为解决方法,我尝试查询当前连接的用户的最后一个订单,但当用户注册为UberCart时失败,因为UberCart会即时注册一个帐户,并让用户不受关注。

    所以我的问题是,是否有一种方法可以从page-cart.tpl.php模板中获取此时的order对象(cart/checkout/complete)?

    我目前的解决方案:

    在cart/checkout/review中获取$_session['cart_order']变量,将其分配给$_session['faux_order']并在cart/checkout/complete的脚本中使用faux_order…这感觉就像看到长颈鹿窒息而死一样难看。

    2 回复  |  直到 10 年前
        1
  •  4
  •   Ryan    13 年前

    警告!不要使用上面的答案。请参阅我的评论以获得解释。

    而不是上面提交的答案( 你不应该这样!使用 )创建自定义UberCart条件操作(CA),并将其添加到UberCart CA工作流中的“触发器:客户完成签出”部分,可在中找到 https://dev.betternow.org/admin/store/ca/overview

    我在这里定义一个自定义CA

    function my_module_ca_action() {
        $order_arg = array(
            '#entity' => 'uc_order',
        '#title' => t('Order'),
        );
    
    
        $actions['my_module_status_update'] = array(
            '#title' => t('Some Title'),
        '#category' => t('Custom UC AC'),
        '#callback' => 'my_module_some_function_name',
        '#arguments' => array(
            'order' => $order_arg,
                ),
                );
            return $actions;
    }
    

    现在,我可以在我自己的模块中定义的回调函数中使用order id:

    function my_module_some_function_name(&$order, $settings) {
      echo "This is the order id: " . $order->order_id;
    }
    

    我自己使用这种方法向用户显示一个“谢谢”页面,其中包含指向他们刚购买的产品的链接。

        2
  •  0
  •   erier    10 年前

    $U SESSION[“购物车订单”]可在 订单评审 页。

    所以…

    创建一个表示订单ID的cookie,如下所示:

    <?php setcookie('orderID', '$_SESSION['cart_order']'); ?>
    

    然后,在 订单确认 第页,您可以这样调用保存的cookie:

    <?php
    if (isset($_COOKIE['orderID'])):
      $theOrder = $_COOKIE['orderID'));
    
      echo 'The order ID is: ' . $theOrder;
    endif;
    ?>
    

    如果用户返回并创建新订单,则cookie将在到达订单审查页面时更新。