调用指定一级栏目下所有子栏目的文章(最常用)
这种方法最常见,比如你想在“产品中心”这个栏目下,显示其所有子栏目(如“产品A”、“产品B”)的最新文章。

(图片来源网络,侵删)
核心思路:
- 找到“产品中心”栏目的ID(假设为
5)。 - 使用
arclist标签,并将typeid设置为5。 - 关键一步:给
arclist添加son='yes'属性,这样它就会自动查找typeid及其所有子栏目下的文章。
示例代码:
假设“产品中心”栏目的ID是 5,你可以在模板文件(如 product_center.htm)中放入以下代码:
<h2>产品中心最新文章</h2>
<ul>
{dede:arclist typeid='5' son='yes' titlelen='30' row='10' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="time">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
</li>
{/dede:arclist}
</ul>
代码解释:

(图片来源网络,侵删)
{dede:arclist ...}:织梦的文章列表调用标签。typeid='5':指定要调用文章的顶级栏目ID,这里是你想要调用的父栏目的ID。son='yes':核心属性,表示调用typeid指定栏目及其所有直接子栏目下的文章,len='30'`:标题长度,截取30个字符。row='10':获取文章的数量,这里显示10条。orderby='pubdate':排序方式,按发布时间降序排列。[field:arcurl/]:文章的链接地址。[field:title/]:文章的标题。[field:pubdate ...]:文章的发布时间,并用MyDate函数格式化为年-月-日的格式。
调用指定栏目下某个特定子栏目的文章
如果你只想显示“产品中心”下的“产品A”的文章,而不是所有子栏目。
核心思路:
- 找到“产品A”这个子栏目的ID(假设为
8)。 - 直接在
arclist标签中使用typeid='8',不需要son属性。
示例代码:
<h2>产品A最新文章</h2>
<ul>
{dede:arclist typeid='8' titlelen='30' row='10' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
代码解释:

(图片来源网络,侵删)
typeid='8':这里直接填写子栏目的ID,arclist默认就只调用这个ID栏目下的文章。
调用指定栏目下所有子栏目(包括孙栏目)的文章
如果你不仅想调用“产品中心”(ID=5)的直接子栏目(产品A、产品B),还想调用其孙栏目(如“产品A-1”)的文章。
核心思路:
- 找到“产品中心”栏目的ID(假设为
5)。 - 使用
GetSonIds函数获取该栏目下所有层级的子栏目ID。 - 将获取到的ID字符串赋值给
arclist的typeid属性。
示例代码:
<h2>产品中心及下级所有栏目最新文章</h2>
<ul>
{dede:arclist typeid='GetSonIds(5)' titlelen='30' row='10' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="cat">([field:typename/])</span>
</li>
{/dede:arclist}
</ul>
代码解释:
typeid='GetSonIds(5)':GetSonIds()是织梦的一个底层函数,它会递归地获取ID为5的栏目下的所有子栏目ID,并返回一个用逗号分隔的ID字符串(5,8,9,10)。[field:typename/]:显示文章所属的栏目名称,方便用户知道文章来自哪个子栏目。
重要补充:栏目路径判断
在实际应用中,你可能希望仅在“产品中心”这个父栏目页面才显示子栏目的文章列表,而在其子栏目(如“产品A”)页面不显示,因为子栏目页面有自己的文章列表。
这时,你需要使用 {dede:field name='typeid'/} 来获取当前页面的栏目ID,并进行判断。
示例代码(在父栏目模板中使用):
{dede:field name='typeid' runphp='yes'}
// 获取当前页面的栏目ID
$currentTypeId = @me;
// 判断当前页面是否是ID为5的“产品中心”栏目
if ($currentTypeId == 5) {
// 如果是,则执行子栏目文章的调用
@me = '
<h2>产品中心最新文章</h2>
<ul>
{dede:arclist typeid="5" son="yes" titlelen="30" row="10" orderby="pubdate"}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
';
} else {
// 如果不是,则不显示任何内容(或显示其他内容)
@me = '';
}
{/dede:field}
代码解释:
{dede:field name='typeid' runphp='yes'}:获取当前页面的栏目ID,并启用PHP运行。$currentTypeId = @me;:将获取到的ID存入变量。if ($currentTypeId == 5):判断当前栏目ID是否为你的目标父栏目ID。@me = '...':如果条件成立,就将赋值给@me的字符串(即完整的HTML和织梦标签)输出到模板中。@me = '';:如果条件不成立,就输出空字符串。
| 需求 | 核心标签和属性 | 说明 |
|---|---|---|
| 调用父栏目及其所有直接子栏目的文章 | {dede:arclist typeid='父栏目ID' son='yes'} |
最常用,适用于在父栏目页展示下属内容。 |
| 调用指定子栏目的文章 | {dede:arclist typeid='子栏目ID'} |
直接指定子栏目ID,不涉及父栏目。 |
| 调用父栏目下所有层级子栏目的文章 | {dede:arclist typeid='GetSonIds(父栏目ID)'} |
递归获取所有下级栏目ID,包括孙栏目。 |
| 仅在父栏目页显示 | 结合 {dede:field name='typeid' runphp='yes'} 进行判断 |
实现更灵活的模板逻辑,避免在子栏目页重复显示。 |
希望这些详细的解释和示例能帮助您完美地实现织梦DedeCMS的子栏目文章调用功能!
