2011-03-12 18 views
12

Tengo el siguiente código:Magento - sólo productos configurables carga

$_productCollection = $this->getLoadedProductCollection(); 

foreach ($_productCollection as $_product) 
{ 
    if ($_product->_data['type_id'] == 'configurable') 
    { 
    ... 
    } 
} 

A pesar de que hace lo que se supone que debe hacer, se ralentiza en gran medida el tiempo de carga de la página. ¿Es posible cargar solo productos configurables y eliminar el cheque de 'configurable'? La tienda tiene 12000 productos, alrededor de 700 son configurables y el resto son productos simples para niños.

Encontré el siguiente código que devuelve todos los productos configurables. Necesito sólo los productos dentro de la categoría actual:

$collectionConfigurable = Mage::getResourceModel('catalog/product_collection') 
       ->addAttributeToFilter('type_id', array('eq' => 'configurable')); 
+0

Se puede guardar en caché el salida o colección obtenida de este código? – alex

+0

No estoy seguro de lo que quiere decir, pero hice 'fwrite ($ f, print_r ($ _ productCollection, true))' y el tamaño del archivo fue de 54MB. '$ _productCollection-> count()' devuelve 5420. Obviamente no puedo publicarlo aquí. – Vincent

Respuesta

25

El problema con getLoadedProductCollection() es que ya está cargado - los datos de los productos ya se ha recuperado de la base de datos. El solo uso de la colección de productos de la categoría actual tampoco es lo suficientemente bueno, que ignorará las "capas" (filtros de atributos). El truco es eliminar primero los productos cargados de la lista.

// First make a copy, otherwise the rest of the page might be affected! 
$_productCollection = clone $this->getLoadedProductCollection(); 
// Unset the current products and filter before loading the next. 
$_productCollection->clear() 
        ->addAttributeToFilter('type_id', 'configurable') 
        ->load(); 

print_r($_productCollection) tiene sus problemas también, que no sólo está la salida de los productos, sino también todos los detalles del recurso que es la conexión de base de datos, y los valores almacenados en caché, y los recursos individuales de los productos, y así sucesivamente .. .

en este caso creo que sería más feliz con:

print_r($_productCollection->toArray()) 
+0

¿Hay alguna manera de no cargar productos simples desde DB en absoluto? – Vincent

+0

Puede establecer su visibilidad en "No visible individualmente", que los excluiría de las listas de productos.Si se refiere específicamente a esta ocasión, utilice el filtro 'addAttributeToFilter ('type_id', array ('neq' => 'simple'))'. 'neq' obviamente significa" No EQual ". – clockworkgeek

+0

+1 a este método. Me gusta el clon y claro, muy sucinto. – philwinkle

3

La forma en que está haciendo esto requiere que todos los productos que se cargan antes de analizar a través de ellas y filtrar. Esto es probablemente más cerca de lo que usted está buscando:

$_productCollection = $this ->getLoadedProductCollection() 
          ->addAttributeToFilter('type_id','configurable'); 
+0

No cambia nada. La cantidad de productos devueltos sigue siendo la misma. – Vincent

+0

¿Qué versión estás ejecutando? – philwinkle

+0

Versión 1.5.0.1 – Vincent

-1

Si cambia la visibilidad del producto simple de "no visible individualmente", Magento no se cargará para mostrar en la página de la lista de productos.

7

Todas esas soluciones no funcionaron para mí, intente esto:

$_productCollection1 = Mage::getResourceModel('catalog/product_collection') 
      ->addAttributeToSelect('*') 
      ->addAttributeToFilter('type_id','configurable'); 

foreach ($_productCollection1 as $product1) { 
    echo $product1->getName(); 
    ... 
} 

que funciona, pero no sé si es correcto (soy nuevo en Magento). Por favor házmelo saber.

+1

Trabajado como encanto muchas gracias :) –

3

intente seguir

$collection = Mage::getModel('catalog/product')->getCollection(); 
    $collection->addAttributeToFilter('type_id','configurable'); 

    foreach($collection as $product) 
    { 

    } 

Para cargar configurable y sencilla, así tratan

$collection->addAttributeToFilter('type_id', array('in' => array('configurable','simple'))); 
0

Este es el código para obtener productos sólo configurables:

$Config_products = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToFilter('type_id','configurable'); 
Cuestiones relacionadas