如何禁用特定产品类型的货到付款
-
13-12-2019 - |
题
基本上我需要禁用特定产品类型的货到付款。基本上我正在使用法师商店的商店信用。这是magento 中的钱包。付款选项显示货到付款。它不是物理或虚拟产品。所以我需要禁用这种产品类型的货到付款。
解决方案
你可以通过以下方式做到这一点 Magento Event/Observer
首先,使用 payment_method_is_active
禁用取决于当前报价产品类型。
代码:
模块config.xml代码:
<global>
<events>
<payment_method_is_active>
<observers>
<paymentfilter_payment_method_is_active>
<type>singleton</type>
<class>yourmodel/observer</class>
<method>filterpaymentmethod</method>
</paymentfilter_payment_method_is_active>
</observers>
</payment_method_is_active>
</events>
</global>
观察者代码是:
<?php class YOURNANESPACE_YOURMODULE_Model_Observer { public function filterpaymentmethod(Varien_Event_Observer $observer) { /* call get payment method */ $method = $observer->getEvent()->getMethodInstance(); /* get Quote */ $quote = $observer->getEvent()->getQuote(); $result = $observer->getEvent()->getResult(); if (empty($quote) || (null === $quote)) { return $this; } /* Disable Your payment method for adminStore */ if ($method->getCode() == 'YOUR_PAYMENT_METHOD_CODE') { foreach ($quote->getAllItems() as $item) { // get Cart item product Type // if ($item->getProductType() == 'YourProductType'): $result->isAvailable = false; endif; } } } }
其他提示
为此你需要使用magento payment_method_is_active
事件
我假设您知道如何开发 magento 扩展[如果不知道,请检查 这个答案你得到整个模块将此代码写入您的 config.xml
从 app>code>codepool>namespace>package>etc
<global>
...
<events>
<payment_method_is_active>
<observers>
<paymentfilter_payment_method_is_active>
<type>singleton</type>
<class>PaymentFilter_Model_Observer</class>
<method>paymentMethodIsActive</method>
</paymentfilter_payment_method_is_active>
</observers>
</payment_method_is_active>
</events>
...
</global>
创建观察者文件 app/code/codepool>namespace>package/Model/Observer.php
class namespace_package_Model_Observer {
public function paymentMethodIsActive(Varien_Event_Observer $observer) {
$event = $observer->getEvent();
$method = $event->getMethodInstance();
$result = $event->getResult();
$currencyCode = Mage::app()->getStore()->getCurrentCurrencyCode();
if($someTrueConditionGoesHere){
$result->isAvailable = true;
}else{
$result->isAvailable = false;
}
}
}
你看这个我认为这是否会解决你的问题你只需要修改方法.phtml文件和从中获得任何引号的文件,并通过事件 - 观察者或通过模块执行验证或条件phtml文件中的修改?
https://stackoverflow.com/questions/29819037/disable-cash-on-特定于特定的产品
和
https://stackoverflow.com/问题/ 14011348 /禁用 - 付款选项 - 仅限现金on-over-product-product-product-magento