使用 channel 标签的 currentstyle 属性(最推荐、最简单)
这是 DedeCMS 官方提供的最标准、最简单的方法,专门用于实现导航栏的当前栏目高亮。

适用场景:网站主导航、栏目列表等。
实现步骤:
-
找到模板文件: 登录您的 DedeCMS 后台,进入【模板】->【默认模板管理】,找到您网站首页模板文件,通常是
index.htm。 -
修改栏目调用代码: 在您的模板文件中,找到调用栏目的
{dede:channel}标签,它可能看起来像这样:
(图片来源网络,侵删)<ul class="nav"> <li><a href="{dede:global.cfg_basehost/}/">首页</a></li> <li><a href='{dede:channel type='top' row='8'}'[field:typelink/]{/dede:channel}></li> </ul> -
添加
currentstyle属性: 修改{dede:channel}标签,为其添加currentstyle属性,这个属性定义了当栏目是当前栏目时,链接的显示样式。<ul class="nav"> <li><a href="{dede:global.cfg_basehost/}/">首页</a></li> <!-- currentstyle 定义了当前栏目项的HTML代码 [field:typelink/] 会被替换为当前栏目的链接 [field:typename/] 会被替换为当前栏目的名称 --> <li> {dede:channel type='top' row='8' currentstyle="<a href='~typelink~' class='current'>~typename~</a>"} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel} </li> </ul>
代码解析:
type='top':表示只调用顶级栏目。row='8':表示调用8个栏目。currentstyle="...":这是核心。- 当访问者所在的页面正好是这个栏目时,DedeCMS 会执行
currentstyle里的代码。 ~typelink~:会被替换为当前栏目的完整链接。~typename~:会被替换为当前栏目的名称。- 我们在这里给当前链接添加了一个
class="current",方便我们用 CSS 来定义高亮样式。
- 当访问者所在的页面正好是这个栏目时,DedeCMS 会执行
-
添加 CSS 样式: 在您的 CSS 文件(
style.css)中,为.current类添加样式,使其高亮显示。/* 导航栏普通链接样式 */ .nav a { display: block; padding: 10px 15px; color: #333; text-decoration: none; } /* 导航栏当前栏目高亮样式 */ .nav a.current { background-color: #ff6600; /* 背景色 */ color: #ffffff; /* 文字颜色 */ font-weight: bold; /* 文字加粗 */ }
最终效果:
当用户访问“关于我们”栏目时,导航栏中的“关于我们”链接会自动应用 class="current",显示为我们定义的橙色背景和白色文字。

使用 typeid 属性手动判断(更灵活,适用于子栏目)
currentstyle 方法非常方便,但在某些复杂场景下(比如面包屑导航、文章页面的位置判断),你可能需要更灵活的控制,这时可以使用 typeid 和 if 判断。
适用场景:面包屑导航、文章详情页的栏目高亮等。
实现步骤:
-
在模板中使用
typeid: 在需要判断的栏目位置,使用{dede:field name='typeid'}获取当前栏目的 ID。 -
结合
if标签进行判断: 使用 DedeCMS 的if标签来判断当前栏目 ID 是否等于某个特定值。示例:面包屑导航
<div class="breadcrumb"> <a href="{dede:global.cfg_basehost/}/">首页</a> {dede:field name='typeid' runphp='yes'} $id = @me; // 获取当前栏目的顶级栏目ID $topid = getTopid($id); $typename = ''; if($topid > 0) { $row = GetOneType($topid); $typename = $row['typename']; @me = ' > <a href="'.GetOneTypeUrl($topid).'">'.$typename.'</a>'; } else { // 如果本身就是顶级栏目 $row = GetOneType($id); $typename = $row['typename']; @me = ' > <a href="'.GetOneTypeUrl($id).'">'.$typename.'</a>'; } {/dede:field} {dede:field name='typename'/} </div>更简单的
if判断示例:<ul> {dede:channel type='top' row='8'} <li> <a href="[field:typelink/]" {if dede:field name='typeid' == 'id'}class="current"{/if}> [field:typename/] </a> </li> {/dede:channel} </ul>注意:上面的
if判断在模板中直接写typeid == 'id'可能会失效,更推荐使用runphp的方式,或者使用currentstyle,这里只是展示if的用法思路。
针对首页高亮
首页的高亮比较特殊,因为它没有 typeid,通常我们通过判断当前页面的模板名称或路径来实现。
实现步骤:
-
修改首页导航代码:
<ul class="nav"> <!-- 首页链接 --> <li> <a href="{dede:global.cfg_basehost/}/" {dede:global name='typename' runphp='yes'} @me = (empty(@me) || @me == "首页") ? 'class="current"' : ''; {/dede:global}> 首页 </a> </li> <!-- 栏目链接 --> {dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='current'>~typename~</a></li>"} <li><a href="[field:typelink/]">[field:typename/]</a></li> {/dede:channel} </ul>
代码解析:
{dede:global name='typename'} 在首页模板中会返回空值或“首页”,我们使用 runphp 来判断,@me (即 typename 的值) 为空,就给 a 标签加上 class="current"。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
currentstyle |
最简单、最标准、代码量少 | 灵活性相对较低 | 网站主导航、一级栏目列表(首选方法) |
typeid + if |
非常灵活,可处理复杂逻辑 | 代码稍复杂,需要一定的 PHP 基础 | 面包屑导航、文章页面的位置判断、需要精确控制高亮样式时 |
| 首页判断 | 解决了首页的特殊性 | 逻辑相对独立 | 首页导航项的高亮 |
对于绝大多数网站,强烈推荐使用方法一 (currentstyle),因为它最简单、最稳定,且是 DedeCMS 设计之初就考虑好的功能,只有在 currentstyle 无法满足的复杂需求下,再考虑使用方法二。
