php – Magento – OnePage Checkout – 根据送货方式隐藏付款方式

我在 Magento Stackexchange问了这个问题没有任何成功,因此我现在在这里问.

我正在使用Magento Community Edition 1.9.0.1并正确创建并注册了我的模块,但我似乎无法检测到运输方式.基本上,如果选择统一费率或免费送货,我想隐藏货到付款.这是我的观察者类的代码

class Kol_PaymentToggle_Model_Observer
{
    public function paymentMethodisActive(Varien_Event_Observer $observer) {
        $event  = $observer->getEvent();
        $method = $event->getmethodInstance();
        $result = $event->getResult(); 
        $quote = $observer->getEvent()->getQuote();
        $shippingMethod = $quote->getShippingAddress()->getShippingMethod();
        if($shippingMethod == "standardshipping" || $shippingMethod == "free") {
            if($method->getCode() == 'cashondelivery' ) {
                $result->isAvailable = false;
            }
        }
    }
}

我猜我没有使用正确的运输方式代码名称或付款方式代码名称,但我不确定.有人有什么建议吗?

编辑:
我只启用了3种送货方式:

>收集商店标题=收藏商店方法名称=收藏商店(Extension link)
>统一费率标题=标准交付方式名称=标准运输
>免费送货标题=免费送货方式名称=免费

编辑2:
config.xml的输出

<?xml version="1.0"?>
<config>
    <modules>
        <Kol_PaymentToggle>
            <version>0.0.1</version>
        </Kol_PaymentToggle>
    </modules>
    <frontend>
        <events>
            <payment_method_is_active>
                <observers>
                    <paymentfilter_payment_method_is_active>
                        <type>singleton</type>
                        <class>Kol_PaymentToggle_Model_Observer</class>
                        <method>paymentMethodisActive</method>
                    </paymentfilter_payment_method_is_active>
                </observers>
            </payment_method_is_active>
        </events>
    </frontend>
</config>

希望这些额外的信息可以证明对我有用!

至于我得到的,你试图隐藏一些基于运输方式的付款方式.为此,您根本不需要观察事物.只需你可以做到这一点,跟着我,

每个方法(在一页中检出)都会将选择的方法发布到下一级别.这样您就可以在付款方式级别获得所选的送货方式.只需打印帖子即可

app/design/frontend/base/default/template/checkout/onepage/payment/methods.phtml

在这下面添加一个,

<?PHP print_r($_POST); ?>

所以现在您可以获得上一步选择的运输方式.请注意,现在,您可以在同一个文件添加简单的逻辑(if else)条件以隐藏付款,

例如,这里我想要隐藏支票/汇票支付方式,如果运输方式是平的.这里的付款方式代码是checkmo.您可以通过简单地打印该变量来获得付款方式代码,例如echo $_code = $_method-> getCode();在同一个文件中.所以这里只是添加简单的if else,

<?PHP
    $methods = $this->getmethods();


    $oneMethod = count($methods) <= 1;
?>
<?PHP if (empty($methods)): ?>
    <dt>
        <?PHP echo $this->__('No Payment Methods') ?>
    </dt>
<?PHP else:
    foreach ($methods as $_method):
       echo  $_code = $_method->getCode();


if($_POST['shipping_method'] == 'flatrate_flatrate') {
if($_code == 'checkmo') {
    continue;
}
}
?>

这里,

if($_POST['shipping_method'] == 'flatrate_flatrate') {
if($_code == 'checkmo') {
    continue;
}
}

检查送货方式并跳过我们不想显示的付款方式.而已.如果您有任何疑问,请在此发表评论.

注意:

shipping_method => flatrate_flatrate
 paymet_method   => checkmo

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...