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 ?

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

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.


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

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.