Способ оплаты Magento в соответствии с параметрами продукта

#magento #payment

#magento #оплата

Вопрос:

Мне нужно выполнить следующее действие, когда клиент совершает покупку продуктов:

Если есть продукт с пользовательскими параметрами для отображения только способа оплаты, и если нет другого способа.

как это сделать … Я схожу с ума

Спасибо

Ответ №1:

Вы можете сделать это наблюдателем событий

создайте расширение в разделе 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>
 

и код файла наблюдателя

является

 <?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 блог Гэвина ответ

Комментарии:

1. спасибо, но мой уровень программирования и знаний magento не позволяет мне следовать инструкциям… Я запланировал, но на самом деле мне не нравится сталкиваться с этой проблемой. Я пытался изменить файл methods.pthml, но безрезультатно (также не рекомендуется, чтобы файлы воспроизводили чистую базу)

2. Я сделал то, что вы упомянули, но ничего не сделано… угадайте, что я не должен делать хорошо. подумал, что это может быть более «просто», поскольку на самом деле это проверка, когда мы переходим к оформлению заказа, и серьезно, опция будет оплачивать бюджет только в том случае, если есть продукт с активированным has_option, и наоборот, если ни в одной статье нет активов has_option, будут активированы кредитные карты, paypal и банковский перевод.