【问题标题】:Get Order Increment Id in Magento在 Magento 中获取订单增量 ID
【发布时间】:2011-01-12 20:04:57
【问题描述】:

我正在尝试在成功.phtml 页面上获取 Magento 中的订单增量 ID,以便我可以将其用于附属跟踪。

我正在使用以下代码,但它在第二行给出错误;

$order = Mage::getSingleton('sales/order')->getLastOrderId();
$lastOrderId = $order->getIncrementId();

错误显示:

致命错误:在第 34 行对非对象调用成员函数 getIncrementId():$LastOrderId = $order->getIncrementId();

我想知道是否有人对如何获取订单增量 ID 有任何想法?这是在管理员中看到的参考编号,通常类似于:#1000123

【问题讨论】:

    标签: php magento


    【解决方案1】:

    如果您专门在结帐成功页面(在 success.phtml 中)执行此操作,则模板中已经提供了用于获取订单增量 ID 的代码,因为它已显示给客户。

    您只需要以下内容:

    $orderId = $this->getOrderId();
    

    请注意,这不适用于其他页面,因此,对于那些,您需要使用:

    $orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
    

    【讨论】:

    • 我认为你不应该在视图中做这样的想法,保留控制器或模型的逻辑
    • @Elzo Magento 不是一个“愚蠢的视图”MVC。意图是称为块的 PHP 类向 phtml 模板公开方法。这些方法直接从 Magento 模型层读取数据以检索它们的数据。
    • 请注意,getOrderId() 在 Magento 1.4.0.1 之后被标记为已弃用。更好地使用结帐会话来检索订单 ID。
    • 这不应该是公认的答案,因为它实际上提供了不正确的值。该问题要求提供订单增量 ID - 这与订单 ID 完全不同。订单 id 和增量 id 在数据库中完全有可能/很常见,因此在开发过程中很容易被忽视
    【解决方案2】:

    您代码中的$order 是最后一个订单ID...正如函数名称所暗示的那样。如果这不是您想要的值,则使用它来加载订单,然后对其使用 getter:

    $order = Mage::getModel('sales/order');
    $order->load(Mage::getSingleton('sales/order')->getLastOrderId());
    $lastOrderId = $order->getIncrementId();
    

    【讨论】:

      【解决方案3】:

      这将完美运行,我现在在我的模块中运行这个。

      $last_order_increment_id = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId();
      

      希望对您有所帮助,谢谢。 :)

      【讨论】:

        【解决方案4】:

        你来电

        Mage::getSingleton('sales/order')
        

        没有返回对象。试试看

        var_dump(Mage::getSingleton('sales/order'));
        

        确认。

        我最近没有深入研究结帐代码,但我很确定这是因为sales/order 会为您提供正在进行的订单。订单一经下单,便不再进行。

        执行此操作的“正确”方法是为 Magento 在结帐期间触发的事件之一创建观察者。

        checkout_onepage_controller_success_action
        

        event 应该足够了,假设您没有对结帐流程进行过多的自定义。

        the Wiki 上有一个关于如何执行此操作的简短说明(针对不同的事件)

        一旦你得到你的事件设置和响应,做一个

        $event = $observer->getEvent();
        var_dump($event->getData());
        

        看看你有什么样的信息可用。那里可能有一个订单对象,可以让您获得所需的 ID。

        【讨论】:

        • 根据我的测试,调用 Mage::getModel('sales/order') 和 Mage::getSingleton('sales/order') 都返回一个新的 Order 对象而不是当前的订单。
        【解决方案5】:

        我不得不使用...

        $_order = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
        

        在success.phtml 模板中。我使用 loadByIncrementId 而不是 load() - 然后我的订单对象不再为空。

        【讨论】:

          【解决方案6】:

          如果您处于管理员模式 - 试试这个:

          $orderModel = Mage::getModel('sales/order'); $orders = $orderModel->getCollection()->setOrder('increment_id', 'DESC')->setPageSize(1)->setCurPage(1); $orderId = $orders->getFirstItem()->getIncrementId();

          【讨论】:

            【解决方案7】:

            getRealOrderId() 似乎返回数据网格中显示的订单号。 getId() 将返回数据库中行的内部 id,这可能是您不想要的。

            【讨论】:

              【解决方案8】:

              您可以使用以下代码 sn-p 获取增量 id:

              $orderId = 12;    
              $order = Mage::getModel('sales/order')->load($orderId);
              $Incrementid = $order->getIncrementId();
              

              现在您可以回显 $Incrementid 变量并查看增量 ID。

              我希望这会有所帮助。

              【讨论】:

                【解决方案9】:
                $lastOrderIncrementId = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId();
                

                【讨论】:

                  【解决方案10】:
                  $shipmentID = $shipment->increment_id;
                  
                  $order   = $shipment->getOrder();
                  $orderID = $order->increment_id; 
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2014-03-12
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-10-20
                    • 1970-01-01
                    • 2012-01-08
                    • 1970-01-01
                    • 2014-02-15
                    相关资源
                    最近更新 更多