设置付款方式"货到付款"仅限特定国家

时间:2014-07-04 06:28:29

标签: magento payment magento-1.8

我想为网站所有者的州仅设置“货到付款”

我知道如何设置“指定国家/地区”

我正在使用Magento 1.8

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

Luffy,你使用magento事件观察者这样做:

创建一个扩展,然后是步骤:

app/code/community/Devamitbera/Statewisecod/etc/config.xml

下创建config.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
@Author Amit Bera
@Email dev.amitbera@gmail.com
@ Website: www.amitbera.com
*/-->
<config>
    <modules>
        <Devamitbera_Statewisecod>
            <version>1.0.0</version>
        </Devamitbera_Statewisecod>
    </modules>
    <global>
        <models>
            <statewisecod>
                <class>Devamitbera_Statewisecod_Model</class>
            </statewisecod>
        </models>
    </global>
    <frontend> <!--  run observer  event for frontend -->
        <events>
            <payment_method_is_active>
                <observers>
                    <enable_cod_for_some_state>
                        <class>statewisecod/observer</class>
                        <method>EnableCod</method>
                    </enable_cod_for_some_state>
                </observers>
            </payment_method_is_active>
        </events>
    </frontend>
</config>

创建观察者文件 在 app/code/community/Devamitbera/Statewisecod/Model

下的 Observer.php

此文件的代码:

  <?php
class Devamitbera_Statewisecod_Model_Observer
{
    public function EnableCod($observer){
        $result=$observer->getEvent()->getResult();
        $MethodInstance=$observer->getEvent()->getMethodInstance();
        $quote=$observer->getEvent()->getQuote();

        if($quote && $quote->getId()):
        /* If Payment method is  cashondelivery  then  conitnue  */
            if($MethodInstance->getCode()=='cashondelivery'){
                #Mage::log('Payment is Cod',null,'Cod.log',true);
                $ShippingAddress=$quote->getShippingAddress();

                /* region_id is working when country have  
                * drop state/regions.
                */
                /* Here i  have put USA coutry new work & Washinton redion */

                #Mage::log('redion'.$ShippingAddress->getRegionId(),null,'redion.log',true);

                $CodEnableRegionIds=array(62,43);
                if(in_array($ShippingAddress->getRegionId(),$CodEnableRegionIds)):
                      $result->isAvailable=true;
                elseif(is_null($ShippingAddress->getRegionId()) && !is_null($ShippingAddress->getRegion())):
                /* This section working when State/region is not dropdown 
                 and state is dropdown
                */
                $textListRegionName=array('West bengal','Delhi');
                    if(in_array($ShippingAddress->getRegion(),$textListRegionName)){
                          $result->isAvailable=true;
                    }else{
                          $result->isAvailable=false;
                    }
                else:
                  $result->isAvailable=false;
                endif;              


                return   $result->isAvailable;
            }

        endif;


    }
}

Devamitbera_Statewisecod.xml

下创建模块文件app/etc/modules
<?xml version="1.0" encoding="utf-8"?>
<!--
@Author Amit Bera
@Email dev.amitbera@gmail.com
@ Website: www.amitbera.com
-->
<config>
    <modules>
    <Devamitbera_Statewisecod>
        <codePool>community</codePool>
        <active>true</active>
        <depends><Mage_Payment/></depends>
    </Devamitbera_Statewisecod>
    </modules>
</config>

此处cashondelivery是付款方式code of cash on delivery ....保存在数据库中。

- 编辑:

当国家/地区拥有放置州/地区列表时,

region_id 正在运作。

if(in_array($ShippingAddress->getRegionId(),$CodEnableRegionIds)):
                      $result->isAvailable=true;

如果州/地区不是下拉列表,则说明逻辑正常

elseif(is_null($ShippingAddress->getRegionId()) && !is_null($ShippingAddress->getRegion())):
$textListRegionName=array('West bengal','Delhi');
    if(in_array($ShippingAddress->getRegion(),$textListRegionName)){
      $result->isAvailable=true;
    }else{
      $result->isAvailable=false;
    }