我有一个Magento网站,其中包含大量目录(10,000种产品)和一个相当深的类别树.
所有产品类别均来自顶级"所有产品"类别.
所有产品都有"品牌"的下拉属性.
我想要做的是允许访问者从类别树的顶部开始,并在选择或不选择品牌的情况下向下浏览"所有产品"树.问题是我们需要在每个级别显示下一级子类别,如果品牌不适用,我不想显示空白类别.
例如,如果树看起来像这样,而且一个在"螺丝刀页面"上,我们希望类型和长度类别都可见.
通过创建类别集合,我可以做到这一点而不用担心品牌过滤器:
$_category = $this->getCurrentCategory();
$current_level = $_category->getLevel();
$collection = $_category->getCollection();
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('parent_id')
->addAttributeToFilter('is_active', 1)
->addAttributeToFilter('level',array('in'=>array($current_level+1,$current_level+2)))
->setOrder('position','ASC')
->load();
Run Code Online (Sandbox Code Playgroud)
根据我的研究,似乎无法通过产品属性直接过滤类别集合.
假设这是真的:实现这一目标的最佳方法是 什么?我已经想到并初步尝试了一些想法:
在此先感谢您的帮助.如果您需要澄清问题,请告诉我.
如果有人在路上有类似的问题,我通过使用上面的第二个要点来完成这个.
/* Get Current Filters by loading catalog/layer_view Block */
$layout = Mage::getSingleton('core/layout');
$block = $layout->createBlock('catalog/layer_view');
/* Get Current Category */
$_category = $this->getCurrentCategory();
$current_level = $_category->getLevel();
/* Get Layer Filter Category Model */
$category_filter = Mage::getModel('catalog/layer_filter_category');
/* Generate the collection based on the current category */
$categories = $_category->getCollection();
$categories->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('parent_id')
->addAttributeToSelect('thumbnail')
->addAttributeToFilter('is_active', 1)
->addAttributeToFilter('path', array('like'=>'%/'.$_category->getId().'/%'))
->addAttributeToFilter('level',array('in'=>array($current_level+1,$current_level+2)))
->setOrder('position','ASC')
->load();
/* Using current filters, add product counts to collection so we can hide categories with 0 products */
$category_filter->getLayer()->getProductCollection()
->addCountToCategories($categories);
Run Code Online (Sandbox Code Playgroud)
在此之后,它是循环收集并显示名称,类别的URL等的问题.
这可能不是绝对最好的方式 - 我当然欢迎其他解决方案.
| 归档时间: |
|
| 查看次数: |
7289 次 |
| 最近记录: |