web-dev-qa-db-fra.com

Magento - chargez uniquement des produits configurables

J'ai le code suivant:

$_productCollection = $this->getLoadedProductCollection();

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

Bien qu’il fasse ce qu’il est supposé faire, il ralentit considérablement le temps de chargement des pages. Est-il possible de ne charger que des produits configurables et de supprimer la case à cocher «configurable»? Le magasin a 12 000 produits, environ 700 sont configurables et le reste sont des produits simples.

J'ai trouvé le code suivant qui renvoie tous les produits configurables. Je n'ai besoin que des produits de la catégorie actuelle:

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

Le problème avec getLoadedProductCollection() est qu’il est déjà chargé - les données des produits ont déjà été extraites de la base de données. Le simple fait d'utiliser la collection de produits de la catégorie actuelle ne suffit pas non plus, cela ignorera les "couches" (filtres d'attributs). L'astuce consiste à supprimer les produits chargés de la liste en premier.

// 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) a aussi des problèmes, vous ne produisez pas uniquement les produits mais également tous les détails de la ressource qui constitue la connexion à la base de données, les valeurs mises en cache, les ressources individuelles des produits, etc.

Dans ce cas, je pense que vous seriez plus heureux avec:

print_r($_productCollection->toArray())
26
clockworkgeek

Toutes ces solutions n'ont pas fonctionné pour moi, essayez ceci:

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

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

Cela fonctionne, mais je ne sais pas si c'est correct (je suis nouveau dans Magento). Fais-moi savoir s'il te plaît.

7
Fred K

Pour ce faire, tous les produits doivent être chargés avant d'être analysés et filtrés. Ceci est probablement plus proche de ce que vous recherchez:

$_productCollection = $this ->getLoadedProductCollection()
                            ->addAttributeToFilter('type_id','configurable');
3
philwinkle

Essayez de suivre 

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

    foreach($collection as $product)
    {

    }

Pour le chargement configurable et simple, essayez aussi

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

Voici le code pour obtenir uniquement les produits configurables:

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