Magento - 在页面左边显示三层分类

本文介绍如何在Magento中实现自定义的垂直分类导航菜单,包括编辑布局文件、创建模板文件及添加样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=#BF0000][b]步骤 I.编辑layout/catalog.xml[/b][/color]

在<default>标签下,加入如下代码
[code]
<reference name="left">
<block type="catalog/navigation" name="catalog.vertnav" template="catalog/navigation/vert_nav.phtml" />
</reference>
[/code]

步骤II. 在 template/catalog/navigation/目录下创建一个名为vert_nav.phtml 的文件,代码如下:
[code]
<div class="vertical-nav-container box base-mini">
<div id="vertical-nav">
<div class="head">
<h4><?php echo $this->__('Categories') ?></h4>
</div>
<ul id="nav_vert">
<?php foreach ($this->getStoreCategories() as $_categoryNode): ?>
<?php $open = $this->isCategoryActive($_categoryNode); ?>
<?php $hasChildren = $_categoryNode->hasChildren(); ?>
<li>
<a href="<?php echo $this->getCategoryUrl($_categoryNode); ?>"<?php if($open) { echo ' class="open"'; } ?><?php if($hasChildren) { echo ' class="potential"'; } ?> >
<?php if($hasChildren&&$open) { echo '- '; } elseif($hasChildren) { echo '+ '; }else{ echo ' '; }?><?php echo $_categoryNode->getName();?>
</a>
<?php if ($open && $hasChildren): ?>
<ul>
<?php foreach ($_categoryNode->getChildren() as $sonCategoryNode): ?>
<?php $subCat = Mage::getModel('catalog/category')->load($sonCategoryNode); ?>
<?php $open = $this->isCategoryActive($subCat); ?>
<?php $hasChildren = $subCat->hasChildren(); ?>
<li>
<a href="<?php echo $this->getCategoryUrl($subCat); ?>"<?php if($open) { echo ' class="subopen"'; } ?><?php if($hasChildren) { echo ' class="potential"'; } ?><?php if(!$hasChildren&&$open) { echo ' class="final"'; } ?> >
<?php if($hasChildren&&$open) { echo '- '; } elseif($hasChildren) { echo '+ '; }?><?php echo $subCat->getName(); ?>
</a>
<?php if ($open && $hasChildren): ?>
<ul>
<?php foreach ($sonCategoryNode->getChildren() as $grandsonCategoryNode): ?>
<?php $subsubCat = Mage::getModel('catalog/category')->load($grandsonCategoryNode); ?>
<?php $open = $this->isCategoryActive($subsubCat) ?>
<?php $hasChildren = $grandsonCategoryNode->hasChildren(); ?>
<li>
<a href="<?php echo $this->getCategoryUrl($subsubCat); ?>" <?php if($open) { echo ' class="final"'; } ?>>
<?php if($hasChildren) { echo '+ '; }?><?php echo $subsubCat->getName(); ?>
</a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach ?>
</ul>
</div>
</div>
[/code]
注意上面的代码$this->getStoreCategories()得到的不是Mage_Catalog_Model_Category类的实例,而是Varien_Data_Tree_Node类的实例

[color=#BF0000][b]步骤III. 在添加到 skin/[yourinterface]/[yourtheme]/css/menu.css 文件里增加下面的代码[/b][/color]
[code]
#vertical-nav ul {
list-style-type: none; /* get rid of the bullets */
padding:0; /* no padding */
margin:0; /* no margin for IE either */
}

#vertical-nav ul li {
margin: 0;
padding: 0;
display:block;
margin-top: 1px; /* lines */
}

#vertical-nav ul ul li a,#vertical-nav ul li{
background-color: #FFFFFF;
}

#vertical-nav ul li a {
display: block;
padding: 3px 3px 3px 23px;
margin:0;
text-decoration: none;
height:15px; /* hint for IE, alternatively remove whitespace from HTML */
background-color: #CCCCCC;
}

#vertical-nav ul li .open, #vertical-nav .activesubsub, #vertical-nav .subopen {
font-weight: bolder;
text-decoration: underline;
color:#000000
}

#vertical-nav .final{
background-color:#ECECEC;
}

#vertical-nav ul ul li a {
margin-left: 20px;
}

#vertical-nav ul ul ul li a {
margin-left: 40px; /* indent level 2 */
}

#vertical-nav a {
color:#999999;
}

#vertical-nav a:hover {
color:#666666;
}
#vertical-nav ul li ul li a {
border-top-width: thin;
border-bottom-width: thin;
border-top-style: dotted;
border-bottom-style: dotted;
border-top-color: #CCCCCC;
border-bottom-color: #CCCCCC;
margin-bottom:0px;
margin-top:0px;
}

#vertical-nav ul li ul li {
margin-bottom:0px;
margin-top:0px;
}
[/code]
进入一个layout有左列显示的网页(如任一产品分类页),你将可能看到如下的代码:
[img]/upload/attachment/47726/4e7ca69a-dfc2-3c58-b5ab-ddf9b0a3242b.png[/img]
注:如果点击"两岁到三岁"分类,将进入该分类页面,但是该分类显示将不被展开。因为本例只是最多显示三层分类结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值