2013-02-26 4 views
5

J'ai besoin de filtrer une collection de produits magento par statut désactivé. Magento semble ignorer par défaut les produits désactivés lors du chargement de la collection.Magento charger collection de produits, y compris les produits désactivés

Donc, il y a deux parties à ma question:

1 - Comment puis-je charger une collection dans magento ne contenant que des produits handicapés? 2 - Pourquoi magento ne charge-t-il pas les produits désactivés dans la collection?

J'utilise le code standard pour charger la collection:

$collction = Mage::getModel('catalog/product')->getCollection() 

cela ne se charge produits à mobilité réduite.

Répondre

7

Si vous utilisez le produit structure plate, puis

$col = Mage::getModel('catalog/product')->getCollection(); 

utilisera la table à plat (par exemple. catalog_product_flat_1), et disabled produits ne font pas partie de cette table.

Modifier la configuration Use Flat Catalog Product à « NON » et vous aurez tous les produits de la collection: catalog-flat

Il chargera tous les produits de cette façon.

+0

Cela m'a fait à mi-chemin. Il a cessé d'utiliser la table plate, mais il est toujours joint à la table 'mage_catalog_category_product_index' au lieu de 'mage_catalog_category_product', donc je ne peux toujours pas obtenir les produits désactivés. –

+0

Je l'ai fait en appliquant '-> setStoreId (Mage_Core_Model_App :: ADMIN_STORE_ID)'. Ce serait tout ce que vous deviez faire, mais à moins que vous ne désactiviez Use Flat Catalog Product, Magento essaiera de l'utiliser quand ce n'est pas le cas et de lancer une erreur. Donc, je devais les utiliser tous les deux ensemble –

-5

Ceci devrait charger votre collection filtrée par les produits désactivés.

$products = Mage::getModel('catalog/product')->getCollection() 
     ->setStoreId(Mage::app()->getStore()->getId()) 
     ->addAttributeToFilter('status', '0'); 
+4

Tout d'abord, le statut désactivé est '2'. Deuxièmement, les produits désactivés ne sont pas dans la collection pour commencer, donc le filtrage n'aide pas. –

+0

Les produits désactivés stauts est "2" et non "0" – Mohamed23gharbi

2

Si vous ne voulez pas changer votre config dans le back-office (pour garder de bonnes performances), j'ai trouvé cette solution qui change la juste valeur alors que votre demande est traitée, parce que je veux que les produits pour handicapés pour une fonction spécifique:

Mage::app()->getStore()->setConfig('catalog/frontend/flat_catalog_product', 0); 

vous devez définir cela avant la première fois que vous appelez:

Mage::getModel('catalog/product')->getCollection() 

je remarqué que vous ne pouvez pas le remettre à 1 au cours de la même demande, pro En effet, le magasin de modèles de collection garde cet indicateur en mémoire.

De cette façon, la configuration de ma base de données n'a pas été modifiée.

0

Avec un produit plat activé, vous feriez mieux d'utiliser

$collection = Mage::getResourceModel('catalog/product_collection') 

Vous serez en mesure de récupérer des produits et handicapés activés.

Voir cette réponse pour une meilleure explication: https://magento.stackexchange.com/a/40001/32179

0

Une fois que vous obtenez votre collection, vous pouvez joindre à table à l'aide -> joinTable ('cayaloginventory/stock_item', 'product_id = entity_id', array ('stock_status' = > 'is_in_stock'))

Cela va charger la table dont vous avez besoin avec les produits qui sont en stock, après simplement ajouter -> addAttributeToFilter ('status', array ('eq' => 1)) ... this chargera seulement DISPONIBLE ..si vous voulez charger l'état de changement DISABLE 2

Pour handicapés Collection de TOUS LES PRODUITS

 $collection = Mage::getModel('catalog/product') 
        ->getCollection() 
        ->joinTable('cataloginventory/stock_item', 'product_id=entity_id', array("stock_status" => "is_in_stock"))   
        ->addAttributeToFilter('status', array('eq' => 2)); 
Questions connexes