{dede:arclist} 是 DedeCMS 最核心、最常用的列表标签,主要用于在首页、列表页等地方调用文章列表,默认情况下,它只显示文章的标题、时间、点击等信息,但通过其强大的属性,我们可以轻松地获取并显示文章所属的栏目名称。

(图片来源网络,侵删)
核心方法:使用 channel 属性
要获取栏目名称,最直接和推荐的方法是使用 channel 属性,这个属性会获取当前文章所属栏目的信息,并以数组的形式赋值给一个你指定的变量。
基本语法
{dede:arclist channel='你的变量名' ...}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!-- 使用[field:变量名/来调用栏目信息] -->
<span>栏目:[field:你的变量名.name/]</span>
</li>
{/dede:arclist}
详细示例与解释
假设我们要在文章列表中显示每个文章的标题和它所属的栏目名称。
在模板中添加 channel 属性
我们定义一个变量名为 mychannel。

(图片来源网络,侵删)
<ul>
{dede:arclist
typeid='1'
row='10'
channel='mychannel'
titlelen='30'
}
<li>
<!-- 文章链接 -->
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<!-- 文章发布时间 -->
<span class="time">([field:pubdate function="MyDate('Y-m-d',@me)"/])</span>
<!-- 使用 channel 变量获取栏目名称 -->
<span class="channel">来自栏目:<strong>[field:mychannel.name/]</strong></span>
</li>
{/dede:arclist}
</ul>
代码解析:
{dede:arclist ...}: 开始标签。typeid='1': 调用 ID 为 1 的栏目及其子栏目下的文章,如果为空,则调用所有栏目的文章。row='10': 显示 10 条文章,len='30'`: 标题长度最多 30 个字符。channel='mychannel': 这是关键! 它告诉 DedeCMS,为当前循环的每一篇文章,获取其所属栏目的完整信息,并存储到名为mychannel的变量中。[field:arcurl/]: 文章的链接地址。[field:title/]: 文章的标题。[field:pubdate ... /]: 文章的发布时间,这里用function进行了格式化。[field:mychannel.name/]: 这就是获取栏目名称的核心写法,因为mychannel是一个栏目信息数组,所以用.name来访问它的“栏目名称”这个字段。{/dede:arclist}: 结束标签。
其他常用的栏目字段
channel 属性返回的不仅仅只有 name,你还可以获取栏目的其他很多有用信息,只需要将 .name 换成其他字段名即可。
- 栏目ID:
[field:mychannel.id/] - 栏目目录:
[field:mychannel.typename/](注意:在某些版本中,typename和name效果一样,都指栏目名称,更常用的是name,而typedir才是指栏目在网站上的目录路径,如/a/) - 栏目链接:
[field:mychannel.typelink/](这是最常用的获取栏目链接的方式,它会自动带上网站的根目录) - 栏目上级ID:
[field:mychannel.reid/] - 栏目排序:
[field:mychannel.sortrank/]
综合示例:显示文章标题、栏目名称和栏目链接
{dede:arclist channel='mychannel' row='5'}
<div class="article-item">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>
<a href="[field:mychannel.typelink/]">[field:mychannel.name/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</p>
</div>
{/dede:arclist}
在这个例子中,文章的标题链接到文章本身,而栏目名称则是一个可以点击的链接,点击后会跳转到该栏目列表页。

(图片来源网络,侵删)
替代方法:使用 typeid 和 gettypename 函数
在某些特殊情况下,或者如果你对 PHP 比较熟悉,也可以使用另一种方法:通过 typeid 获取栏目 ID,然后用 gettypename 函数根据 ID 获取栏目名称。
这种方法效率稍低,因为它在循环内部执行了函数调用,不推荐在大量数据列表中使用,但作为了解是很有帮助的。
{dede:arclist row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<!--
field:typeid 是当前文章的栏目ID
gettypeid 是一个DedeCMS函数,用于根据ID获取栏目名称
-->
<span>栏目:[field:typeid function='GetTypeName(@me)'/]</span>
</li>
{/dede:arclist}
代码解析:
[field:typeid/]: 这个标签会输出当前文章所属栏目的 ID 号(2, 5, 8 等)。function='GetTypeName(@me)': 这是一个函数调用。@me是 DedeCMS 模板中的特殊变量,代表当前标签的原始值,在这里就是[field:typeid/]的输出结果,即栏目 ID。GetTypeName()是 DedeCMS 的一个内置函数,它接收一个栏目 ID 作为参数,并返回该栏目的名称。[field:typeid function='GetTypeName(@me)'/]的完整意思就是:获取当前文章的栏目 ID,然后用这个 ID 去调用GetTypeName函数,最后输出函数返回的栏目名称。
总结与对比
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
channel 属性 |
效率高,一次获取所有栏目信息,可灵活调用 id, name, typelink 等多个字段。 |
语法稍微复杂一点,需要理解变量概念。 | 强烈推荐,99% 的场景下都应使用此方法。 |
typeid + gettypename |
语法直观,易于理解。 | 效率较低,在循环中反复调用函数,对性能有轻微影响。 | 只需获取栏目名称,且对性能要求不高的简单列表。 |
在 DedeCMS 中使用 {dede:arclist} 调用栏目名称,channel='变量名' + [field:变量名.name/] 是最标准、最高效的方案。
