Magento - addStoreFilter pas de travail?
Lors de l'obtention d'une collection de produits dans Magento, j'attendrais la StoreFilter de le faire, le filtre par la banque actuelle. Mais je ne peux pas le faire fonctionner.
Dire que j'ai 2 magasins de jeu:
Et les deux magasins ont une racine différente catégorie. Magasin principal est la valeur par défaut des données de l'échantillon, Store2 a juste un produit que j'ai ajouté. J'aurais pensé qu'en utilisant le magasin de filtre, seuls les produits relevant de la catégorie de base de la banque actuelle serait en place. Mais je suis tout le produit de l'affichage. Je suis en essais en plaçant les éléments suivants dans ma catégorie modèle de vue:
$store_id = Mage::app()->getStore()->getId();
$_testproductCollection = Mage::getResourceModel('reports/product_collection')
->setStoreId($storeId)
->addStoreFilter($store_id)
->addAttributeToSelect('*');
$_testproductCollection->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName());
};
Si je l'écho de l'ID de magasin, c'est de me donner le nombre exact. J'ai un seul produit en Magasin 2, alors pourquoi suis-je tout le produit de tous les magasins retourné? Je peux mettre tous les produits en Magasin Principal de ne pas afficher dans Store2, puis ajouter une visibilité filtre, mais cela prendrait une éternité.
Aussi, je viens de remarquer, si je reprends le magasin de produits ID, je reçois le courant ID, pas le magasin il est attribué à:
echo $_testproduct->getStoreId()
Ce qu'il se passe?
Mise à JOUR (8 avril 2011):
OK, donc j'ai essayé de rejoindre les champs de sorte que le store_id est inclus (comme suggéré ci-dessous), la section de code {{table}}.store_id = 1 est juste le réglage de tous les produits ont une store_id de 1. Comment puis-je obtenir le store_id associé avec le produit?
$_testproductCollection = Mage::getResourceModel('catalog/product_collection');
$_testproductCollection->joinField('store_id', 'catalog_category_product_index', 'store_id', 'product_id=entity_id', '{{table}}.store_id = 1', 'left');
$_testproductCollection->getSelect()->distinct(true);
$_testproductCollection->addAttributeToSelect('*')->load();
foreach($_testproductCollection as $_testproduct){
echo $this->htmlEscape($_testproduct->getName())."<br/>";
echo "STORE IS ".$_testproduct->getData('store_id')."<br/>";
};
Si je coche catalog_category_product_index table de ma db, le store_id sont correctes.
Version 1.4.2.0
Est-il une solution jusqu'à présent, d'avoir le même problème. J'ai absolument besoin de la productcollection de spécial storeview. J'ai un site web, 4 storeviews (2 langues de 2 magasins) qui divisez certaines catégories et certains pas. Im nouveau à magento donc je ne comprends pas la joinField() chose. Est-il un exemple ou une autre solution.
Voir ici - stackoverflow.com/questions/5078752/... - j'ai fini le filtrage par catégorie racine à la place.
Le filtrage par racine est très buggé, donc, retour à la présente maintenant, en essayant de savoir si ça va marcher...voir ci-dessus pour les mises à jour
OriginalL'auteur Marlon Creative | 2011-02-21
Vous devez vous connecter pour publier un commentaire.
$_testproductCollection
devrait ressembler à ceci$_testproductCollection = Mage::getResourceModel('reports/product_collection')->addAttributeToSelect('*')->addStoreFilter()
.Si Vous imprimez
SELECT
de cette collection, Vous verrez qu'il n'y a pas de n'importe quel magasin de la colonne, de sorteaddStoreFilter()
ne pouvez pas appliquer deWHERE
.Vous devez utiliser
joinField()
sur Votre collection et d'ajouterstore_id
colonne decatalog_product_entity_varchar
table.MODIFIER
Désolé de Vous faire attendre 😉
Cela devrait faire l'affaire, mais juste pour être sûr, veuillez vérifier si vous avez de bons produits 🙂
addStoreFilter
ne pas ajouter de vérifier pour la catégorie racine d'un magasin ou quelque chose comme ça, il ne les filtres non globales attributs d'un produit. Cela n'a d'effet que sur les produits qui ont été modifiés lors de l' "Choisir Magasin de Vue" case a été utilisé dans l'admin.store_id
n'est pas un attribut dans son propre droit, c'est seulement une propriété d'autres attributs.C'est pourquoi j'ai suggéré
joinField()
et le raccourcissement de la ressource de modèle de chargement d'appel.Je pensais alors que peut-être que le filtrage par catégorie racine était la voie à suivre, comme c'est assez bien accomplir la même chose, mais cela ne semble pas fonctionner soit - voir ici - stackoverflow.com/questions/5078752/...
Pourriez-vous peut-être donner un exemple de la façon de joindre les champs? J'ai trouvé quelques exemples en ligne, mais n'ont pas réussi à patcher quelque chose qui fonctionne!
Voir ma dernière mise à jour à la question initiale.
OriginalL'auteur xyz
Cela a fonctionné pour moi:
->setStoreId($storeId)
ne semble pas pour produire la bonne requête dans ce scénario.OriginalL'auteur lvillarino
OK, je pense que cela fonctionne, n'est-ce pas testé beaucoup mais semble avoir fait le tour. Vous devez d'abord obtenir votre magasins de la catégorie racine id, puis rejoindre certains domaines, de sorte que vous avez accès à des produits "id_categorie", puis filtrer à l'aide de:
OriginalL'auteur Marlon Creative
Je pense que
Vous n'avez pas besoin de faire toutes les jointures comme magento setStoreId() fonctionne.
Cela permettra d'obtenir un maximum de 20 produits de stocker l'id 1
OriginalL'auteur nikunj gandhi