我有一个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。
答案 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;
}
}