Carica collezione di prodotti semplici (entrambi, disponibili e non disponibili)


9

Ho riscontrato un problema durante il caricamento di TUTTI i prodotti "figlio" di un prodotto configurabile in una raccolta, anche quelli esauriti.

Come caricare i prodotti in questo modo:

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

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

ignorerà i prodotti figlio che sono esauriti, probabilmente perché non sono elencati nelle tabelle dei prezzi, che sono uniti.

Esiste un'altra opzione senza caricare tutti gli ID figlio di getChildrenIds e quindi caricare ogni prodotto semplice con load ?

Risposte:


2

Il problema sta nella chiamata a 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;
}

Questo aggiunge filtri per mostrare solo i prodotti che sono vendibili nel negozio attuale.

Se $configurableè l'istanza del tipo del prodotto configurabile, è possibile disattivare il filtro negozio in questo modo prima di chiamare getUsedProductCollection():

$configurable->setStoreFilter(null);

Soluzione completa:

$configurable = $product->getTypeInstance();

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

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

1

Cosa succede se provi in ​​questo modo:

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


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

Provaci.


1

Puoi utilizzare il codice seguente come soluzione alternativa per questa domanda:

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

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

1

Se hai bisogno della raccolta di prodotti associati a un configurabile, dovrebbe funzionare come segue:

$configurableProduct = Mage::getModel('catalog/product')->load(<your_product_id>);
$associatedProducts = $configurableProduct->getTypeInstance()->getUsedProductCollection($configurableProduct);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.