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 ?

patrickzzz
sumber

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();
}
Fabian Schmengler
sumber
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.

Adarsh ​​Khatri
sumber
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();
}
Amit Bera
sumber
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);
Alessandro Ronchi
sumber