シンプルな製品コレクションを読み込む(在庫ありと在庫なしの両方)


9

構成可能な製品のすべての「子」製品をコレクションにロードするときに問題が発生しました。

このような製品をロードするように:

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

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

在庫切れの子商品は無視されます。おそらくそれらは価格表にリストされていないため、結合されています。

getChildrenIdsによってすべての子IDをロードせずに、各単純な製品をloadロードする別のオプションはありますか?

回答:


2

呼び出しでの問題の嘘addStoreFilter()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;
}

これにより、現在のストアで販売可能な商品のみを表示するフィルターが追加されます。

$configurableが構成可能な製品のタイプインスタンスである場合、を呼び出す前に、getUsedProductCollection()次のようにストアフィルターの設定を解除できます。

$configurable->setStoreFilter(null);

完全なソリューション:

$configurable = $product->getTypeInstance();

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

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

1

このようにするとどうなりますか:

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


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

試してみる。


1

この質問の代替ソリューションとして以下のコードを使用できます。

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

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

1

構成可能変数に関連付けられた製品のコレクションが必要な場合は、以下が機能するはずです。

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.