- 调用一级栏目列表:先获取所有顶级栏目。
- 在一级栏目循环内,调用其对应的二级栏目列表:对每一个一级栏目,再查找并显示它的所有子栏目。
下面我将为您提供几种最常用和最实用的方法,从最标准的代码到更简洁的标签。

(图片来源网络,侵删)
最标准、最常用的方法(推荐)
这是最清晰、最易于理解和维护的方法,使用{dede:channel}标签嵌套实现。
适用场景:在首页某个模块,清晰地展示每个一级栏目及其下属的二级栏目。
代码示例:
{dede:channel type='top' row='8'}
<dl>
<dt><a href="[field:typelink/]">[field:typename/]</a></dt>
<dd>
{dede:sonchannel}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:sonchannel}
</dd>
</dl>
{/dede:channel}
代码详解:

(图片来源网络,侵删)
-
外层循环
{dede:channel type='top' row='8'}type='top':表示调用顶级栏目(一级栏目)。row='8':表示只调用前8个一级栏目,你可以根据需要修改这个数字。[field:typename/]:输出一级栏目的名称。[field:typelink/]:输出一级栏目的链接地址。
-
内层循环
{dede:sonchannel}- 这个标签非常关键,它必须放在
{dede:channel}的循环体内。 - 它的作用是:自动获取当前外层循环中这个一级栏目的所有直接子栏目(即二级栏目)。
- 它会自动循环遍历所有子栏目,你不需要提供任何额外参数。
[field:typename/]和[field:typelink/]在这里表示的是子栏目(二级栏目)的名称和链接。
- 这个标签非常关键,它必须放在
-
HTML 结构
<dl>,<dt>,<dd>是一个经典的列表结构,非常适合这种“标题+列表”的布局。<dt>用来显示一级栏目标题。<dd>用来包裹其下的二级栏目列表。
简洁的单行循环方法
如果你不希望用 <dl> <dt> <dd> 这样的复杂结构,只想简单地用 <ul> 列出所有一级和二级栏目,可以使用这种方法。

(图片来源网络,侵删)
适用场景:生成一个扁平化的、包含所有层级的导航菜单。
代码示例:
<ul>
{dede:channel type='top' row='8'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
{dede:sonchannel}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:sonchannel}
</li>
{/dede:channel}
</ul>
代码详解:
- 这个方法和方法一的逻辑完全一样,只是HTML结构换成了
<ul>和<li>。 - 每个一级栏目
<li>内部,先显示自己,然后通过{dede:sonchannel}输出它的所有二级栏目链接。
调用指定一级栏目下的二级栏目
你可能只想在首页的某个特定位置,显示某一个特定一级栏目(产品中心”)的二级列表,而不是所有一级栏目。
适用场景:首页的一个特定模块,产品分类”、“服务项目”等。
代码示例:
假设你“产品中心”这个一级栏目的 ID 是 2。
<h2>产品分类</h2>
<ul>
{dede:channel type='son' typeid='2'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
代码详解:
-
{dede:channel type='son' typeid='2'}type='son':表示调用指定栏目的子栏目。typeid='2':这是最关键的部分,指定了要查询哪个栏目的子栏目,这里的2就是你目标一级栏目的ID。- 如何找到栏目ID?登录DedeCMS后台 -> 【核心】-> 【栏目管理】,鼠标移动到你想查询的栏目上,浏览器状态栏会显示
...?cid=2,这个数字就是ID。
-
循环体
- 因为这里已经直接指定了父栏目,所以循环体内直接输出
[field:typename/]和[field:typelink/]即可,它们指的就是二级栏目。
- 因为这里已经直接指定了父栏目,所以循环体内直接输出
重要补充与注意事项
如何获取栏目ID?
这是最常见的问题,获取方法非常简单:
- 登录你的DedeCMS网站后台。
- 在左侧菜单点击【核心】 -> 【栏目管理】。
- 将鼠标光标移动到你想调用的那个一级栏目名称上(不要点击)。
- 查看浏览器左下角状态栏,会显示一个链接,类似
http://你的域名.com/dede/catalog_edit.php?cid=2。 - 等号 后面的数字 2 就是这个栏目的ID。
样式美化
上面的代码只提供了结构,你需要通过CSS来美化它们,以达到你想要的视觉效果。
对于方法一的代码,你可以添加如下CSS:
/* 首页栏目列表样式 */
.dede-channel-list dl {
width: 200px; /* 每个栏目的宽度 */
float: left; /* 实现多列并排 */
margin: 10px;
border: 1px solid #eee;
padding: 10px;
}
.dede-channel-list dt {
font-weight: bold;
font-size: 16px;
border-bottom: 1px dashed #ccc;
padding-bottom: 5px;
margin-bottom: 5px;
}
.dede-channel-list dt a {
color: #333;
text-decoration: none;
}
.dede-channel-list dd {
padding-left: 10px;
}
.dede-channel-list dd a {
color: #666;
text-decoration: none;
display: block; /* 让链接块级化,方便设置间距 */
padding: 2px 0;
}
.dede-channel-list dd a:hover {
color: #ff6600;
text-decoration: underline;
}
在模板文件中,你可以给外层 <dl> 加上一个class,<dl class="dede-channel-list">,然后将上面的CSS代码放到你的网站CSS文件中。
缓存问题
DedeCMS heavily relies on caching. 如果你在修改模板代码后,前台页面没有立即生效,请:
- 进入后台 -> 【生成】 -> 更新首页。
- 如果还是不行,可以尝试清空一下浏览器缓存,或者按
Ctrl + F5强制刷新页面。
希望这些详细的解释和示例能帮助你成功在DedeCMS首页调用二级栏目列表!
