Cargar colección de productos simples (tanto en stock como fuera de stock)

9

Tengo un problema al cargar TODOS los productos "secundarios" de un Producto configurable en una colección, incluso aquellos que están agotados.

Como cargar los productos como este:

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

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

ignorará los productos secundarios que están agotados, probablemente porque no están listados en las tablas de precios, que están unidos.

¿Hay otra opción sin cargar todos los id de niño por getChildrenIds y luego cargar cada producto simple con carga ?

patrickzzz
fuente

Respuestas:

2

Las mentiras de problemas en la llamada a 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;
}

Esto agrega filtros para mostrar solo los productos que se pueden vender en la tienda actual.

Si $configurablees la instancia de tipo de su producto configurable, puede desactivar el filtro de la tienda de esta manera antes de llamar getUsedProductCollection():

$configurable->setStoreFilter(null);

Solución completa:

$configurable = $product->getTypeInstance();

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

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

¿Qué sucede si intentas de esta manera?

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


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

Darle una oportunidad.

Adarsh ​​Khatri
fuente
1

Puede usar el siguiente código como solución alternativa para esta pregunta:

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

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

Si necesita la colección de productos asociados a un configurable, lo siguiente debería funcionar:

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