Eu adicionei um filtro no método _getProductCollection()
da classe da Mage_Catalog_Block_Product_List
seguinte maneira.
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'");
...
}
O código acima está funcionando bem a partir da versão 1.7 do Magento. Mas sempre que eu escrevo o código a seguir, ele fornece
Coluna não encontrada: 1054 Coluna desconhecida 'e.type_id' na 'cláusula where'
erro.
O código (que não está funcionando).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Agora as perguntas .
- Haverá algum impacto no desempenho se eu usar o primeiro código de trabalho?
- existe alguma outra maneira de obter um filtro de produto adequado?
ATUALIZAR:
Sempre que aplico o código a seguir e uso o rwd
tema, não estou recebendo nenhum erro. Mas sempre que eu uso o default
tema, recebo o erro abaixo,
Código
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Erro
SQLSTATE [42S22]: Coluna não encontrada: 1054 Coluna desconhecida 'e.type_id' na cláusula 'where', a consulta foi: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, CONTAGEM (*) Acount
PARTIRcatalog_product_index_price
DOe
INTERIOR ASSINATURAcatalog_category_product_index
COMOcat_index
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' ONDE (e
.type_id
IN ('simples' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) AND (e.min_price NÃO É NULL) GRUPO POR ANDAR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 PEDIDO POR ANDAR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ASC
fonte
Respostas:
Eu penso isso:
Deve funcionar, você não precisa adicionar
type_id
umaselect
vez que é umacatalog_product_entity
coluna e ela é recuperada por padrão. Eu sempre sugiro registrar a consulta final para ter uma melhor idéia do que está acontecendo:BTW: O primeiro bloco de código não faz sentido desde que você está ingressando na tabela principal (
catalog_product_entity
) .fonte