magneto创建运费模板
Magento系统自带了大概7种运费方式:平价、运费表、免运费、ups、usps、fedex、dhl等。不过这些依然无法满足我们的需求,这时候就需要创建一个shipping module 来实现了。创建一个shipping module 很简单,需要继承Mage_Shipping_Model_Carrier_Abstract抽象类, 实现Mage_Shipping_Model_Carrier_Interface接口类,这样就能利用函数collectRates来自定义计算运费的方式。这样就可以创建一个插件来自定义shipping method。
添加模块配置信息
首先,添加模块信息,创建文件app/etc/modules/Xbc_Ship.xml
<?xml version="1.0"?> <config> <modules> <Xbc_Ship> <active>true</active> <codePool>local</codePool> <depends> <Mage_Shipping /> </depends> <version>1.1.0</version> </Xbc_Ship> </modules> </config> |
添加模块配置信息,创建文件app/code/local/Xbc/Ship/etc/config.xml
<?xml version="1.0"?> <config> <modules> <Xbc_Ship> <version>1.1.0</version> </Xbc_Ship> </modules> <global> <helpers> <ship> <class>Xbc_Ship_Helper</class> </ship> </helpers> <resources> <ship_setup> <setup> <module>Xbc_Ship</module> </setup> <connection> <use>core_setup</use> </connection> </ship_setup> <ship_write> <connection> <use>core_write</use> </connection> </ship_write> <ship_read> <connection> <use>core_read</use> </connection> </ship_read> </resources> <models> <ship> <class>Xbc_Ship_Model</class> <resourceModel>ship_mysql4</resourceModel> </ship> </models> </global> <default> <carriers> <cm_dhl> <active>1</active> <debug>0</debug> <model>ship/carrier_cm_dhl</model> <name>DHL</name> <title>DHL</title> <description>DHL</description> <sort_order>0</sort_order> </cm_dhl> </carriers> </default> </config> |
实现自定义运费
创建文件app/code/local/Hofan/Ship/Model/Carrier/Cm/Dhl.php。
<?php class Xbc_Ship_Model_Carrier_Cm_Dhl extends Mage_Shipping_Model_Carrier_Abstract implements Mage_Shipping_Model_Carrier_Interface { protected $_code = ‘cm_dhl‘; /** * Collect rates for this shipping method based on information in $request * * @param Mage_Shipping_Model_Rate_Request $data * @return Mage_Shipping_Model_Rate_Result */ public function collectRates(Mage_Shipping_Model_Rate_Request $request){ //if this shipping method disabled if (!$this->getConfigFlag(‘active‘)) { return false; } $result = Mage::getModel(‘shipping/rate_result‘); $method = Mage::getModel(‘shipping/rate_result_method‘); $method->setCarrier($this->_code); $method->setCarrierTitle($this->getConfigData(‘title‘)); $method->setMethod($this->_code); $method->setMethodTitle($this->getConfigData(‘name‘)); $debug = $this->getConfigData(‘debug‘); $rate = $this->getConfigData(‘rate‘); //get find the country id $country_id = $request->getDestCountryId(); //Get all items $items = $request->getAllItems(); $weight = $request->getPackageWeight(); foreach ($items as $item){ $_product = $item->getProduct(); if ($_product instanceof Mage_Catalog_Model_Product) { $product = Mage::getModel(‘catalog/product‘)->load($_product->getId()); if($_weight = $product->getWeight()){ } } } //get price $shippingPrice = 100; $method->setPrice($shippingPrice); $method->setCost($shippingPrice); $result->append($method); return $result; } /** * Get allowed shipping methods * * @return array */ public function getAllowedMethods() { return array($this->_code=>$this->getConfigData(‘name‘)); } } |
添加后台配置
如果完成了上面的步骤,你可以添加后台配置文件。创建文件app/code/local/Xbc/Ship/etc/system.xml
<?xml version="1.0"?> <config> <sections> <carriers translate="label" module="ship"> <groups> <cm_dhl translate="label"> <label>Hofan DHL</label> <frontend_type>text</frontend_type> <sort_order>0</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <model>ship/carrier_cm_dhl</model> <fields> <active translate="label"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </active> <debug translate="label"> <label>Debug Mode</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>20</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </debug> <title translate="label"> <label>Title</label> <frontend_type>text</frontend_type> <sort_order>30</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </title> <name translate="label"> <label>Method Name</label> <frontend_type>text</frontend_type> <sort_order>40</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </name> <description translate="label"> <label>Description</label> <frontend_type>textarea</frontend_type> <sort_order>50</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </description> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> <sort_order>100</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </sort_order> </fields> </cm_dhl> </groups> </carriers> </sections> </config> |
该插件在Magento CE 1.6.2上测试通过。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。