我需要改变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