dede:arclist
dede:arclist 是 DedeCMS 中用于调用文章列表的最强大、最灵活的标签,要指定栏目,主要通过其 typeid 属性来实现。

(图片来源网络,侵删)
基础用法:指定单个栏目
这是最简单的用法,用于调用某一个特定栏目下的文章。
语法:
{dede:arclist typeid='栏目ID' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
参数解释:
typeid='栏目ID': 这是关键参数,它告诉 DedeCMS 你想调用哪个栏目下的文章,你需要将'栏目ID'替换为你目标栏目的实际数字 ID。- 如何获取栏目ID?
- 登录 DedeCMS 后台。
- 进入「[栏目]」-「[栏目管理]」。
- 将鼠标移动到你想要的栏目名称上,浏览器左下角的状态栏会显示该栏目的链接,
.../catalog_add.php?cid=123,这里的123就是该栏目的 ID,len='30'`: 标题长度,截取 30 个字符。
- 如何获取栏目ID?
row='10': 调用文章的数量,共调用 10 篇。[field:arcurl/]: 文章的链接地址。[field:title/]: 文章的标题。[field:pubdate ... /]: 文章的发布日期,function="MyDate(...)"是一个格式化函数,将时间戳格式化为年-月-日的形式。
进阶用法:指定多个栏目
如果你想同时调用多个不同栏目下的文章,可以将它们的 ID 用英文逗号 隔开。

(图片来源网络,侵删)
语法:
{dede:arclist typeid='5,6,8' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:typename/]</span> <!-- 显示文章所属的栏目名称 -->
</li>
{/dede:arclist}
参数解释:
typeid='5,6,8': 这个标签会同时调用 ID 为 5、6、8 的这三个栏目下的文章,总共 10 篇(根据row的值)。[field:typename/]: 这是一个非常有用的字段,用于显示当前文章所属的栏目名称,在多栏目混合调用时,它可以让你清楚地知道每篇文章来自哪里。
高级用法:指定栏目及其子栏目
这是非常常见的需求,比如调用“产品中心”栏目及其所有下级栏目(如“产品A”、“产品B”)下的文章。
语法:
{dede:arclist typeid='5,0' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
参数解释:
typeid='5,0': 这是实现调取指定栏目及其子栏目的“标准”方法。5: 是你指定的顶级栏目(如“产品中心”)的 ID。0: 是一个特殊值,代表“所有子栏目”,当typeid中包含0时,DedeCMS 会自动查找并包含 ID 为5的栏目下的所有层级的子栏目。
更简洁的写法(推荐):
DedeCMS 的 typeid 参数本身就支持自动包含子栏目,只要你只写上顶级栏目的 ID,系统默认就会包含其所有子栏目。
{dede:arclist typeid='5' titlelen='30' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
这种写法更简洁,并且效果与 typeid='5,0' 基本相同(在默认配置下),推荐使用这种。
排除指定栏目
有时你可能想调用除某个栏目外的所有文章,这需要结合 SQL 语句来实现。
语法:
{dede:arclist row='10' titlelen='30'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
如何实现排除?
你需要修改 typeid 的值,假设你的所有顶级栏目 ID 是 1, 2, 3, 4, 5,但你不想调用 ID 为 3 的栏目。
-
方法1:手动列出所有需要的 ID
{dede:arclist typeid='1,2,4,5' row='10' titlelen='30'} ... {/dede:arclist}如果栏目很多,这种方法很麻烦。
-
方法2:使用 SQL 排除(更强大)
{dede:arclist typeid='all' row='10' titlelen='30' sql='WHERE typeid NOT IN (3)'} ... {/dede:arclist}参数解释:
typeid='all': 表示从所有栏目中选取。sql='WHERE typeid NOT IN (3)': 这是附加的 SQL 条件,typeid NOT IN (3)的意思是“栏目 ID 不在 (3) 这个集合中”,从而实现了排除 ID 为 3 的栏目的目的,你也可以排除多个,如NOT IN (3, 7)。
实际应用场景总结
| 场景 | 需求 | typeid 参数值 |
示例代码 |
|---|---|---|---|
| 单个栏目 | 只调用“公司新闻”下的文章 | typeid='2' |
{dede:arclist typeid='2' row='5'}...{/dede:arclist} |
| 多个栏目 | 调用“新闻”和“公告”下的文章 | typeid='2,3' |
{dede:arclist typeid='2,3' row='5'}...{/dede:arclist} |
| 栏目及子栏目 | 调用“产品中心”及其所有子产品下的文章 | typeid='5' |
{dede:arclist typeid='5' row='10'}...{/dede:arclist} |
| 排除栏目 | 调用所有文章,但排除“关于我们”栏目 | typeid='all' 加 sql |
{dede:arclist typeid='all' sql='WHERE typeid NOT IN(4)'}...{/dede:arclist} |
| 当前栏目 | 在文章详情页或列表页,调用当前栏目下的文章 | typeid='typeid' |
{dede:arclist typeid='typeid' row='5'}...{/dede:arclist} |
注意: typeid='typeid' 是一个特殊用法,它只在文章内容页(article_article.htm)或栏目列表页(list_栏目ID.htm)模板中有效,它会自动获取当前页面对应的栏目 ID。
希望这份详细的指南能帮助你完全掌握 DedeCMS 中 dede:arclist 指定栏目的用法!
