最常用的方法(循环子栏目并分别调用其文章)
这是最标准、最灵活的方法,它会先获取当前栏目的所有直接子栏目,然后对每一个子栏目,分别调用该栏目下的文章列表。

(图片来源网络,侵删)
适用场景:
- 首页调用所有一级栏目的最新文章。
- 在一个栏目页,调用其所有直接子栏目的最新文章。
- 希望每个子栏目的文章列表样式可以独立控制。
核心标签解析:
-
{dede:channel}: 用于获取栏目列表。typeid='top': 获取顶级栏目,如果在首页使用,通常需要这个,如果在栏目页,typeid可以留空,默认获取当前栏目的子栏目。typeid='当前栏目ID': 获取指定栏目ID的子栏目。row='10': 获取子栏目的数量。currentstyle='...: 为当前栏目(或其子栏目)应用特定的样式。
-
{dede:arclist}: 用于获取文章列表。typeid='son': 这是关键! 表示调用当前{dede:channel}循环到的这个子栏目及其所有下级栏目的文章,如果只想调用直接子栏目的文章,可以使用typeid='self'。row='5': 调用文章数量。titlelen='30': 标题长度。infolen='100': 简介(长度。
完整代码示例:
假设我们要在首页调用所有一级栏目下的文章,每个栏目显示5篇文章。
{dede:channel type='top' row='8'}
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<ul>
{dede:arclist row='5' titlelen='30' infolen='100'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
{/dede:channel}
代码解析:

(图片来源网络,侵删)
{dede:channel type='top' row='8'}: 循环获取网站的所有顶级栏目(一级栏目),最多获取8个。<h2>...</h2>: 显示每个子栏目的名称和链接。{dede:arclist ...}: 在{dede:channel}的循环内部,typeid='son'会动态地指向当前循环到的那个子栏目,这段代码会分别调用每个子栏目下的5篇文章。</ul>: 关闭当前子栏目的文章列表。
调用指定ID的子栏目下的文章
如果你明确知道要调用哪些子栏目,可以直接通过它们的ID来调用,这样效率更高,也更直接。
适用场景:
- 只想调用几个特定子栏目的文章,而不是全部。
- 布局比较固定,例如一个新闻区、一个产品区。
核心标签解析:
{dede:arclist}: 直接使用typeid='子栏目ID1,子栏目ID2,子栏目ID3'的形式。
完整代码示例:
假设栏目ID为 5, 6, 7 的三个子栏目,我们想分别调用它们下的文章。
<!-- 调用ID为5的子栏目下的文章 -->
<h2>栏目一</h2>
<ul>
{dede:arclist typeid='5' row='5' titlelen='30'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
<!-- 调用ID为6的子栏目下的文章 -->
<h2>栏目二</h2>
<ul>
{dede:arclist typeid='6' row='5' titlelen='30'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
<!-- 调用ID为7的子栏目下的文章 -->
<h2>栏目三</h2>
<ul>
{dede:arclist typeid='7' row='5' titlelen='30'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
或者,如果你希望把这些栏目的文章都混在一起显示:
<h2>混合栏目文章</h2>
<ul>
{dede:arclist typeid='5,6,7' row='10' titlelen='30'}
<li>
<span>[field:typelink/]</span> <!-- 显示文章所属栏目 -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
调用当前栏目的所有子栏目(包括多级)下的文章
你可能需要一个栏目页(产品中心”)来展示其下所有层级的子栏目里的所有文章。

(图片来源网络,侵删)
适用场景:
- 产品展示、文章归档等页面,需要汇总所有下级栏目的内容。
核心标签解析:
{dede:arclist}: 使用typeid='son'。
完整代码示例:
将此代码放在一个栏目模板(如 list_article.htm)中,当你在后台选择这个模板的栏目时,就会显示其所有子栏目(无论层级)的文章。
<h2>所有产品列表</h2>
<ul>
{dede:arclist row='20' titlelen='50'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>分类:[field:typename/]</span>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
注意:这里 typeid 属性被省略了,在栏目列表页(list_*.htm)模板中,{dede:arclist} 会默认调用当前栏目的文章,而加上 typeid='son' 后,它就会调用当前栏目的所有直接子栏目的文章,要调用包括多级子栏目在内的所有文章,需要配合SQL查询或使用更复杂的标签组合,但对于大多数情况,typeid='son' 已经能满足需求,它会递归查找。
重要补充:channelartlist 标签(更高级的用法)
{dede:channelartlist} 是一个专门为“栏目+文章”组合设计的标签,它比 {dede:channel} + {dede:arclist} 的组合更强大,可以减少一次数据库查询,效率更高。
适用场景:
- 首页或频道页,需要分别展示不同栏目的区块,每个区块包含栏目名称和其下的文章。
核心标签解析:
{dede:channelartlist}: 循环指定栏目及其子栏目。typeid='top,5,6': 指定要循环的顶级栏目或特定栏目ID。cacheid: 缓存ID,用于提升性能。
完整代码示例:
{dede:channelartlist typeid='top'}
<div class="channel-block">
<h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>
<div class="article-list">
{dede:arclist row='6' titlelen='40'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
</div>
<div class="more"><a href="{dede:field name='typeurl'/}">查看更多 ></a></div>
</div>
{/dede:channelartlist}
代码解析:
{dede:channelartlist typeid='top'}: 循环所有顶级栏目。<h2>...</h2>: 显示当前循环到的栏目的名称和链接({dede:field name='typeurl'}和{dede:field name='typename'})。{dede:arclist ...}: 在{dede:channelartlist}内部,{dede:arclist}默认就是调用当前栏目的文章,无需再指定typeid。</div>: 关闭当前栏目的区块。
总结与选择建议
| 方法 | 核心标签 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 方法一 | {dede:channel} + {dede:arclist} |
灵活,逻辑清晰,最常用 | 嵌套标签,代码稍长 | 通用场景,如首页调用各栏目文章,栏目页调用其子栏目文章。 |
| 方法二 | {dede:arclist} |
直接、高效,代码简单 | 需要明确知道栏目ID,不灵活 | 特定需求,只调用几个已知ID的子栏目。 |
| 方法三 | {dede:arclist} |
简单,能汇总下级内容 | 功能有限,typeid='son' 不一定包含所有层级 |
栏目归档页,需要展示当前栏目所有下级内容。 |
| 方法四 | {dede:channelartlist} |
效率高,代码结构更优雅 | 功能相对固定,不如方法一灵活 | 首页/频道页布局,需要将栏目和其文章紧密地组合在一起展示。 |
对于初学者,强烈推荐从方法一开始学习,因为它最能体现织梦标签的嵌套和逻辑关系,当你对织梦有更深入的了解后,再根据具体需求选择更高效的方法。
