Как получить настраиваемые товары, добавленные в корзину, используя getQuoteItem () в Magento - PullRequest
1 голос
/ 11 февраля 2012

Я хочу установить индивидуальную цену на все виды товаров.Я слушаю наблюдателя checkout_cart_product_add_after.В этой функции я использую следующий код для установки пользовательской цены на продукты.

$newPrice  = $_POST["txtprice"];
$event = $observer->getEvent();
$minPrice = $observer->getProduct()->getMinPrice();
$quoteItem = $event->getQuoteItem();

if($newPrice > $minPrice){          
$quoteItem->setCustomPrice($newPrice);              
$quoteItem->setOriginalCustomPrice($newPrice);
    $quoteItem->getProduct()->setIsSuperMode(true);
}

Этот код отлично работает для простых продуктовДля настраиваемых продуктов это не работает.Настраиваемый элемент корзины не устанавливается в объекте $ quoteItem.И поэтому я не могу получить пользовательскую цену, установленную с помощью $ quoteItem.

1 Ответ

1 голос
/ 01 марта 2012

Смотрите ответ, который я отредактировал здесь :

Вот пример кода, который вы можете использовать в Observer, который слушает для checkout_cart_product_add_after или checkout_cart_update_items_after событий. Код логически то же самое, кроме checkout_cart_product_add_after, вызывается только для одного item и checkout_cart_update_items_after вызывается для всех предметов в Корзина. Этот код разделен / дублирован на 2 метода только как Пример.

Для конфигурируемых продуктов вам нужно проверить $item->getParentItem(), как в примере кода из этого ответа:

Событие: checkout_cart_product_add_after

/**
 * @param Varien_Event_Observer $observer
 */
public function applyDiscount(Varien_Event_Observer $observer)
{
    /* @var $item Mage_Sales_Model_Quote_Item */
    $item = $observer->getQuoteItem();
    if ($item->getParentItem()) {
        $item = $item->getParentItem();
    }

    // Discounted 25% off
    $percentDiscount = 0.25; 

    // This makes sure the discount isn't applied over and over when refreshing
    $specialPrice = $item->getOriginalPrice() - ($item->getOriginalPrice() * $percentDiscount);

    // Make sure we don't have a negative
    if ($specialPrice > 0) {
        $item->setCustomPrice($specialPrice);
        $item->setOriginalCustomPrice($specialPrice);
        $item->getProduct()->setIsSuperMode(true);
    }
}

Событие: checkout_cart_update_items_after

/**
 * @param Varien_Event_Observer $observer
 */
public function applyDiscounts(Varien_Event_Observer $observer)
{
    foreach ($observer->getCart()->getQuote()->getAllVisibleItems() as $item /* @var $item Mage_Sales_Model_Quote_Item */) {
         if ($item->getParentItem()) {
             $item = $item->getParentItem();
         }

         // Discounted 25% off
         $percentDiscount = 0.25; 

         // This makes sure the discount isn't applied over and over when refreshing
         $specialPrice = $item->getOriginalPrice() - ($item->getOriginalPrice() * $percentDiscount);

         // Make sure we don't have a negative
         if ($specialPrice > 0) {
             $item->setCustomPrice($specialPrice);
             $item->setOriginalCustomPrice($specialPrice);
             $item->getProduct()->setIsSuperMode(true);
         }
    }
}
...