核心概念
在DedeCMS的模板文件中,主导航是通过一个特定的全局变量来调用的,这个变量通常是 {dede:global.cfg_webname/} 用于显示网站名称,而栏目列表则通过 {dede:channel} 或 {dede:channelartlist} 标签来调用。

limit 参数就是这两个标签的内置属性,用于限制返回的记录数(即栏目数量)。
- 语法:
limit='起始ID,显示数量'或limit='显示数量' - 示例1:
limit='0,5'表示从第一个栏目开始,显示5个。 - 示例2:
limit='5'表示从第一个栏目开始,显示5个。(与示例1等价) - 示例3:
limit='5,10'表示从第6个栏目开始,显示10个。
直接修改模板文件(最常用、最简单)
这是最直接的方法,适用于只需要在特定位置(如网站头部)限制导航数量的情况。
操作步骤:
-
找到模板文件 登录你的DedeCMS后台,进入【模板】->【模板管理】。 找到你当前正在使用的模板(默认通常是
default),然后点击【默认模板管理】。 在列表中找到并打开head.htm文件,这个文件通常包含了网站头部的HTML结构,主导航代码一般就在这里。
(图片来源网络,侵删) -
定位主导航标签 在
head.htm文件中,找到类似下面这样的代码:<div id="nav"> <ul> {dede:channel type='top'} <li><a href="[field:typelink/]">[field:typename/]</a></li> {/dede:channel} </ul> </div>{dede:channel type='top'}这个标签的作用是调用所有顶级栏目(一级分类)。[field:typelink/]是栏目的链接。[field:typename/]是栏目的名称。
-
添加 limit 参数 在
{dede:channel type='top'}标签中直接添加limit属性,我们只想显示前5个顶级栏目,代码就修改为:<div id="nav"> <ul> {dede:channel type='top' limit='0,5'} <li><a href="[field:typelink/]">[field:typename/]</a></li> {/dede:channel} <!-- 添加一个“更多”链接 --> <li><a href="/sitemap.html">更多</a></li> </ul> </div>代码解释:
limit='0,5'告诉织梦,只获取顶级栏目中ID从0开始的5个记录。- 我们额外添加了一个
<li>,里面包含一个指向“网站地图”或“栏目列表”页面的“更多”链接,这样用户就可以看到所有栏目了,你需要确保你的网站有这样一个页面(sitemap.html)。
-
更新并生成 保存
head.htm文件,然后到【生成】->【更新主页HTML】或【更新栏目HTML】中重新生成网站,即可看到效果。
(图片来源网络,侵删)
使用自由列表(更灵活、推荐)
如果你希望在网站的多个不同位置显示不同数量的主导航,或者需要更复杂的逻辑,使用“自由列表”功能是更好的选择,它不会修改核心模板文件,便于后期维护和升级。
操作步骤:
-
创建自由列表 登录DedeCMS后台,进入【核心】->【自由列表管理】。 点击右上角的【增加自由列表】按钮。
-
配置自由列表
- 列表名称: 填写一个你容易识别的名称,首页主导航”。
- 列表模板: 选择一个空的模板,或者新建一个,这里我们新建一个,
nav_list.htm。 - 命名规则: 保持默认即可。
- : 这是关键部分,你需要输入SQL查询语句来获取数据。
- 查询顶级栏目ID和名称:
SELECT id, typename, typedir FROM `dede_arctype` WHERE reid=0 ORDER BY id asc
dede_arctype是DedeCMS中存储栏目的表名,如果你的表前缀不是dede_,请自行修改。reid=0是筛选顶级栏目的条件。ORDER BY id asc是按栏目ID升序排列。
- 限制数量: 在SQL语句后面加上
LIMIT子句,只取前5个:SELECT id, typename, typedir FROM `dede_arctype` WHERE reid=0 ORDER BY id asc LIMIT 5
- 查询顶级栏目ID和名称:
-
创建列表模板
-
在上一步中,你选择了
nav_list.htm作为模板,现在你需要去【模板】->【模板管理】中找到并编辑这个文件。 -
在
nav_list.htm中写入导航的HTML结构,使用自由列表的标签{dede:list}来循环输出数据:<div id="nav-free"> <ul> {dede:list} <li><a href="[field:typedir/]">[field:typename/]</a></li> {/dede:list} <!-- 同样可以添加“更多”链接 --> <li><a href="/sitemap.html">更多</a></li> </ul> </div>[field:typedir/]和[field:typename/]分别对应SQL查询结果中的typedir和typename字段。
-
-
更新并生成
- 保存自由列表的配置和模板文件。
- 到【生成】->【更新自由列表】中,生成你刚刚创建的这个列表。
- 在你的主页模板(如
index.htm)中,通过{dede:freelist}标签来调用这个自由列表,在需要显示导航的地方插入:{dede:freelist name='首页主导航'/}name的值要和你第一步中填写的“列表名称”完全一致。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 直接修改模板 | - 简单直接,无需额外设置 - 生效速度快 |
- 修改核心模板,升级DedeCMS时可能被覆盖 - 不够灵活,一个模板文件只能控制一种样式 |
- 简单的网站,只需要在头部固定位置限制导航数量 - 对模板修改不熟悉的新手 |
| 使用自由列表 | - 灵活强大,可在多个位置调用 - 不修改核心模板,维护方便,升级安全 - 可自定义模板,样式控制更自由 |
- 设置步骤相对繁琐 - 需要额外生成列表 |
- 需要在多个不同位置显示不同数量的导航 - 对网站有复杂布局和样式要求的场景 - 专业开发者推荐使用 |
对于大多数用户来说,方法一已经足够满足需求,如果你追求更好的可维护性和扩展性,强烈推荐使用方法二。
