Y a-t-il un moyen facile de filtrer une collection de produits par plusieurs catégories? Pour obtenir tous les éléments de l'une des catégories énumérées? est le seul moyen d'obtenir les collections de chaque catégorie d'intérêt séparément, puis de les fusionner? P> Je comprends cela être possible avec quelque chose comme p> ou similaire, mais que cela n'est plus possible depuis 1.4. P> Remarque: J'utilise 1.6, et dans le cas où C'est une utilisation, j'utilise quelque chose comme ceci: p> addCategoryFilter code> ne semble pas permettre un tableau.
7 Réponses :
La façon dont Magento fonctionne maintenant, est d'obtenir le magasin, et du magasin, vous pouvez obtenir les catégories de la cadeurCollection comme $ ostorecollection-> addCategoryFilter (tableau ('1', '2');
Je suis tombé sur une solution qui pourrait vous aider, trouvé ici à l'adresse suivante: p>
http://www.magentocommerce.com/boards/&/viewththread/201114/#t329230 p>
Le code qu'ils utilisent, ressemble à ceci: Remplacer le mage / Catalogue / Modèle / Ressource / EAV / MYSQL4 / Produit / collection, et ajoutez les méthodes suivantes: P>
$collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('*') ->distinct(true) // THIS IS WHAT YOU NEED TO ADD ->addCategoriesFilter($category->getAllChildren(true)); // Make sure you don't forget to retrieve your category here.
Merci pour ça. J'ai ajouté les deux, et maintenant obtenir une erreur de méthode inconnue. Pour une raison quelconque, il ne reconnaît pas ce qui a été ajouté, aucune pensée?
Erreur fatale: appel à la méthode non définie MAGE_CATALOG_MODEL_RESOURCE_PRODUCT_COLLECTION :: addCategorie sfilter () .... code>
Mage / Catalogue / Modèle / Ressource / EAV / MYSQL4 / Produit / Collection.ph P Code> Ne semble pas être chargé du tout
Avez-vous réellement étendu mage / catalogue / modèle / ressource / evev / mysql4 / produit / collection?
Oui, en utilisant le mage / catalogue presque vide / modèle / ressource / evev / mysql4 / produit / collection.ph P comme point de départ
J'ai fini par trouver une solution alternative en filtrant sur attribute_set_id code> à la place. Je vais marquer cela correct car il semble avoir travaillé pour certains dans le forum.
Je cherche à la mettre en œuvre afin que je puisse avoir filtrer par plusieurs catégories sur la page de la catégorie. Donc, je suis sur le fabricant> la page manufname, puis je filtre par une autre catégorie par exemple. Type> Widgets mais je ne suis pas clair lorsque la collection de produits pour les pages de catégorie est construite. Ne suppose pas que vous avez une idée? Tia.
@Dangvy, je pense que vous devriez poster cela comme une question, car il est légèrement différent et nécessitera une solution différente.
Assurez-vous d'effacer le cache Magento après tous ces types de travail, de sorte qu'il chargera correctement le nouveau code.
Voici une méthode qui ne nécessite pas de modification au noyau.
Il est pris de Cet article avec l'ajout de la clause "Groupe" pour gérer la duplicate Records de produits.
La jointure fonctionne mais le filtrage n'est pas. Rien n'est ajouté au où la clause code>.
J'ai également essayé cette solution et avons couru dans le même problème que @buttlebutkus ... Je vois que la jointure est ajoutée à la requête générée, mais pas de condition. Nous utilisons Magento Ee 1.12 (AKA CE 1.7).
J'ai traversé le code et cette solution fonctionnerait lorsque le catalogue plat de Magento est désactivé. Lorsque le catalogue plat est activé, les éléments suivants se produisent. La méthode AddattributeToFilter reconnaît que le champ Catégorie_ID ne figure pas dans la liste Sélectionner et appelle Addattributetoselect pour l'ajouter. La méthode Addattributetoselect échoue alors car Catégorie_id n'est pas un attribut de produit et aucun filtre n'est ajouté à la collection.
Merci d'avoir expliqué la clause de groupe, je cherchais une solution similaire mais je n'ai pas compris comment cela a fonctionné. Non, je fais!
@Jimohalloran j'ai vécu le contraire exact. Cela ne fonctionne que si le catalogue plat est activé.
Si vous souhaitez filtrer sur plusieurs catégories, utiliser et (un produit doit donc être dans Catégorie A, B et C pour apparaître, vous devez avoir plusieurs jointures:
$products = Mage::getModel('catalog/product')->getCollection() ->joinField('category_id_1', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left') ->joinField('category_id_2', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left') ->addAttributeToFilter('category_id_1', array('eq' => 358)) ->addAttributeToFilter('category_id_2', array('eq' => 252)) // etc... ;
La join interne codée dur ici reproduit ceci: p>
Collection $-> SETVISIBILIBILIBILIBLE (MAGE :: GETINGELLETON ('Catalogue / Productown') -> GetVissibleCatalogides ()); P> blockQuote>
sans 'cat_index.category_id = 2' p> li>
$category = Mage::getModel('catalog/category')->load(100); $allChildsIds = $category->getAllChildren($category); $visibility = Mage::getModel('catalog/product_visibility'); $collection = Mage::getResourceModel('catalog/product_collection'); $collection = $this->_addProductAttributesAndPrices($collection) ->addStoreFilter() ->setFlag('do_not_use_category_id', true) ->setFlag('disable_root_category_filter', true) ->addAttributeToSort('created_at', 'desc'); $whereCategoryCondition = $collection->getConnection() ->quoteInto('cat_index.category_id IN(?) ', $allChildsIds); $collection->getSelect()->where($whereCategoryCondition); $conditions = array(); $conditions[] = "cat_index.product_id = e.entity_id"; $conditions[] = $collection->getConnection() ->quoteInto('cat_index.store_id = ? ', Mage::app()->getStore()->getStoreId()); $conditions[] = $collection->getConnection() ->quoteInto('cat_index.visibility IN(?) ', $visibility->getVisibleInCatalogIds()); $collection->getSelect()->join( array('cat_index' => $collection->getTable('catalog/category_product_index')), join(' AND ', $conditions), array() ); $collection ->setPageSize(3) ->setCurPage(1); $collection->load();
Vous pouvez supprimer la condition du type de produit, c'est-à-dire type_id em> ou modifiez-le sous exigence. p> p>
J'ai réussi à résoudre ce problème (après beaucoup d'essais et d'erreurs) avec le code suivant: espère que cela aide quelqu'un;) p> p>
Référence: https: // www.fmeextensions.com/blog/get-product-collection-by-category-id-magento-2/
Malheureusement, il n'y a pas de moyen facile de le faire.