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 ?

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();
}

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.


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();
}

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.