如何创建在Magento自动发货(How to create shipping automatica

2019-10-17 09:35发布

我需要改变Magento的默认工作流。 所以,我就应自动为客户买东西创造运费。(当客户看到收据页)。 我不知道我应该从哪里开始。 我开始使用Google的一些扩展,但没有运气现在。 这就是为什么我来到了这里。 没有人有一个想法,我在哪里可以开始解决这个问题呢? 谢谢!

Answer 1:

你不应该让这样的代码视图文件。 除了它是不好的做法,在一般情况下,@ user2729065提到的:如果客户不返回到后付款谢谢页,代码将无法运行。 更好的是创建一个观察者的自定义模块。 要做到这一点,下面的代码添加到您模块等/ config.xml文件:

<global>
    <events>
        <sales_order_invoice_pay>
            <observers>
                <[my]_[module]_automatically_complete_order>
                    <class>[module]/observer</class>
                    <method>automaticallyShipCompleteOrder</method>
                </[my]_[module]_automatically_complete_order>
            </observers>
        </sales_order_invoice_pay>
    </events>
</global>

更改my_module你的模块名称。 支付发票时,这将通过靶向。

然后在我的/模块/型号/ Observer.php创建观察

<?php

class My_Module_Model_Observer
{
/**
 * Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
 * protected $_eventPrefix = 'sales_order';
 * protected $_eventObject = 'order';
 * event: sales_order_invoice_pay
 */
public function automaticallyShipCompleteOrder($observer)
{
    $order = $observer->getEvent()->getInvoice()->getOrder();

    if ($order->getState() == Mage_Sales_Model_Order::STATE_PROCESSING) {

        try {
            $shipment = $order->prepareShipment();
            $shipment->register();

            $order->setIsInProcess(true);
            $order->addStatusHistoryComment('Shippment automatically created.', false);

             Mage::getModel('core/resource_transaction')
                ->addObject($shipment)
                ->addObject($shipment->getOrder())
                ->save();
        } catch (Exception $e) {
            $order->addStatusHistoryComment('Could not automaticly create shipment. Exception message: '.$e->getMessage(), false);
            $order->save();
        }
    }

    return $this;
}

}

这将检查如果订单仍处于处理(所支付后得到的状态)。 如果是的话,尝试创建装运。 创建货物装运后,订单会自动改变其状态为已完成。

如果你想出货得到直接创建的订单下达后(创建和付费发票之前。),变化

<sales_order_invoice_pay> 

<sales_order_place_after> 

config.xml中。 而由于这名观察员返回的订单,而不是发票,也改变:

$order = $observer->getEvent()->getInvoice()->getOrder();

$order = $observer->getEvent()->getOrder();

代码是基于一个例子Inchoo所以大部分学分去给他们。



Answer 2:

我找到了解决办法。 我想这是不是做的最好的方式,但它的工作原理。

在文件your_theme_name /模板/结算/ success.phtml

添加以下代码

<?php
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$order = Mage::getModel('sales/order') -> loadByIncrementId($orderId);

if ($order -> canShip()) {
    $itemQty = $order -> getItemsCollection() -> count();
    $shipment = Mage::getModel('sales/service_order', $order) -> prepareShipment($itemQty);
    $shipment = new Mage_Sales_Model_Order_Shipment_Api();
    $shipmentId = $shipment -> create($orderId);
}
?>

这将增加航运收据上的顺序。



Answer 3:

为了把代码模板是一个非常糟糕的主意:它增加了航运代码到你的模板/视图。 此功能不属于那里。 (例如:如果您的付款5分钟后证实,它不工作)。

解决办法是观察员写入付款,成功事件: http://inchoo.net/ecommerce/magento/magento-orders/automatically-invoice-ship-complete-order-in-magento/



文章来源: How to create shipping automatically in Magento
标签: php magento