Mendapatkan item kutipan (troli) secara programatik menunjukkan SKU duplikat untuk produk yang dapat dikonfigurasi dan sederhana

10

Saya mendapatkan keranjang belanja menggunakan:

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

Dan kemudian iterasi melalui itu menggunakan:

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

Tetapi tampaknya mengembalikan item duplikat dengan SKU yang sama, tetapi id produk berbeda! Di situs utama, ketika saya membuka gerobak, itu menunjukkan produk tunggal.

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

Pertanyaan saya adalah .. Mengapa ini terjadi? Tidakkah produk induk (dapat dikonfigurasi) menampilkan Sku uniknya sendiri?

Juga, jika saya ingin menambahkan produk ke troli, haruskah saya menambahkan produk yang dapat dikonfigurasi? Atau apakah saya menambahkan produk sederhana dan Magento menangani sisanya?

Menepuk
sumber

Jawaban:

10

Menurut Magento, ketika produk yang dapat dikonfigurasi ditambahkan pada troli maka dua baris dimasukkan ke dalam basis data. satu keranjang produk yang dapat dikonfigurasi yang lain adalah produk sederhana

  • 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

Seperti yang telah Anda gunakan getAllItems()maka untuk loop Anda harus checkmemilikinya parent item $item->getParentItemId().

foreach ($cart->getAllItems() as $item) {
    / * add this */
    if ($item->getParentItemId()) {
        continue;
    }
........
}
Amit Bera
sumber
Anda juga dapat menggunakan kode Marius untuk tujuan visibilitas pengguna
Amit Bera
Namun ada masalah .. Saya tidak bisa mendapatkan warna, ukuran, dll. Ketika saya menggunakan getAllVisibleItems (). Bagaimana saya harus melakukan itu?
Pat
ya itu mungkin dengan menggunakan model Produk oleh Sku, karena sku sama untuk dua .. baris
Amit Bera
10

Gunakan $cart->getAllVisibleItems()sebagai ganti $cart->getAllItems().
Anda mendapatkan duplikat karena ketika menambahkan produk yang dapat dikonfigurasi ke troli, magento sebenarnya menambahkan 2 produk, produk sederhana dan produk yang dapat dikonfigurasi tetapi hanya satu yang terlihat oleh pengguna.

Marius
sumber
Jika saya menambahkan produk sederhana, itu juga akan secara otomatis menambahkan yang dapat dikonfigurasi? Atau apakah saya perlu melakukannya secara manual?
Pat
Tidak. Ketika Anda menambahkan produk yang dapat dikonfigurasi, akan ada 2 di keranjang.
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
sumber
Tambahkan kode dalam <? Php?> Untuk semua baris
Bhagyavant