这个问题的根源在于混淆了{dede:list}和{dede:arclist}标签的功能。

(图片来源网络,侵删)
核心概念:{dede:list} vs {dede:arclist}
在解决这个问题之前,我们必须先理解这两个最常用列表标签的区别:
| 特性 | {dede:list} |
{dede:arclist} |
|---|---|---|
| 主要用途 | 页,用于显示当前栏目下的所有文章列表。 | 任意页面,用于调用任意指定栏目(或多个栏目)的文章列表,非常灵活。 |
| 工作原理 | 它默认就限定在当前栏目内,通过typeid参数来获取栏目ID。 |
它是一个“万能”的列表标签,需要明确指定要调用的栏目ID。 |
| 性能 | 性能相对较高,因为它直接基于当前栏目ID进行查询。 | 功能强大,但涉及跨栏目查询时,性能可能略低于list。 |
| 典型场景 | 首页某个栏目的最新文章列表、栏目页的文章列表。 | 首页调用多个指定栏目的文章、推荐文章、热门文章等。 |
{dede:list}:“我就在这个栏目里,把我的兄弟们都列出来”。{dede:arclist}:“给我把栏目ID为1、3、5的所有文章都列出来”。
如何在{dede:list}中指定ID(即typeid参数)
既然{dede:list}主要用于栏目页,那么它的“指定ID”就是指指定要调用的栏目ID,这个参数就是 typeid。
基本语法
{dede:list typeid='栏目ID' pagesize='10'}
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:description function='cn_substr(@me,100)'/]...</p>
<span>[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
{/dede:list}
typeid='栏目ID':这是关键,你需要将'栏目ID'替换成你想要调用的栏目在DedeCMS后台的实际数字ID。pagesize='10':可选参数,表示每页显示的文章数量。
使用场景详解
在首页调用指定栏目的文章列表
这是最常见的用法,假设你想在首页显示“网站公告”(栏目ID为1)栏目下的文章。

(图片来源网络,侵删)
- 进入DedeCMS后台,找到“网站公告”栏目,记下它的栏目ID(假设为
1)。 - 打开你的首页模板文件(通常是
index.htm)。 - 在你想要显示列表的位置,插入以下代码:
<h2>网站公告</h2>
<ul>
{dede:list typeid='1' pagesize='5'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function='strftime("%Y-%m-%d", @me)'/]</span>
</li>
{/dede:list}
</ul>
在自定义页面(单页)调用指定栏目列表
如果你想在一个不隶属于任何栏目的自定义页面(如“关于我们”、“联系我们”页面)中,调用某个栏目的文章列表,方法完全相同。
- 创建或编辑你的自定义页面模板(
about.htm)。 - 同样使用
{dede:list}标签并明确指定typeid。
<div class="news-list">
<h3>最新动态</h3>
{dede:list typeid='2' pagesize='8'}
<div class="news-item">
<h4><a href="[field:arcurl/]">[field:title/]</a></h4>
<div class="info">[field:pubdate function='MyDate("Y-m-d H:i",@me)'/] 作者:[field:writer/]</div>
<p>[field:info/]</p>
</div>
{/dede:list}
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
注意:在自定义页面中使用时,你可能还需要在后台的“模板”->“自定义页面”中,为这个页面选择正确的栏目(虽然页面本身是单页,但指定栏目ID可以让
list标签找到数据源),或者确保你的系统设置允许在非栏目页使用list
常见问题与排查
如果按照上述方法使用了typeid但依然无效,请检查以下几点:
-
栏目ID是否正确?
(图片来源网络,侵删)- 最常见错误! 登录DedeCMS后台,进入“栏目管理”,鼠标移动到你想要调用的栏目名称上,浏览器左下角会显示该栏目的ID,
cms/edit/plus_list.php?tid=2,这里的2就是ID,确保你的typeid='2'中的数字是正确的。
- 最常见错误! 登录DedeCMS后台,进入“栏目管理”,鼠标移动到你想要调用的栏目名称上,浏览器左下角会显示该栏目的ID,
-
是否在正确的模板文件中使用?
- 确保你修改的是最终生成页面对应的模板文件,首页对应
index.htm,栏目ID为3的栏目页对应templets/default/目录名/list_3.htm。
- 确保你修改的是最终生成页面对应的模板文件,首页对应
-
权限问题
确保你的模板文件有可读权限,Web服务器用户(如www-data, apache)可以访问。
-
缓存问题
- 修改模板后,务必在后台“生成” -> “更新主页HTML”或“更新栏目HTML”,让系统重新生成页面,浏览器缓存也可能导致看不到效果,可以按
Ctrl + F5强制刷新。
- 修改模板后,务必在后台“生成” -> “更新主页HTML”或“更新栏目HTML”,让系统重新生成页面,浏览器缓存也可能导致看不到效果,可以按
-
标签拼写错误
- 检查标签是否拼写正确,例如
{dede:list}不要写成{dede:list}或{dede:LIST}。
- 检查标签是否拼写正确,例如
{dede:list}可以指定ID,参数是typeid。- 它的本质是指定一个栏目,然后调用该栏目下的文章列表。
- 在首页或自定义页面中调用指定栏目列表时,必须显式写出
typeid='栏目ID'。 - 在栏目页模板(如
list_x.htm)中使用时,可以省略typeid,因为它默认就是当前栏目的ID。
希望这个详细的解释能帮助您彻底解决这个困惑!
