L'obtention d'articles de devis (panier) affiche par programme des références en double pour le produit configurable et simple

10

Je reçois le panier d'achat en utilisant:

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

Et puis itérer à travers elle en utilisant:

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

Mais il semble renvoyer des articles en double avec les mêmes références, mais des identifiants de produits différents! Sur le site principal, cependant, lorsque j'ouvre le panier, il montre le produit unique.

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

Ma question est .. Pourquoi cela se produit-il? Le produit parent (configurable) ne devrait-il pas montrer son propre Sku unique?

De plus, si je veux ajouter un produit au panier, dois-je ajouter le produit configurable? Ou dois-je ajouter le produit simple et Magento s'occupe du reste?

Tapoter
la source

Réponses:

10

Selon Magento, lorsqu'un produit configurable est ajouté au panier, deux lignes sont insérées dans la base de données. un panier de produits configurable un autre est un produit simple

  • 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

Comme vous l' avez en utilisant getAllItems()ensuite pour la boucle que vous devez checkest qu'il a parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
la source
Vous pouvez également utiliser le code Marius à des fins de visibilité utilisateur
Amit Bera
Il y a un problème cependant .. Je ne peux pas obtenir la couleur, la taille, etc. Quand j'utilise le getAllVisibleItems (). Comment dois-je faire ça?
Pat
oui c'est possible en utilisant Product model by Sku, car sku est le même pour deux .. lignes
Amit Bera
10

Utilisez $cart->getAllVisibleItems()au lieu de $cart->getAllItems().
Vous obtenez des doublons car lors de l'ajout d'un produit configurable au panier, magento ajoute en fait 2 produits, le produit simple et le produit configurable mais un seul est visible pour l'utilisateur.

Marius
la source
Si j'ajoute un produit simple, il ajoutera automatiquement celui configurable également? Ou dois-je le faire manuellement?
Pat
Non. Lorsque vous ajoutez un produit configurable, il y en aura 2 dans le panier.
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
la source
Ajouter du code dans <? Php?> Pour toutes les lignes
Bhagyavant