php – 按类别对产品进行排序(在父类别视图中)
发布时间:2020-12-13 13:18:15 所属栏目:PHP教程 来源:网络整理
导读:我有一个非常独特的问题. 我有一个商店,在这样的设置中有多个类别 Collection …. Shorts (products: small 16 – RED and small 20 – BLUE) …. Dress (products: blue: 16,Green 19) 如果我在商店打开收藏品,我会收到这样的商品 Blue 16 Green 19 small 1
我有一个非常独特的问题.
我有一个商店,在这样的设置中有多个类别
如果我在商店打开收藏品,我会收到这样的商品
我希望我的输出是这样的:
我怎样才能得到这个结果?对不起,我没有提供任何代码,因为我不知道我应该怎么做到这一点
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'); 这只是示例按子类别快速对产品集合进行排序的示例,当然您可以动态添加工具栏中的选项和排序集合 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |