下面我将为你详细讲解几种常用的方法,并提供完整的代码示例和说明。

(图片来源网络,侵删)
核心标签:{dede:channelartlist}
{dede:channelartlist} 是专门用来调用栏目及其子栏目的标签,它的核心用法是:
- 指定一级栏目:通过
typeid属性指定你要调用哪个一级栏目。 - 循环一级栏目:标签本身会循环输出指定的一级栏目。
- 在内部调用二级栏目:在
{dede:channelartlist}的循环体内,使用{dede:type}标签来调用当前一级栏目下的所有二级子栏目。
调用指定一级栏目下的所有二级栏目
这是最常用、最标准的方法,假设你的网站有一个一级栏目“新闻中心”,其ID是 1,你想调用它下面的所有二级栏目(如“国内新闻”、“国际新闻”、“科技新闻”)。
模板代码示例
{dede:channelartlist typeid='1'}
<!-- 循环输出一级栏目本身 -->
<h2>
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
</h2>
<!-- 开始循环输出当前一级栏目下的所有二级栏目 -->
<ul>
{dede:type}
<li>
<a href="[field:typeurl/]">[field:typename/]</a>
</li>
{/dede:type}
</ul>
{/dede:channelartlist}
代码详解
-
{dede:channelartlist typeid='1'}typeid='1':这是关键!它告诉织梦,我们只处理ID为1的这个一级栏目及其所有子栏目,请将1替换为你自己的一级栏目ID。- 这个标签会循环一次,因为它只指定了一个栏目。
-
<h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
(图片来源网络,侵删)- 在
channelartlist标签内部,{dede:field}用于获取当前一级栏目的信息。 name='typeurl':获取当前一级栏目的链接地址。name='typename':获取当前一级栏目的名称。
- 在
-
{dede:type}...{/dede:type}- 这个标签嵌套在
channelartlist内部,专门用来获取当前一级栏目下的所有二级子栏目。 - 它会自动循环输出所有符合条件的二级栏目。
- 这个标签嵌套在
-
[field:typeurl/]和[field:typename/]- 在
{dede:type}标签内部,我们使用简化的写法[field:...]来获取当前二级栏目的链接和名称。
- 在
调用多个一级栏目及其各自的二级栏目
如果你想在同一个列表页上,同时显示“新闻中心”、“产品中心”等多个一级栏目,并且每个一级栏目下面都跟着它的二级子栏目。
模板代码示例
{dede:channelartlist typeid='1,3'}
<!-- 循环输出每一个指定的一级栏目 -->
<div class="main-category">
<h2>
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
</h2>
<!-- 开始循环输出当前一级栏目下的所有二级栏目 -->
<ul class="sub-category">
{dede:type}
<li>
<a href="[field:typeurl/]">[field:typename/]</a>
</li>
{/dede:type}
</ul>
</div>
{/dede:channelartlist}
代码详解
{dede:channelartlist typeid='1,3'}typeid='1,3':这里我们用逗号分隔了两个一级栏目的ID(例如ID为1的“新闻中心”和ID为3的“产品中心”)。channelartlist标签会循环两次,第一次处理ID为1的栏目,第二次处理ID为3的栏目,每次循环都会执行一次内部的{dede:type}来调用各自的子栏目。
调用当前栏目所在顶级栏目下的所有二级栏目
这是一个更灵活的用法,适用于列表页模板(list_article.htm),无论你访问的是哪个二级栏目(国内新闻”),它都能自动找到它所属的一级栏目(“新闻中心”),并调用“新闻中心”下的所有二级栏目。

(图片来源网络,侵删)
模板代码示例
{dede:channelartlist typeid='top'}
<!-- 循环输出当前栏目所属的顶级栏目 -->
<h2>
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
</h2>
<!-- 调用该顶级栏目下的所有二级栏目 -->
<ul>
{dede:type}
<li>
<a href="[field:typeurl/]">[field:typename/]</a>
</li>
{/dede:type}
</ul>
{/dede:channelartlist}
代码详解
{dede:channelartlist typeid='top'}typeid='top'是一个神奇的值,它表示“获取当前栏目所在的顶级栏目”。- 如果当前栏目是二级栏目,
typeid='top'就会自动定位到它的一级栏目。 - 如果当前栏目就是一级栏目,
typeid='top'就代表它自己。 - 这样,无论你在哪个子栏目页,都能正确地调用出兄弟栏目。
重要补充:获取栏目ID的方法
如果你不确定某个栏目的ID是多少,可以通过以下方法找到:
- 后台查看:登录DedeCMS后台,进入“栏目管理” -> “栏目管理”,鼠标移动到目标栏目名称上,浏览器左下角状态栏会显示该栏目的编辑链接,如
dede/catalog_add.php?cid=1,其中的cid=1就是它的ID。 - URL查看:在网站前台,点击某个栏目,观察浏览器地址栏的URL,通常是
你的域名/plus/list.php?tid=1,其中的tid=1就是它的ID。
| 需求场景 | 核心标签 | typeid 属性值 | 说明 |
|---|---|---|---|
| 调用指定一级栏目的所有子栏目 | {dede:channelartlist} |
typeid='1' (具体ID) |
最常用,明确指定父栏目。 |
| 调用多个一级栏目的所有子栏目 | {dede:channelartlist} |
typeid='1,3' (多个ID,逗号隔开) |
适用于同时展示多个分类模块。 |
| 调用当前栏目所在顶级栏目的子栏目 | {dede:channelartlist} |
typeid='top' |
最灵活,适用于列表页模板,自动适应层级。 |
选择最适合你需求的方法,将代码复制到你的模板文件中,并替换正确的栏目ID,即可实现二级栏目的调用。
