Dodałem jeden filtr do metody _getProductCollection()
klasy Mage_Catalog_Block_Product_List
w następujący sposób.
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'");
...
}
Powyższy kod działa poprawnie od wersji 1.7 Magento. Ale ilekroć piszę następujący kod, daje
Nie znaleziono kolumny: 1054 Nieznana kolumna „e.type_id” w „klauzula gdzie”
błąd.
Kod (który nie działa).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Teraz pytania .
- Czy jeśli użyję pierwszego działającego kodu, będzie to miało wpływ na wydajność?
- czy jest jakiś inny sposób na obejście odpowiedniego filtra produktu?
AKTUALIZACJA:
Ilekroć zastosuję następujący kod i użyję rwd
motywu, nie pojawia się żaden błąd. Ale gdy używam default
motywu użytkownika , pojawia się następujący błąd,
Kod
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Błąd
SQLSTATE [42S22]: Nie znaleziono kolumny: 1054 Nieznana kolumna „e.type_id” w „klauzula gdzie”, zapytanie brzmiało: SELECT FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, COUNT (*) jakocount
ODcatalog_product_index_price
ASe
INNER Dołączcatalog_category_product_index
COcat_index
ON cat_index.product_id = e.entity_id I cat_index.store_id = 1 cat_index.visibility IN (2, 4) i cat_index.category_id = '3' GDZIE (e
.type_id
W ( 'proste' )) 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 ZAMÓWIENIE WEDŁUG PODŁOGI ((OKRĄGŁY ((cena emin.) * 1, 2)) / 10) + 1 ASC
źródło
Odpowiedzi:
Myślę, że:
Powinno działać, nie musisz dodawać
type_id
do,select
ponieważ jest tocatalog_product_entity
kolumna i jest ona domyślnie pobierana. Zawsze sugeruję, aby zapisać ostatnie zapytanie, aby uzyskać najlepszy obraz tego, co się dzieje:BTW: Pierwszy blok kodu nie ma żadnego sensu, ponieważ dołączasz do głównej tabeli (
catalog_product_entity
) do siebie.źródło