J'ai ajouté un filtre dans la méthode _getProductCollection()
de la classe Mage_Catalog_Block_Product_List
comme suit.
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection->getSelect()->joinInner(
array('cpe' => 'catalog_product_entity'),
'e.entity_id = cpe.entity_id'
)
->where("cpe.type_id = 'simple'");
...
}
Le code ci-dessus fonctionne correctement à partir de la version 1.7 de Magento. Mais chaque fois que j'écris le code suivant, cela donne
Colonne introuvable: 1054 Colonne inconnue 'e.type_id' dans la clause 'where'
Erreur.
Le code (qui ne fonctionne pas).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Maintenant, les questions .
- Y aura-t-il un impact sur les performances si j'utilise le premier code de travail?
- existe-t-il un autre moyen de se déplacer pour avoir un filtre de produit approprié?
MISE À JOUR:
Chaque fois que j'applique le code suivant et utilise le rwd
thème, je ne reçois aucune erreur. Mais chaque fois que j'utilise un default
thème utilisateur , j'obtiens l'erreur ci-dessous,
Code
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Erreur
SQLSTATE [42S22]: Colonne introuvable: 1054 Colonne inconnue 'e.type_id' dans 'clause clause', la requête était: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, COUNT (*) AScount
FROMcatalog_product_index_price
ASe
INNER JOINcatalog_category_product_index
AScat_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 = '3' OERE (e
.type_id
IN ('simple') )) ET (e.website_id = '1') ET (e.customer_group_id = 0) AND (e.min_price IS NOT NULL) GROUP BY FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 COMMANDE PAR ÉTAGE ((ROND ((e.min_price) * 1, 2)) / 10) + 1 ASC
la source
Réponses:
Je pense que:
Devrait fonctionner, vous n'avez pas besoin d'ajouter
type_id
àselect
puisqu'est unecatalog_product_entity
colonne et il est récupéré par défaut. Je suggère toujours de consigner la requête finale afin d'avoir une meilleure idée de ce qui se passe:BTW: Le premier bloc de code n'a aucun sens puisque vous joignez la table principale (
catalog_product_entity
) à lui-même.la source