• 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上测试通过。

  • 相关阅读:
    房地产英语 Real estate词汇
    自制Flash FLV视频播放器
    .net反编译工具Reflector下载
    JQUery插件thickbox
    50 Great Photoshop Tutorials for Clever Beginners
    AspNet中你或许不知道的技巧(转)
    常用的设计网站(收藏)
    35 Green and Earthy Photoshop Effects
    使用 ASP.NET 2.0 增强网站的安全性
    asp.net中实现登陆的时候用SSL
  • 原文地址:https://www.cnblogs.com/focai/p/4205259.html
Copyright © 2020-2023  润新知