He agregado un filtro en Método _getProductCollection()
de la clase de la Mage_Catalog_Block_Product_List
siguiente manera.
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'");
...
}
El código anterior funciona bien a partir de la versión 1.7 de Magento. Pero cada vez que escribo el siguiente código, me da
Columna no encontrada: 1054 Columna desconocida 'e.type_id' en 'cláusula where'
error.
El código (que no funciona).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Ahora las preguntas .
- ¿Habrá algún impacto en el rendimiento si uso el primer código de trabajo?
- ¿Hay alguna otra forma de obtener un filtro de producto adecuado?
ACTUALIZAR:
Cada vez que aplico el siguiente código y uso el rwd
tema, no recibo ningún error. Pero cada vez que uso el default
tema, aparece el siguiente error,
Código
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Error
SQLSTATE [42S22]: columna no encontrada: 1054 Columna desconocida 'e.type_id' en 'cláusula where', la consulta fue: SELECCIONAR PISO ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, CONTAR (*)count
DESDEcatalog_product_index_price
COMOe
UNIRSE INTERNAcatalog_category_product_index
COMOcat_index
EN 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' WHERE (e
.type_id
IN ('simple' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price IS NOT NULL) GROUP BY FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ORDEN POR PISO ((REDONDO ((e.min_price) * 1, 2)) / 10) + 1 ASC
fuente
Respuestas:
Creo que:
En caso funciona, no es necesario añadir
type_id
queselect
ya es unacatalog_product_entity
columna y se recuperó de forma predeterminada. Siempre sugiero registrar la consulta final para tener una mejor idea de lo que sucede:Por cierto: el primer bloque de código no tiene ningún sentido ya que está uniendo la tabla principal (
catalog_product_entity
) a sí mismo.fuente