我有一个非常独特的问题.
我有一个商店,在这样的设置中有多个类别
Collection
…. Shorts (products: small 16 – RED and small 20 – BLUE)
…. Dress (products: blue: 16,Green 19)
如果我在商店打开收藏品,我会收到这样的商品
Blue 16
Green 19
small 16 – RED
small 20 – BLUE
我希望我的输出是这样的:
small 16 – RED
small 20 – BLUE
Blue 16
Green 19
我怎样才能得到这个结果?对不起,我没有提供任何代码,因为我不知道我应该怎么做到这一点
1在catalog_block_product_list_collection事件上创建观察者
<events> <catalog_block_product_list_collection> <observers> <namespace_module> <class> namespace_module/observer</class> <method>collectionList</method> </namespace_module > </observers> </catalog_block_product_list_collection> </events>
2创建类Namespace_Module_Model_Observer
class Namespace_Module_Model_Observer { public function collectionList($observer) { /** @var Mage_Catalog_Model_Category $currentCategory */ $currentCategory = Mage::registry('current_category'); $children = Mage::getResourceModel('catalog/category')->getChildrenIds($currentCategory); if (!$children) { return $this; } $children = implode(',',$children); /** @var Mage_Catalog_Model_Resource_Product_Collection $collection */ $collection = $observer->getCollection(); $attr = $this->_getAttribute('name'); $collection->getSelect() ->join( array('c' => $this->_getResource()->getTableName('catalog_category_product')),"c.product_id = e.entity_id AND c.category_id IN ($children)",array('child_category_id' => 'category_id') ) ->join( array('ac' => $this->_getResource()->getTableName('catalog_category_entity_' . $attr['backend_type'])),"c.category_id = ac.entity_id AND ac.attribute_id = {$attr['attribute_id']}",array('child_category_name' => 'value') ) ->order('child_category_name DESC'); return $this; } protected function _getAttribute($attributeCode,$static = true,$entityTypeId = 3) { $readAdapter = $this->_getReadAdapter(); $select = $readAdapter->select() ->from($this->_getResource()->getTableName('eav/attribute')) ->reset(Zend_Db_Select::COLUMNS) ->columns(array('attribute_id','backend_type')) ->where('entity_type_id = ?',$entityTypeId) ->where('attribute_code = ?',$attributeCode) ->limit(1); if (!$static) { $select->where('backend_type != ?','static'); } $entityId = $readAdapter->query($select)->fetch(); return $entityId; } protected function _getResource() { return Mage::getSingleton('core/resource'); } protected function _getReadAdapter() { return $this->_getResource()->getConnection('core_read'); } }
这里我们按子类别名称设置集合排序,您可以将其更改为类别ID或添加到集合任何类别属性并按此属性排序
->order('child_category_name DESC');