Laden Sie die Simple Products Collection (sowohl auf Lager als auch nicht auf Lager)

9

Ich habe ein Problem beim Laden ALLER "untergeordneten" Produkte eines konfigurierbaren Produkts in eine Sammlung, auch solcher, die nicht vorrätig sind.

Laden Sie die Produkte wie folgt:

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

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

ignoriert untergeordnete Produkte, die nicht vorrätig sind, wahrscheinlich weil sie nicht in den Preistabellen aufgeführt sind, die verbunden sind.

Gibt es eine andere Option, ohne alle untergeordneten IDs von getChildrenIds zu laden und dann jedes einfache Produkt mit load zu laden ?

patrickzzz
quelle

Antworten:

2

Das Problem liegt im Aufruf von addStoreFilter()in 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;
}

Dadurch werden Filter hinzugefügt, um nur Produkte anzuzeigen, die im aktuellen Geschäft verkauft werden können.

Wenn $configurablees sich um die Typinstanz Ihres konfigurierbaren Produkts handelt, können Sie den Speicherfilter wie folgt deaktivieren, bevor Sie Folgendes aufrufen getUsedProductCollection():

$configurable->setStoreFilter(null);

Komplette Lösung:

$configurable = $product->getTypeInstance();

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

foreach ($simpleCollection as $simple) {
   //$simple->getName();
}
Fabian Schmengler
quelle
1

Was passiert, wenn Sie Folgendes versuchen:

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


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

Versuche es.

Adarsh ​​Khatri
quelle
1

Sie können den folgenden Code als alternative Lösung für diese Frage verwenden:

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

foreach($simpleCollection as $simple){
   //$simple->getName();
}
Amit Bera
quelle
1

Wenn Sie die Sammlung von Produkten benötigen, die einem konfigurierbaren Produkt zugeordnet sind, sollte Folgendes funktionieren:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Alessandro Ronchi
quelle