#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 и банковский перевод.