still display attributes in layer
piaoling 2012-07-31 16:04:43
app/code/core/Mage/Catalog/Model/Layer/Filter/Attribute.php public function apply(Zend_Controller_Request_Abstract $request, $filterBlock) { $filter = $request->getParam($this->_requestVar); if (is_array($filter)) { return $this; } $text = $this->_getOptionText($filter); if ($filter && $text) { $this->_getResource()->applyFilterToCollection($this, $filter); $this->getLayer()->getState()->addFilter($this->_createItem($text, $filter)); //注释掉下面这行 // $this->_items = array(); } return $this; } app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Layer/Filter/Attribute.php /** * Apply attribute filter to product collection * * @param Mage_Catalog_Model_Layer_Filter_Attribute $filter * @param int $value * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Layer_Filter_Attribute */ public function applyFilterToCollection($filter, $value) { $collection = $filter->getLayer()->getProductCollection(); $attribute = $filter->getAttributeModel(); $connection = $this->_getReadAdapter(); //将$tableAlias = $attribute->getAttributeCode() . '_idx';改为 $tableAlias = $attribute->getAttributeCode() . '_fidx'; $conditions = array( "{$tableAlias}.entity_id = e.entity_id", $connection->quoteInto("{$tableAlias}.attribute_id = ?", $attribute->getAttributeId()), $connection->quoteInto("{$tableAlias}.store_id = ?", $collection->getStoreId()), $connection->quoteInto("{$tableAlias}.value = ?", $value) ); $collection->getSelect()->join( array($tableAlias => $this->getMainTable()), join(' AND ', $conditions), array() ); return $this; }
效果图:
发表评论(评论将通过邮件发给作者):