Muat Koleksi Produk Sederhana (keduanya, dalam stok dan habis)


9

Saya mendapat masalah saat memuat SEMUA produk "anak" dari Produk yang Dapat Dikonfigurasi ke dalam koleksi, bahkan yang kehabisan stok.

Suka memuat produk seperti ini:

$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}

akan mengabaikan produk anak-anak yang kehabisan stok, mungkin karena mereka tidak tercantum dalam tabel harga, yang digabungkan.

Apakah ada opsi lain tanpa memuat semua child child dengan getChildrenIds dan kemudian memuat setiap produk sederhana dengan load ?

Jawaban:


2

Masalahnya terletak pada panggilan ke addStoreFilter()dalam getUsedProductCollection():

public function getUsedProductCollection($product = null)
{
    $collection = Mage::getResourceModel('catalog/product_type_configurable_product_collection')
        ->setFlag('require_stock_items', true)
        ->setFlag('product_children', true)
        ->setProductFilter($this->getProduct($product));
    if (!is_null($this->getStoreFilter($product))) {
        $collection->addStoreFilter($this->getStoreFilter($product));
    }

    return $collection;
}

Ini menambahkan filter untuk hanya menampilkan produk yang dijual di toko saat ini.

Jika $configurableini adalah jenis instance dari produk Anda yang dapat dikonfigurasi, Anda dapat menghapus filter toko seperti ini sebelum memanggil getUsedProductCollection():

$configurable->setStoreFilter(null);

Solusi lengkap:

$configurable = $product->getTypeInstance();

$configurable->setStoreFilter(null);
$simpleCollection = $configurable->getUsedProductCollection()
    ->addAttributeToSelect('*')
    ->addFilterByRequiredOptions();

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}

1

Apa yang terjadi jika Anda mencoba cara ini:

$simpleCollection = $configurable->getUsedProductCollection()
                     ->addAttributeToSelect('*')
                     //->addFilterByRequiredOptions() //don't use any filter, get all itmes
                     ;


foreach($simpleCollection as $simple){
   //$simple->getName();
}

Cobalah.


1

Anda dapat menggunakan kode di bawah ini sebagai solusi alternatif untuk pertanyaan ini:

$simpleCollection=$configurable->getTypeInstance(true)
                ->getUsedProducts(null,$configurable);

foreach($simpleCollection as $simple){
   //$simple->getName();
}

1

Jika Anda memerlukan koleksi produk yang terkait dengan yang dapat dikonfigurasi, yang berikut ini akan berfungsi:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.