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

Я пытаюсь реализовать опцию оплаты только картой для определенных продуктов (настраиваемых продуктов) в этом магазине magento (1.9.1). Проблема, которую я имею с кодом, который я использую, состоит в том, что мне нужно перейти к каждому простому продукту и обновить значение атрибута, чтобы оно вступило в силу. Что я хотел бы знать, могу ли я внести изменения в код, чтобы вместо использования значения простого продукта можно было использовать значение родительского продукта, независимо от того, какое значение использует простой продукт. Так что мне просто нужно обновить настраиваемый продукт, чтобы сказать, является ли этот продукт только для карт.

Мой Observer.php для этого модуля

<?php

class JMAWD_CardOnly_Model_Observer
{
public function cardOnly(Varien_Event_Observer $observer)
{
$event           = $observer->getEvent();
$method          = $event->getMethodInstance();
$result          = $event->getResult();
$cardonly        = false;

foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as $item)
{
if($item->getProduct()->getCardOnly()){
$cardonly = true;
}
}

if($method->getCode() == "cashondelivery" && $cardonly){
$result->isAvailable = false;
}

}
}

Мой config.xml для этого модуля

<?xml version="1.0"?>
<config>
<modules>
<JMAWD_CardOnly>
<version>0.1.0</version>
</JMAWD_CardOnly>
</modules>
<global>
<events>
<payment_method_is_active>
<observers>
<card_only>
<type>singleton</type>
<class>cardonly/observer</class>
<method>cardOnly</method>
</card_only>
</observers>
</payment_method_is_active>
</events>
<models>
<cardonly>
<class>JMAWD_CardOnly_Model</class>
<resourceModel>cardonly_mysql4</resourceModel>
</cardonly>
</models>
<sales>
<quote>
<item>
<product_attributes>
<card_only/>
</product_attributes>
</item>
</quote>
</sales>
</global>
</config>

Помогите & совет ценится. Спасибо

2

Решение

Если в вашей цитате есть настраиваемые дети, вы можете получить настраиваемых родителей и проверить card_only приписывать. Таким образом, вам не нужно заботиться о простых детях.

Что-то вроде этого:

$quoteItemsCollection = Mage::getSingleton('checkout/cart')->getQuote()->getItemsCollection();
foreach ($quoteItemsCollection as $quoteItem) {
$productType = $quoteItem->getProductType();
// if productType is config and getCardOnly(), then $cardonly = true;
0

Другие решения

Это не должно случиться с getAllVisibleItems(), Как объяснено в этот ответ:

Загружает коллекцию элементов, затем возвращает массив всех элементов, которые не помечены как удаленные И не имеют родителя (т.е. вы получаете товары для связанных и настраиваемых продуктов, но не связанные с ними дети). Каждый элемент массива соответствует отображаемой строке на странице корзины.

Я подозреваю, что вы используете расширение, такое как Простые настраиваемые продукты или Лучше настраиваемые продукты, которые изменяют настраиваемый тип продукта так, что атрибуты простых продуктов отображаются и используются (особенно цены), а продукт в корзине на самом деле просто простой продукт без родителя.

Если это так, вам нужно проверить код расширения, чтобы узнать, где и как хранится информация о конфигурируемом продукте. Вы также можете посмотреть на sales_flat_quote_item_option таблица, потому что обычно там хранится вся дополнительная информация о пунктах цитаты.

0

По вопросам рекламы [email protected]