Beim programmgesteuerten Abrufen von Angebotsartikeln werden doppelte SKUs sowohl für das konfigurierbare als auch für das einfache Produkt angezeigt

10

Ich erhalte den Einkaufswagen mit:

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

Und dann durchlaufen mit:

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

Es scheint jedoch, dass doppelte Artikel mit denselben Artikelnummern, aber unterschiedlichen Produkt-IDs zurückgegeben werden! Wenn ich auf der Hauptseite den Warenkorb öffne, wird jedoch das einzelne Produkt angezeigt.

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

Meine Frage ist .. Warum passiert das? Sollte das übergeordnete (konfigurierbare) Produkt nicht seine eigene eindeutige Sku anzeigen?

Wenn ich ein Produkt in den Warenkorb legen möchte, sollte ich das konfigurierbare Produkt hinzufügen? Oder füge ich das einfache Produkt hinzu und Magento erledigt den Rest?

Klopfen
quelle

Antworten:

10

Laut Magento werden beim Hinzufügen eines konfigurierbaren Produkts im Warenkorb zwei Zeilen in die Datenbank eingefügt. Ein konfigurierbarer Produktwagen ist ein einfaches Produkt

  • 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

Da Sie getAllItems()dann on for loop verwenden müssen, müssen Sie checkes haben parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
quelle
Sie können Marius-Code auch für die Sichtbarkeit des Benutzers verwenden
Amit Bera
Es gibt jedoch ein Problem. Ich kann Farbe, Größe usw. nicht ermitteln. Wenn ich getAllVisibleItems () verwende. Wie soll ich das machen
Pat
Ja, es ist möglich, wenn Sie das Produktmodell von Sku verwenden, da sku für zwei gleich ist. rowss
Amit Bera
10

Verwenden Sie $cart->getAllVisibleItems()anstelle von $cart->getAllItems().
Sie erhalten Duplikate, da Magento beim Hinzufügen eines konfigurierbaren Produkts zum Warenkorb tatsächlich zwei Produkte hinzufügt, das einfache Produkt und das konfigurierbare Produkt, von denen jedoch nur eines für den Benutzer sichtbar ist.

Marius
quelle
Wenn ich ein einfaches Produkt hinzufüge, wird automatisch auch das konfigurierbare hinzugefügt? Oder muss ich es manuell machen?
Pat
Nein. Wenn Sie ein konfigurierbares Produkt hinzufügen, befinden sich 2 im Warenkorb.
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
quelle
Fügen Sie Code in <? Php?> Für alle Zeilen hinzu
Bhagyavant