Отримання позицій із кошиками (кошик) програмно відображає копії коду як для налаштованого, так і для простого продукту


10

Я отримую кошик за допомогою:

$cart = Mage::getSingleton('checkout/session')->getQuote();

А потім повторити через нього за допомогою:

foreach ($cart->getAllItems() as $item) { }

Але, схоже, повертаються повторювані елементи з тими ж SKU, але різними ідентифікаторами продуктів! На головному сайті, коли я відкриваю візок, він показує єдиний товар.

cart: {
    id: 680,
    items: [
        {
            name: "Tori Tank",
            price: "60.0000",
            id: "418",
            sku: "wbk004"
        },
        {
            name: "Tori Tank",
            price: "60.0000",
            id: "286",
            sku: "wbk004"
        }
    ]
}

Моє запитання .. Чому це відбувається? Чи не повинен батьківський (настроюваний) продукт показувати свою унікальну Sku?

Крім того, якщо я хочу додати товар у кошик, чи варто додати продукт, що може настроюватися? Або я додаю простий продукт, а Magento обробляє решту?

Відповіді:


10

За словами Magento, коли в кошик додається настроюваний продукт, то в базу даних вставляються два ряди. один настроюваний кошик товарів інший - простий продукт

  • One row has configurable id and simple product SKU and parent item id is null
  • Other rows have simple id and simple product SKU and parent item id should above row id

Як ви користуєтесь getAllItems()тоді для циклу, вам потрібно, щоб checkвін був parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}

Ви також можете використовувати код Marius для наочності користувачів
Amit Bera

Однак є проблема .. Я не можу отримати колір, розмір тощо. Коли я використовую getAllVisibleItems (). Як мені це зробити?
Пат

так це можливо, використовуючи модель продукту Sku, тому що sku однакова для двох .. rowss
Amit Bera

10

Використовуйте $cart->getAllVisibleItems()замість $cart->getAllItems().
Ви отримуєте дублікати, тому що, додаючи в кошик настроюваний продукт, magento фактично додає 2 продукту, простий продукт і конфігуруваний продукт, але користувач бачить лише один.


Якщо я додам простий продукт, він автоматично додасть і той, що може налаштовуватися? Або мені це потрібно зробити вручну?
Пат

Ні. Коли ви додасте продукт, що настроюється, у кошику буде 2.
Маріус

1
<?php
$cart = Mage::getModel('checkout/cart')->getQuote();

foreach ($cart->getAllVisibleItems() as $item) 
{ 
  echo $productName = $item->getProduct()->getName();
  echo $productPrice = $item->getProduct()->getPrice();
  echo $grandTotal = Mage::getModel('checkout/session')->getQuote()->getGrandTotal();
  echo $this->helper('catalog/image')->init($item->getProduct(), 'small_image')->resize(50,50);
}

?>

Додайте код у <? Php?> Для всіх рядків
Bhagyavant
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.