Tôi đã thêm một bộ lọc trong Phương thức _getProductCollection()
của lớp Mage_Catalog_Block_Product_List
như sau.
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ạn mã trên đang hoạt động tốt kể từ Magento Phiên bản 1.7. Nhưng bất cứ khi nào tôi viết đoạn mã sau, nó sẽ cho
Không tìm thấy cột: 1054 Cột không xác định 'e.type_id' trong 'mệnh đề where'
lỗi.
Mã (không hoạt động).
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
Bây giờ là câu hỏi .
- Sẽ có bất kỳ tác động hiệu suất nếu tôi sử dụng mã làm việc đầu tiên?
- Có cách nào khác để có được một bộ lọc sản phẩm phù hợp không?
CẬP NHẬT:
Bất cứ khi nào tôi áp dụng mã sau đây và sử dụng rwd
chủ đề, tôi không nhận được bất kỳ lỗi nào. Nhưng bất cứ khi nào tôi sử dụng default
chủ đề, tôi nhận được lỗi dưới đây,
Mã
protected function _getProductCollection()
{
...
$this->_productCollection = $layer->getProductCollection();
$this->_productCollection
->addAttributeToSelect('type_id')
->addAttributeToFilter('type_id','simple');
...
}
lỗi
SQLSTATE [42S22]: Không tìm thấy cột: 1054 Cột không xác định 'e.type_id' trong 'mệnh đề where', truy vấn là: CHỌN FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 AS
range
, COUNT (*) AScount
TỪcatalog_product_index_price
ASe
INNER JOINcatalog_category_product_index
AScat_index
ON cat_index.product_id = e.entity_id VÀ cat_index.store_id = 1 AND cat_index.visibility IN (2, 4) VÀ cat_index.category_id = '3' WHERE (e
.type_id
IN ( 'đơn giản' )) AND (e.website_id = '1') AND (e.customer_group_id = 0) VÀ (e.min_price KHÔNG PHẢI LÀ NHÓM THEO FLOOR ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ĐẶT HÀNG B FLNG SÀN ((ROUND ((e.min_price) * 1, 2)) / 10) + 1 ASC