Magento - liste.phtml filtrage de la collection de produits de ne pas donner la pagination est correcte
Je suis en train de filtrer la liste.phtml pour répondre à mes besoins, qui est à seulement montrer des produits à base d'une valeur de l'attribut. Le code d'origine pour charger le produit de la collecte est:
$_productCollection=$this->getLoadedProductCollection();
$_helper = $this->helper('catalog/output');
Pour faire le filtrage, j'ai le code:
$_productCollection=$this->getLoadedProductCollection();
$cat_id = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addAttributeToFilter('language', array('eq' => array('English')))
->addAttributeToSelect('*')
->addCategoryFilter(Mage::getModel('catalog/category')->load($cat_id));
$_helper = $this->helper('catalog/output');
Cela fonctionne toutefois, la pagination et les éléments nombre total (généré à partir de la barre d'outils.phtml et pager.phtml sont incorrectes. Par exemple, le produit original de la collection a la bonne pagination de 7 pages et 10 produits par page.
Cependant quand j'utilise le filtre ci-dessus de la pagination montre les mêmes 7 pages et tous les filtrée livre sur une page (il y a 18 livres en anglais, donc 7 pages du 18 livres qui sont dupliqués).
Svp quelqu'un peut m'aider dans la résolution de ce problème de pagination.
Grâce.
Le code SQL de la collection est comme suit:
SELECT `e`.*, `at_language`.`value` AS `language`, `cat_index`.`position`
AS `cat_index_position` FROM `catalog_product_entity`
AS `e` INNER JOIN `catalog_product_entity_varchar`
AS `at_language` ON (`at_language`.`entity_id` = `e`.`entity_id`)
AND (`at_language`.`attribute_id` = '1002')
AND (`at_language`.`store_id` = 0) INNER JOIN `catalog_category_product_index`
AS `cat_index` ON cat_index.product_id=e.entity_id AND cat_index.store_id=1
AND cat_index.visibility IN(2, 4) AND cat_index.category_id='38'
AND cat_index.is_parent=1 WHERE (at_language.value = 'English')
- pourriez-vous poster le SQL généré pour votre collection? Vous pouvez l'obtenir avec $_productCollection->getSelect()->__toString()
- J'ai édité la question afin de montrer le SQL qui est à la base de la collection de code dans votre réponse, Merci.
- voir le plus de ma réponse
Vous devez vous connecter pour publier un commentaire.
Ma conjecture est que vous obtenez de mal un compte de produit parce que la visibilité des produits filtre est manquant. Essayez de l'ajouter comme ceci:
plus:
la collection personnalisée que vous définissez à la
list.phtml
ne sera pas la même, le système utilise dans le paginator. Le paginator blocMage_Catalog_Block_Product_List_Toolbar
permettra d'obtenir l'original de la collection de produits de$this->_getProductCollection()
(voir ici), qui ne dispose pas de votre filtre.J'ai peur, un changement de la collection dans le fichier de modèle n'est pas assez. Vous pourriez avoir à remplacer la
Mage_Catalog_Block_Product_List
bloc, plus précisément, sa fonction_getProductCollection()
à mettre en œuvre les mesures de filtrage.plus 2
Une proposition de remplacement pour la fonction
Mage_Catalog_Block_Product_List::_getProductCollection
:Mage_Catalog_Block_Product_List::_getProductCollection
L'utiliser dans votre liste.phtml fichier: