我在
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