Magento根据产品选项付款方式

时间:2014-06-26 09:11:33

标签: magento payment

当客户购买产品时,我需要执行下一步操作:

如果有自定义选项的产品只显示付款方式,并且没有其他方法。

怎么做...我疯了

感谢

1 个答案:

答案 0 :(得分:0)

你可以做这个事件观察员

在app / code / local

下创建扩展程序

Bh_ZeroSubtotalpaymentmethod_Model

下的扩展名为config.xml
app/code/local/Bh/ZeroSubtotalpaymentmethod/etc

它的代码是

<?xml version="1.0" ?>
<config>
    <modules>
        <Bh_ZeroSubtotalpaymentmethod>
            <version>1.0.1</version>
        </Bh_ZeroSubtotalpaymentmethod>
    </modules>
    <global>
        <models>
            <zerosubtotalpaymentmethod>
            <class>Bh_ZeroSubtotalpaymentmethod_Model</class>
            </zerosubtotalpaymentmethod>
    </models>

    </global>
    <frontend>
        <events>
            <payment_method_is_active>
                <observers>
                    <paymentfilter_payment_method_is_active>
                        <type>singleton</type>
                        <class>zerosubtotalpaymentmethod/observer</class>
                        <method>filterpaymentmethod</method>
                    </paymentfilter_payment_method_is_active>
                </observers>
            </payment_method_is_active>
    </events>
    </frontend>
</config>

和Observer文件代码

<?php
class Bh_ZeroSubtotalpaymentmethod_Model_Observer {

    public function filterpaymentmethod(Varien_Event_Observer $observer) {


        /* call get payment method */
        $method = $observer->getEvent()->getMethodInstance();


        if($method->getCode()=='paypal_standard')
        {   $quote = $observer->getEvent()->getQuote();
            if($this->checkcustomoption()==true){
            $result = $observer->getEvent()->getResult();   
            $result->isAvailable = false;
            }
            return;
        }
        if($method->getCode()=='free'){
            $quote = $observer->getEvent()->getQuote();
            if($this->checkcustomoption()==false){
            $result = $observer->getEvent()->getResult();   
            $result->isAvailable = false;
            return;
            }
        }
        return;
    }
public function checkcustomoption(){


//To get your cart object (in session) :

$quote = Mage::getSingleton('checkout/session')->getQuote();

//Then, to get the list of items in the cart :

$cartItems = $quote->getAllVisibleItems();

//Then, to get the count for each item :

foreach ($cartItems as $item)
 {  // check  $item->getProduct() give cart item
     $item->getProduct();
    if(your_logic_match){
        return true;
        break;
    }

}

retrun false;
}
}
?>

用于检查和使用自定义选项https://magento.stackexchange.com/questions/17867/get-custom-option-price-in-order博客Gavin回答