2014-01-31 15 views
1

我遵循这个指南:创建自定义装运方法后,getShippingCarrier()函数为什么不返回?

http://www.magentocommerce.com/wiki/5_-_modules_and_development/shipping/create-shipping-method-module 

,并创建一个自定义的运输方式。 但正如我调用这个函数:

getShippingCarrier() from the Mage_Sales_Model_Order (collection Sales/Order) 

与我自定义的送货方式创建的订单,我什么也没得到。 无法弄清楚为什么会发生这种情况。

回答

1

我和你有同样的问题,但由于不同的原因。我你refered到指南中注意到了这个代码是从config.xml文件丢失

<default> 
    <carriers> 
     <saturdaydelivery> 
      <active>1</active> 
      <model>saturdaydelivery/carrier_saturdaydelivery</model> 
      <title>Saturday Delivery</title> 
      <sort_order>10</sort_order> 
      <sallowspecific>0</sallowspecific> 
     </saturdaydelivery> 
    </carriers> 
</default> 

它会去<globals>...<\globals>元素外,之后我想(我把它作为</config>之前的最后一个代码,但我不知道这是否重要)。在这种情况下,<model>标记是重要的标记,因为这正是getShippingCarrier()函数要查找的标记。

顺便说一句,“saturdaydelivery”是我所做的,而不是指南中描述的“newmodule”。 (在不明显的情况下!))

1

同样的问题在这里。

它解决我的问题(https://www.facebook.com/scandiweb/posts/788413034530650):

It's在Magento一个有趣的限制。即 - 创建新的运输方式时,不要在运输方式或方法代码中使用下划线。代码中的下划线有可能破坏使用此方法的任何代码 - Mage_Sales_Model_Order::getShippingMethod。作为一个例子,我发现自己 - 我在某些运输方式的出口订单中缺少运输公司。如果现场发生这种情况,一点都不酷。 原因在于这里Mage_Sales_Model_Order::getShippingMethod

public function getShippingMethod($asObject = false) 
{ 
    $shippingMethod = parent::getShippingMethod(); 
    if (!$asObject) { 
    return $shippingMethod; 
    } else { 
    list($carrierCode, $method) = explode('_', $shippingMethod, 2); 
    return new Varien_Object(array(
     'carrier_code' => $carrierCode, 
     'method' => $method 
    )); 
    } 
} 

通知的爆炸函数调用。它需要字符串,看起来像'carriercode_methodcode',并通过下划线拆分成部分。但是如果在'carrier_code_method_code'中有一些额外的下划线,它会得到错误的代码,并且例如getShippingCarrier()将无法​​返回在订购时使用的运营商。

相关问题