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 rwdchủ đề, 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 defaultchủ đề, 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 (*) AScountTỪcatalog_product_index_priceASeINNER JOINcatalog_category_product_indexAScat_indexON 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_idIN ( 'đơ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