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ą?

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;
    }
........
}

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.


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);
}

?>

Dodaj kod w <? Php?> Dla wszystkich linii
Bhagyavant 18.04.17
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.