Pozyskiwanie ofert (koszyka) programowo pokazuje zduplikowane kody SKU zarówno dla produktu konfigurowalnego, jak i prostego

10

Dostaję koszyk za pomocą:

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

A następnie iterowanie za pomocą:

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

Wygląda jednak na to, że zwraca zduplikowane produkty z tymi samymi kodami SKU, ale z różnymi identyfikatorami produktów! Jednak na stronie głównej, kiedy otwieram koszyk, pokazuje pojedynczy produkt.

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

Moje pytanie brzmi… Dlaczego tak się dzieje? Czy produkt nadrzędny (konfigurowalny) nie powinien pokazywać własnego unikalnego kodu SKU?

Ponadto, jeśli chcę dodać produkt do koszyka, czy powinienem dodać produkt konfigurowalny? Czy dodam prosty produkt, a Magento zajmie się resztą?

Poklepać
źródło

Odpowiedzi:

10

Według Magento, gdy konfigurowalny produkt dodawany jest do koszyka, wówczas w bazie danych umieszczane są dwa wiersze. jeden konfigurowalny koszyk produktów inny jest produktem prostym

  • 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

Jak już używasz getAllItems()pętli for, musisz checkto zrobić parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
źródło
Możesz także użyć kodu Marius do widoczności użytkownika
Amit Bera
Jest jednak problem .. Nie mogę uzyskać koloru, rozmiaru itp. Kiedy używam getAllVisibleItems (). Jak mam to zrobić?
Pat
tak, jest to możliwe przy użyciu modelu produktu Sku, ponieważ SKU jest taki sam dla dwóch .. wierszy
Amit Bera
10

Użyj $cart->getAllVisibleItems()zamiast $cart->getAllItems().
Otrzymujesz duplikaty, ponieważ dodając konfigurowalny produkt do koszyka, magento faktycznie dodaje 2 produkty, produkt prosty i produkt konfigurowalny, ale tylko jeden jest widoczny dla użytkownika.

Marius
źródło
Jeśli dodam prosty produkt, to również automatycznie doda konfigurowalny? Czy muszę to zrobić ręcznie?
Pat
Nie. Po dodaniu konfigurowalnego produktu w koszyku będą 2.
Marius
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
źródło
Dodaj kod w <? Php?> Dla wszystkich linii
Bhagyavant 18.04.17