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?

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

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.


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

?>

Ajouter du code dans <? Php?> Pour toutes les lignes
Bhagyavant
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.