3

我有一个具有简单两级结构的类别,如下所示:

Category #1
- Subcategory
- Subcategory
- ...
Category #2
- Subcategory
- Subcategory
- ...

目前要按子类别过滤 - 您必须先选择顶级类别。

如何在分层导航过滤器中显示所有顶级类别的子类别?

注意:子类别应受其他选定属性过滤器的影响。

4

2 回答 2

2

在尝试使用 Magento 文件时,我找到了问题的答案。

  1. 复制

    app/code/ core / Mage /Catalog/Model/Layer/Filter/Category.php
    app/code/ local / Mage /Catalog/Model/Layer/Filter/Category.php

  2. 打开复制的文件。并替换_getItemsData为以下代码:

    /**
     * Get data array for building category filter items
     *
     * @return array
     */
    protected function _getItemsData()
    {
      $key = $this->getLayer()->getStateKey().'_SUBCATEGORIES';
      $data = $this->getLayer()->getAggregator()->getCacheData($key);
    
      if ($data === null) {
        // Get root category
        $root_category = Mage::getModel('catalog/category')->load(2);
    
        // Get main categories
        $data = array();
        $main_categories = $root_category->getChildrenCategories();
        foreach ($main_categories as $main_category) {
          if (!$main_category->getIsActive()) continue; // Ommit inactive
          // Get sub categories to list
          $sub_categories = $main_category->getChildrenCategories();
    
          // Add count to subcategories
          $this->getLayer()->getProductCollection()
            ->addCountToCategories($sub_categories);
    
          foreach ($sub_categories as $sub_category) {
            // Ommit inactive and zero product count sub categories
            if ($sub_category->getIsActive() || !$sub_category->getProductCount()) continue;
    
            // Output subcategories
            $data[] = array(
              'label' => Mage::helper('core')->htmlEscape($sub_category->getName()),
              'value' => $sub_category->getId(),
              'count' => $sub_category->getProductCount(),
              'parent' => $main_category->getName(), // Store parent name to group in template
            );
          }
        }
    
        $tags = $this->getLayer()->getStateTags();
        $this->getLayer()->getAggregator()->saveCacheData($data, $key, $tags);
      }
      return $data;
    }
    

您可能有兴趣重写一些其他函数,例如getResetValue等。我必须重写模板以按主要类别对子类别进行分组。

结果(抱歉不能直接发布图片):

之前:http: //i.stack.imgur.com/skZpi.png

之后:http: //i.stack.imgur.com/QxPhq.png

于 2014-05-19T10:50:26.237 回答
0

您可以使用以下代码在侧边栏或任何位置显示当前类别的所有子类别

<?php $_helper = Mage::helper('catalog/category') ?>
<?php $_categories = $_helper->getStoreCategories() ?>
<?php $currentCategory = Mage::registry('current_category') ?>
<?php if (count($_categories) > 0): ?>
    <ul>
        <?php foreach($_categories as $_category): ?>
            <li>
                <a href="<?php echo $_helper->getCategoryUrl($_category) ?>">
                    <?php echo $_category->getName() ?>
                </a>
                <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
                <?php $_subcategories = $_category->getChildrenCategories() ?>
                <?php if (count($_subcategories) > 0): ?>
                    <ul>
                        <?php foreach($_subcategories as $_subcategory): ?>
                            <li>
                                <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
                                    <?php echo $_subcategory->getName() ?>
                                </a>
                            </li>
                        <?php endforeach; ?>
                    </ul>
                <?php endif; ?>
            </li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>
于 2014-05-14T12:47:02.070 回答