J'ai ce code pour sélectionner les meilleurs produits de vente à partir de Magento:
$productCollection = Mage::getResourceModel('reports/product_collection') ->addOrderedQty($startTime, $currentTime) ->addAttributeToSelect('*') ->setStoreId($storeId) ->addStoreFilter($storeId) ->setOrder('ordered_qty', 'desc') ->setPageSize($this->limit()); }
6 Réponses :
Créer une nouvelle classe de modèle ('myCatalog / produit') CODE> qui étend la classe de produit d'origine mais le code dur qu'il utilise le modèle de ressource EAV et la collecte de ressources EAV, puis utilisez ce modèle dans votre Code de requête. P>
J'ai eu du mal aux dernières heures pour essayer de comprendre pourquoi mon module fonctionne parfaitement sur une installation et non sur une autre. Il a créé une collection de produits et appliqua éventuellement un filtre de catégorie. Problème est, mage_catalog_model_resource_product addCategoryFilter () s'appuie sur $ Catégorie-> getid (getid () .... Identifiant n'est pas présent dans un modèle de catégorie plate, dont l'idée brillante ... Je vais essayer ce qui précède et voir ce que je peux venir avec. Merci comme toujours Alan.
J'exécuterais mon code à partir d'un fichier PHP autonome seul, dès que j'ai déplacé mon code dans un module d'administrateur, il s'est arrêté à l'aide de l'appartement_file et est retourné à EAV.
Si vous regardez: Mage_Catalog_model_resource_év_mysql4_product_collection p>
Il y a une méthode: p> Vous pouvez modifier cela pour ajouter une condition supplémentaire qui retourne faux en fonction de vos propres critères. P> BTW, la collection de rapports mentionnée dans le premier message par BLAZO est une extension de cette collection. p> p>
Ceci est un ancien poste mais je pensais qu'un point important n'a pas été indiqué. 1. Une fois que vous avez défini le catalogue plat sur vous devez exécuter indexeur via Cron ou via admin / shell afin que les tables de catalogue plat soient remplies. P>
Pour développer la réponse d'Alan:
$category = Mage::getModel('namespace_module/category')->load($id)
J'ai trouvé que la solution la plus simple consistait à éteindre les tables plats, puis à obtenir la requête SQL que Magento s'exécute à l'aide du paramètre -> Charger (true)
$resource = Mage::getSingleton('core/resource'); $readConnection = $resource->getConnection('core_read'); $query = "SELECT `e`.*, `at_ig_unifeed_ids`.`value` AS `ig_unifeed_ids` FROM `catalog_category_entity` AS `e` INNER JOIN `catalog_category_entity_varchar` AS `at_ig_unifeed_ids` ON (`at_ig_unifeed_ids`.`entity_id` = `e`.`entity_id`) AND (`at_ig_unifeed_ids`.`attribute_id` = '139') AND (`at_ig_unifeed_ids`.`store_id` = 0) WHERE (`e`.`entity_type_id` = '3') AND ((at_ig_unifeed_ids.value LIKE '%:".$this->getId().":%'))"; $collection = $readConnection->fetchAll($query);
Cela avait déjà 2 bowvotes quand je l'ai trouvé, mais aucune explication de pourquoi. Je suppose que c'est parce que cela va casser lorsque vous exécutez le code dans un autre magasin. Il ne pouvait fonctionner que si cet autre magasin avait exactement le même identifiant d'attribut et n'utilisait pas de préfixes de noms de table. Même si vous deviez résoudre ces problèmes, cette solution semble toujours très fragile et hacky au mieux. Là encore, beaucoup de telles solutions de hacky réussissent à trouver leur chemin dans le code de production. Utilisez votre propre sagesse pour décider si c'est juste pour votre cas d'utilisation.
J'ai utiliser avant p> et il commence à extraire des données à partir du système basé sur EAV. p> p >
Cela a fonctionné pour moi, j'ai fait $ Sthetid = Mage :: App () -> GetStore () -> GetStoreID (); AVANT, je pourrais ensuite revenir à mon magasin préféré avant.