{dede:list} 标签是什么?
{dede:list} 是 DedeCMS 中最常用、最核心的列表标签之一,它的主要作用是获取并循环输出指定栏目(或频道)下的文章列表。

在网站的前端模板中,几乎所有需要展示文章列表的地方,比如首页、栏目页、搜索结果页等,都会用到这个标签。
它的基本语法结构如下:
{dede:list typeid='栏目ID' titlelen='标题长度' row='显示条数' ...}
<!-- 循环体内的内容,通常用来显示单篇文章的信息 -->
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
typeid 属性详解
typeid 是 {dede:list} 标签中最关键、最常用的一个属性。
typeid 的作用
typeid 用于指定要获取文章列表的栏目 ID,DedeCMS 会从你指定的栏目中,提取其所有子栏目(包括自身)的文章,然后进行列表输出。

typeid='栏目ID' 的意思就是:“请显示这个栏目及其所有下级栏目的文章列表”。
typeid 的用法
a) 指定单个栏目
这是最常见的用法,直接填入目标栏目的 ID 即可。
示例: 假设“公司新闻”栏目的 ID 是 2,你想在模板中显示该栏目下的文章列表。

{dede:list typeid='2' row='10'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title function='cn_substr(@me, 30)'/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
效果: 这段代码会从 ID 为 2 的“公司新闻”栏目中,获取最新的 10 篇文章,并以列表形式展示出来。
b) 指定多个栏目
如果你想同时从多个不同的栏目中获取文章列表,可以将栏目 ID 用英文逗号 隔开。
示例: 同时显示 ID 为 2 的“公司新闻”和 ID 为 3 的“行业动态”下的文章。
{dede:list typeid='2,3' row='15'}
<!-- 循环内容同上 -->
{/dede:list}
效果: 这段代码会从“公司新闻”和“行业动态”这两个栏目中混合获取最新的 15 篇文章。
c) 不指定 typeid (默认行为)
如果你在 {dede:list} 标签中不写 typeid 属性,DedeCMS 会根据当前页面的上下文环境来决定显示哪个栏目的列表。
- 在栏目页: 如果这个标签被用在栏目模板(如
list_article.htm)中,不写typeid默认就是显示当前栏目的文章列表。 - 在首页: 如果在首页使用,不写
typeid默认会显示网站首页所设定的“频道页”或“首页推荐”等栏目的文章列表(具体取决于后台的“首页调用”设置),为了明确,建议在首页调用时也显式指定typeid。
{dede:list} 的其他常用属性
除了 typeid,{dede:list} 还有很多实用的属性,它们共同控制列表的显示效果。
| 属性名 | 作用 | 示例 |
|---|---|---|
typeid |
指定栏目ID,核心属性。 | typeid='2,3' |
row |
列表显示条数,即获取多少篇文章。 | row='10' (显示10条) |
infolen |
摘要长度,截取文章摘要(description)的字符数。 | infolen='200' (摘要最多显示200个字符) |
orderby |
排序方式,按什么字段排序,常用值:sortrank (默认,按发布时间排序)id (按文章ID排序)click (按点击量排序) |
orderby='click' |
orderway |
排序方向,升序或降序,常用值:desc (默认,降序,最新的/点击量高的在前)asc (升序,最旧的/点击量低的在前) |
orderway='asc' |
channelid |
频道ID,用于指定特定模型的文章,默认为 1 (普通文章)。 |
channelid='1' |
subday |
天数筛选,只显示指定天数内发布的文章。 | subday='30' (只显示30天内发布的文章) |
limit |
分页范围,用于自定义分页的起始和结束,格式为 '起始条数,结束条数'。 |
limit='0,10' (从第0条开始,取10条,等同于row='10') |
综合实例
假设我们要做一个“产品中心”页面,这个页面属于 ID 为 5 的栏目,并且要显示该栏目及其所有下级栏目的产品,要求:
- 显示 12 条产品,最多显示 20 个字符。
- 按发布时间倒序排列。
模板代码如下:
<h2>产品中心</h2>
<ul class="product-list">
{dede:list typeid='5' row='12' titlelen='20' orderby='sortrank' orderway='desc'}
<li>
<!-- 如果使用了缩略图模型,可以调用缩略图 -->
<a href="[field:arcurl/]" title="[field:title/]">
<img src="[field:litpic/]" alt="[field:title/]">
<h3>[field:title/]</h3>
</a>
<p class="summary">[field:description function='cn_substr(@me, 100)'/]</p>
<span class="date">发布时间:[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:list}
</ul>
<!-- 如果列表分页,通常在 {dede:list} 标签后加上分页标签 -->
<div class="page-nav">
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
</div>
重要注意事项
-
栏目ID在哪里找? 在 DedeCMS 后台,进入【栏目管理】,将鼠标移动到你想要调用的栏目名称上,浏览器左下角状态栏会显示该栏目的链接,链接中的
cid=后面的数字就是该栏目的 ID。 -
{dede:list}vs{dede:arclist}{dede:list}:主要用于栏目页,其核心是typeid,必须指定栏目,它的底层逻辑是GetList。{dede:arclist}:功能更强大、更灵活,可以用在任何地方,包括首页、栏目页等,它可以通过typeid指定栏目,也可以通过channelid指定模型,还可以通过typeidson='true'来实现类似{dede:list}的子栏目调用效果,在很多时候,两者可以互换,但{dede:arclist}的功能更全面。
-
性能考虑 在调用大量数据或层级很深的栏目时,
typeid的使用可能会对数据库造成一定压力,请确保你的row值设置合理,并配合 DedeCMS 的缓存功能使用,以保证网站速度。
希望这份详细的解析能帮助你完全掌握 dede list 标签的 typeid 属性!
