Magento类别导航

时间:2013-01-04 17:41:25

标签: web-services magento web e-commerce magento-1.7

我有一个Magento网站,其中包含以下类别结构(CAPITALS字母为CATEGORIES,小写字母为产品):

ROOT CATEGORY
     APPARELS
          SHOP BY SIZE
               product1
               product2
               product3
          SHOP BY COLLECTION
               product4
               product5
          SHOP BY DESIGN
               product6
               product7
               product8
               product9

我想将我的导航菜单显示为SHOP BY SIZE,SHOP BY COLLECTION和SHOP BY DESIGN。我不希望导航以APPARELS级别开始。有没有办法做到这一点?

注意:根据Magento设计,ROOT CATEGORY无法在导航菜单中显示。导航菜单从第二级的类别开始,即在这种情况下为APPARELS。

2 个答案:

答案 0 :(得分:2)

看一下navigation.php,你可以改变核心功能,但是使用一个带重写的模块(永远不要直接改变核心文件!)。当我需要自定义导航功能时,我总是从那里开始。

http://freegento.com/doc/db/d56/_catalog_2_block_2_navigation_8php-source.html

编辑,尽管我经常使用这种方法,我建议尽可能避免重写,我认为在这种情况下它可能很难,因为我们正在谈论将lvl 2类别显示为主导航< / em>的

答案 1 :(得分:2)

如果你真的想要使用设计Root - &gt;服装 - &gt; Shop By *您可以通过单一覆盖和修改来实现此目的

config.xml - 这显然是一个非常简化的文件,你需要为文件提供一个帮助器重写。

<?xml version="1.0"?>
<config>
    <helpers>
        <catalog>
            <rewrite>
                <category>Namespace_Module_Helper_Catalog_Category</category>
            </rewrite>
        </catalog>
    </helpers>
</config>

Category.php 这假设您要使用站点根类别下的第一个子类别。在你的情况下,它将是“服饰”。此修改考虑了平面或非平面类别表的使用。还有其他选择ID的选项,一个是系统配置,其中类别列表作为源,因此您可以直接选择导航根类别。

此文件的关键是将父ID设置为您希望以导航为基础的“根类别”。同样,对于您的情况,父ID将设置为“服装”类别。

class Namespace_Module_Helper_Catalog_Category extends Mage_Catalog_Helper_Category {
    public function getStoreCategories($sorted=false, $asCollection=false, $toLoad=true)
    {
        $parent     = Mage::app()->getStore()->getRootCategoryId();
        $cacheKey   = sprintf('%d-%d-%d-%d', $parent, $sorted, $asCollection, $toLoad);
        if (isset($this->_storeCategories[$cacheKey])) {
            return $this->_storeCategories[$cacheKey];
        }

        /**
         * Check if parent node of the store still exists
         */
        $category = Mage::getModel('catalog/category');
        /* @var $category Mage_Catalog_Model_Category */
        if (!$category->checkId($parent)) {
            if ($asCollection) {
                return new Varien_Data_Collection();
            }
            return array();
        }

        /* Change ian on 1/4/13 at 11:16 AM - Description: Here we capture the id of first child for use as the 'root' */
        $category->load($parent);
        /** @var $collection Mage_Catalog_Model_Resource_Category_Collection */
        $collection = $category->getChildrenCategories();
        if (is_array($collection)) {
            $category = array_shift($collection); //get the first category in the array.  Unknown key.
            $parent = $category->getId();
        } else {
            $parent = $collection->getFirstItem()->getId();
        }

        $recursionLevel  = max(0, (int) Mage::app()->getStore()->getConfig('catalog/navigation/max_depth'));
        $storeCategories = $category->getCategories($parent, $recursionLevel, $sorted, $asCollection, $toLoad);

        $this->_storeCategories[$cacheKey] = $storeCategories;
        return $storeCategories;
    }
}