Charger la collection de produits simples (en stock et en rupture de stock)


9

J'ai rencontré un problème lors du chargement de TOUS les produits "enfants" d'un produit configurable dans une collection, même ceux qui sont en rupture de stock.

Comme charger les produits comme ceci:

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

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

ignorera les produits enfants qui sont en rupture de stock, probablement parce qu'ils ne sont pas répertoriés dans les tableaux de prix, qui sont joints.

Existe-t-il une autre option sans charger tous les identifiants enfants par getChildrenIds , puis charger chaque produit simple avec load ?

Réponses:


2

Les mensonges de problème dans l'appel à addStoreFilter()en 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;
}

Cela ajoute des filtres pour afficher uniquement les produits vendables dans le magasin actuel.

S'il $configurables'agit de l'instance de type de votre produit configurable, vous pouvez désactiver le filtre de magasin comme ceci avant d'appeler getUsedProductCollection():

$configurable->setStoreFilter(null);

Solution complète:

$configurable = $product->getTypeInstance();

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

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

1

Que se passe-t-il si vous essayez de cette façon:

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


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

Essaie.


1

Vous pouvez utiliser le code ci-dessous comme solution alternative à cette question:

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

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

1

Si vous avez besoin de la collection de produits associée à un configurable, les éléments suivants devraient fonctionner:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.