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

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
Амит Бера
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);
}

?>
Bhagyavant
источник
Добавьте код в <? Php?> Для всех строк
Bhagyavant