- 静态导航菜单:菜单项是固定的,直接链接到指定的栏目页面。
- 动态下拉菜单:菜单项是从数据库中动态获取的,产品分类”下有多个子分类,这些子分类会自动显示在下拉菜单中。
这两种情况的实现方法略有不同,我会分别提供详细的步骤和代码。

静态导航菜单(最常见)
这种情况下,你只需要修改网站顶部的导航栏模板文件,将 <a> 标签的 href 属性指向你想要的链接即可。
操作步骤:
-
找到模板文件 DedeCMS 的模板文件通常位于
/templets/目录下,导航栏的模板文件可能是default.htm、head.htm或者你自定义的模板文件,最常见的是在网站首页模板(通常是index.htm)或者一个被所有页面引用的公共头部文件(如head.htm)中。你需要登录 DedeCMS 后台,进入【模板】->【模板管理】,找到你当前使用的模板,然后点击对应的模板文件进行编辑。
-
定位导航菜单代码 在模板文件中,找到导航菜单的 HTML 代码,它通常是一个
<ul>列表结构,里面包含多个<li>和<a>你可能会看到类似这样的代码:
(图片来源网络,侵删)<div id="nav"> <ul> <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li> <li><a href='about.html'>关于我们</a></li> <li><a href='product.html'>产品中心</a></li> <li><a href='contact.html'>联系我们</a></li> </ul> </div> -
修改链接地址 你只需要修改你想要添加下拉菜单的
<a>标签,我们想给“产品中心”添加一个下拉菜单。关键点:为了实现下拉效果,我们通常需要用
<div>或<ul>包裹下拉内容,并设置 CSS 来控制其显示和隐藏。修改后的 HTML 结构示例:
<div id="nav"> <ul> <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li> <li><a href='about.html'>关于我们</a></li> <!-- 修改产品中心部分 --> <li class="dropdown"> <a href="product.html">产品中心</a> <!-- 下拉菜单内容 --> <div class="dropdown-content"> <a href="product/cat1.html">分类一</a> <a href="product/cat2.html">分类二</a> <a href="product/cat3.html">分类三</a> </div> </li> <li><a href='contact.html'>联系我们</a></li> </ul> </div>- 我们给包含下拉菜单的
<li>添加了一个class="dropdown",方便用 CSS 选中它。 - 在
<a>标签后面,添加了一个class="dropdown-content"的<div>,里面放置了下拉链接。
- 我们给包含下拉菜单的
-
添加 CSS 样式 你需要添加 CSS 代码来让下拉菜单正常工作,这段代码可以放在模板文件的
<head>标签内,或者链接一个外部的 CSS 文件中。
(图片来源网络,侵删)/* 下拉菜单容器 */ #nav ul li.dropdown { position: relative; /* 关键:为下拉菜单定位提供参考 */ } /* 默认隐藏下拉菜单内容 */ .dropdown-content { display: none; position: absolute; /* 关键:相对于父元素 li.dropdown 定位 */ background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1; /* 确保下拉菜单显示在其他内容之上 */ } /* 鼠标悬停在父级 li 上时,显示下拉菜单 */ #nav ul li.dropdown:hover .dropdown-content { display: block; } /* 下拉菜单链接样式 */ .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; text-align: left; } /* 鼠标悬停在下拉链接上的样式 */ .dropdown-content a:hover { background-color: #f1f1f1; }
完成以上步骤后,当你的鼠标移动到“产品中心”上时,就会显示下拉菜单,点击菜单项即可跳转到相应页面。
动态下拉菜单(从数据库获取)
这种情况更常见,产品分类”的子分类是后台动态添加的,我们需要在模板中调用出来。
操作步骤:
-
找到模板文件 和场景一一样,找到包含导航栏的模板文件(如
head.htm或index.htm)。 -
使用 DedeCMS 标签调用栏目 DedeCMS 提供了强大的标签系统来调用数据,要实现动态下拉菜单,我们需要使用
{dede:channel}标签,并指定其typeid为父级栏目的 ID。假设:
- 你的“产品中心”栏目在后台的 ID 是
2。 - 它的子分类(如“手机”、“电脑”)是这个栏目的子栏目。
- 你的“产品中心”栏目在后台的 ID 是
-
修改模板代码 将静态的 HTML 结构替换为 DedeCMS 的标签调用。
修改后的模板代码示例:
<div id="nav"> <ul> <li><a href='{dede:global.cfg_cmspath/}/'>首页</a></li> <li><a href='about.html'>关于我们</a></li> <!-- 动态调用产品中心及其子分类 --> <li class="dropdown"> <!-- 产品中心链接,指向其本身 --> <a href="{dede:field name='typeid' runphp='yes'} @me = GetTopTypename(@me); {/dede:field}"> {dede:field name='typename'/} </a> <!-- 注意:上面的链接方式是假设你在栏目页模板中。 如果是在首页等非栏目页,直接写死链接更简单: <a href='/product/'>产品中心</a> --> <!-- 下拉菜单内容,调用父栏目ID为2的所有子栏目 --> <div class="dropdown-content"> {dede:channel type='son' typeid='2'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel} </div> </li> <li><a href='contact.html'>联系我们</a></li> </ul> </div>代码解释:
{dede:channel type='son' typeid='2'}:这是核心标签。typeid='2':指定父栏目的 ID。请务必将其替换成你自己的“产品中心”栏目的 ID。type='son':表示调用该栏目下的所有直接子栏目。
[field:typelink/]:输出子栏目的链接地址。[field:typename/]:输出子栏目的名称。
-
添加 CSS 样式 CSS 样式和场景一完全一样,直接复制即可,因为生成的 HTML 结构和场景一是一样的,只是内容是动态生成的。
/* 这段 CSS 和场景一完全相同 */
/* 下拉菜单容器 */
#nav ul li.dropdown {
position: relative;
}
/* 默认隐藏下拉菜单内容 */
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 1;
}
/* 鼠标悬停在父级 li 上时,显示下拉菜单 */
#nav ul li.dropdown:hover .dropdown-content {
display: block;
}
/* 下拉菜单链接样式 */
.dropdown-content a {
color: black;
padding: 12px 16px;
text-decoration: none;
display: block;
text-align: left;
}
/* 鼠标悬停在下拉链接上的样式 */
.dropdown-content a:hover {
background-color: #f1f1f1;
}
总结与注意事项
-
核心区别:
- 静态:直接修改 HTML 里的
href。 - 动态:使用
{dede:channel}标签从数据库获取数据并生成链接。
- 静态:直接修改 HTML 里的
-
关键点:
- 模板文件:一定要修改正确的模板文件。
- 栏目 ID:动态调用时,
typeid必须正确,这是最容易出错的地方,你可以在后台【栏目管理】中查看每个栏目的 ID。 - CSS 定位:
position: relative(父级) 和position: absolute(下拉内容) 是实现下拉菜单定位的关键。
-
兼容性:
- 这种纯 CSS 的下拉菜单在所有现代浏览器中都能很好地工作。
- 如果需要支持非常旧的浏览器(如 IE8),可能需要添加一些额外的 CSS hack 或使用 JavaScript 来增强兼容性。
-
JavaScript 方案: 有时为了更复杂的效果(如点击展开),或者为了更好的浏览器兼容性,会使用 JavaScript (如 jQuery),原理和 CSS 类似,只是用 JS 来控制
display: block和display: none,但对于简单的悬停效果,CSS 是最简单、最高效的方案。
希望这个详细的教程能帮助你成功实现 DedeCMS 的下拉菜单跳转功能!
