如何在 magento 结帐时在运输方式中添加额外价格

How to add extra price in shipping method during checkout in magento

你好朋友,我想在结帐时以 magento 送货方式添加 10% 的运费:- 我遵循本教程,但它对我不起作用:- http://www.blog.magepsycho.com/change-shipping-price-handling-fee-fly-magento/ 我的代码在这里:- Config.xml :-

<?xml version="1.0"?>
<config>
  <modules>
    <Ab_Extrashipcost>
      <version>0.1.0</version>
    </Ab_Extrashipcost>
  </modules>
  <global>
  <models>
            <extrashipcost>
            <class>Ab_Extrashipcost_Model</class>
            </extrashipcost>
        </models>

  <events>
    <sales_quote_collect_totals_after>
        <observers>
            <ab_extrashipcost>
                <type>singleton</type>
                <class>extrashipcost/observer</class>
                <method>salesQuoteCollectTotalsBefore</method>
            </ab_extrashipcost>
        </observers>
    </sales_quote_collect_totals_after>
</events>
      </global>
</config>   

观察者文件:-

<?php
class Ab_Extrashipcost_Model_Observer
{
 public function salesQuoteCollectTotalsBefore(Varien_Event_Observer $observer)
    {
        /** @var Mage_Sales_Model_Quote $quote */
        $quote = $observer->getQuote();
        $someConditions = true; //this can be any condition based on your requirements
        $newHandlingFee = 15;
        $store    = Mage::app()->getStore($quote->getStoreId());
        $carriers = Mage::getStoreConfig('carriers', $store);
        foreach ($carriers as $carrierCode => $carrierConfig) {
            if($carrierCode == 'flatrate_flatrate'){
                if($someConditions){
                    Mage::log('Handling Fee(Before):' . $store->getConfig("carriers/{$carrierCode}/handling_fee"), null, 'shipping-price.log');
                    $store->setConfig("carriers/{$carrierCode}/handling_type", 'F'); #F - Fixed, P - Percentage                 
                    $store->setConfig("carriers/{$carrierCode}/handling_fee", $newHandlingFee);

                    ###If you want to set the price instead of handling fee you can simply use as:
                    #$store->setConfig("carriers/{$carrierCode}/price", $newPrice);

                    Mage::log('Handling Fee(After):' . $store->getConfig("carriers/{$carrierCode}/handling_fee"), null, 'shipping-price.log');
                }
            }
        }
    }
}
?>

确保将模块配置文件放在 app/etc/modules 文件夹下。

您的 config.xml 代码应该是:-

<?xml version="1.0"?>
<config>
  <modules>
    <Ab_Extrashipcost>
      <version>0.1.0</version>
    </Ab_Extrashipcost>
  </modules>
  <global>
  <models>
            <extrashipcost>
            <class>Ab_Extrashipcost_Model</class>
            </extrashipcost>
        </models>
      </global>
 <frontend>
  <events>
    <sales_quote_collect_totals_before>
        <observers>
            <ab_extrashipcost>
                <type>singleton</type>
                <class>extrashipcost/observer</class>
                <method>salesQuoteCollectTotalsBefore</method>
            </ab_extrashipcost>
        </observers>
    </sales_quote_collect_totals_before>
</events>
</frontend>
</config> 

和Observer.php代码应该是:-

<?php
class Ab_Extrashipcost_Model_Observer
{
 public function salesQuoteCollectTotalsBefore(Varien_Event_Observer $observer)
    {
        /** @var Mage_Sales_Model_Quote $quote */
        $quote = $observer->getQuote();
        $someConditions = true; //this can be any condition based on your requirements
        $newHandlingFee = 15;
        $store    = Mage::app()->getStore($quote->getStoreId());
        $carriers = Mage::getStoreConfig('carriers', $store);
        foreach ($carriers as $carrierCode => $carrierConfig) {
            if($carrierCode == 'flatrate'){
                if($someConditions){
                    Mage::log('Handling Fee(Before):' . $store->getConfig("carriers/{$carrierCode}/handling_fee"), null, 'shipping-price.log');
                    $store->setConfig("carriers/{$carrierCode}/handling_type", 'F'); #F - Fixed, P - Percentage                 
                    $store->setConfig("carriers/{$carrierCode}/handling_fee", $newHandlingFee);

                    ###If you want to set the price instead of handling fee you can simply use as:
                    #$store->setConfig("carriers/{$carrierCode}/price", $newPrice);

                    Mage::log('Handling Fee(After):' . $store->getConfig("carriers/{$carrierCode}/handling_fee"), null, 'shipping-price.log');
               }
            }
        }
    }
}
?>