- 获取当前栏目的上级栏目 ID。
- 使用获取到的上级栏目 ID,调用该栏目下的文章列表。
下面我将为您提供几种常用且有效的方法,并附上详细的代码解释。

在当前栏目页调用上级栏目的文章列表(最常用)
这种方法适用于在当前栏目的列表页或内容页,显示其父栏目的文章列表。
第 1 步:获取上级栏目 ID
在调用列表之前,我们需要先获取当前栏目的父栏目 ID,DedeCMS 提供了全局变量 $typetype 或 $typename,但更直接和常用的是通过 GetTopid() 函数。
{dede:field name='typeid' function="GetTopid(@me)"/}
这段代码的作用是:
{dede:field name='typeid'}:获取当前栏目的 ID。function="GetTopid(@me)":将当前栏目的 ID 作为参数,传递给GetTopid函数。GetTopid()函数会返回一个以当前栏目 ID 为键的数组,array('typeid' => 5),我们只需要这个 ID 值。
为了方便后续调用,我们通常把这个 ID 赋值给一个变量。

第 2 步:调用上级栏目的文章列表
现在我们有了上级栏目的 ID,就可以使用 arclist 标签来调用文章列表了,关键在于使用 typeid 属性指定这个 ID。
完整代码示例
将以下代码放在您想要显示上级栏目文章列表的位置,list_article.htm 模板文件中。
<h2>上级栏目的最新文章</h2>
<ul>
{dede:arclist typeid='gettopid' titlelen='30' row='8'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span class="date">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
</li>
{/dede:arclist}
</ul>
代码解释:
{dede:arclist ...}:文章列表调用标签。typeid='gettopid':这是最核心的部分。typeid属性用于指定要调用哪个栏目的文章,这里我们没有直接写数字,而是写了gettopid,DedeCMS 会自动解析第一步{dede:field name='typeid' function="GetTopid(@me)"/}的结果,并将其中的 ID 值赋给typeid,这样就实现了动态调用,len='30'`:标题长度,截取 30 个字符。row='8':获取文章的数量,这里是 8 篇。[field:arcurl/]:文章的链接地址。[field:title/]:文章的标题。[field:pubdate ...]:文章的发布日期,并用MyDate函数格式化为年-月-日。
页(文章页)调用上级栏目的文章列表
页(如 article_article.htm)中调用方法类似,因为内容页也能获取到当前文章所属的栏目信息。
完整代码示例
<h3>相关栏目推荐</h3>
<dl>
{dede:arclist typeid='gettopid' row='5' orderby='pubdate'}
<dt><a href="[field:arcurl/]">[field:title/]</a></dt>
<dd>[field:description function="cn_substr(@me, 100)"/]...</dd>
</dd>
{/dede:arclist}
</dl>
这里的逻辑和方法一完全一样,都是通过 typeid='gettopid' 来动态获取上级栏目 ID 并调用其文章。
调用上级栏目的名称(作为列表标题)
有时候我们不仅想列出文章,还想在列表上方显示上级栏目的名称,这可以通过嵌套标签实现。
完整代码示例
<h2>{dede:field name='typename' function="GetTopid(@me)"/} 的最新文章</h2>
<ul>
{dede:arclist typeid='gettopid' titlelen='30' row='8'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
代码解释:
{dede:field name='typename' function="GetTopid(@me)"/}:这个标签会返回上级栏目的名称。GetTopid函数不仅能处理 ID,也能处理名称,它会返回当前栏目的顶级栏目信息,这里我们直接用它来获取顶级栏目的名称,作为标题。
重要注意事项
-
GetTopid函数:这个函数是 DedeCMS 的内置函数,用于获取顶级栏目,如果您的栏目结构是“顶级栏目 -> 二级栏目 -> 三级栏目”,GetTopid获取的是顶级栏目的 ID,如果您想获取的是直接父级栏目的 ID,GetTopid在只有两级时是有效的,如果层级更深,GetTopid会一直向上找到顶级。- 如果只需要直接父级:在 DedeCMS 5.7 及以上版本中,可以直接使用
{dede:field name='topid'/}来获取直接父级栏目的 ID,所以调用上级栏目文章可以更简单地写成:{dede:arctype typeid='{dede:field.topid/}'} <h2>[field:typename/]</h2> {/dedetype} {dede:arclist typeid='{dede:field.topid/}' row='10'} <li><a href="[field:arcurl/]">[field:title/]</a></li> {/dede:arclist}这种写法更清晰明了,推荐使用。
- 如果只需要直接父级:在 DedeCMS 5.7 及以上版本中,可以直接使用
-
栏目缓存:修改模板后,请确保清除了 DedeCMS 的缓存,后台 -> 系统 -> 清除缓存,或者直接删除
/data/cache/目录下的缓存文件,否则可能看不到更新效果。 -
模板文件位置:请确保将代码放置在正确的模板文件中,在栏目列表页调用,就放在
list_栏目ID.htm或list_article.htm中;在文章内容页调用,就放在article_article.htm中。
| 需求 | 推荐代码 | 说明 |
|---|---|---|
| 调用上级栏目文章列表 | {dede:arclist typeid='{dede:field.topid/}' row='10'}...{/dede:arclist} |
最推荐,使用 {dede:field.topid/} 获取直接父级ID,清晰高效。 |
| (备选)调用上级栏目文章列表 | {dede:arclist typeid='gettopid' row='10'}...{/dede:arclist} |
传统方法,gettopid 会获取顶级栏目ID,适用于两级栏目结构。 |
| 调用上级栏目名称 | {dede:field.name='typename'/} 或 {dede:field.topid/} |
获取当前栏目的直接父级名称。 |
对于大多数情况,使用 {dede:field.topid/} 是最直接、最不容易出错的方法,希望这些信息能帮助您解决问题!
