这是一个非常核心且常用的功能,理解它对于正确调用栏目下的文章至关重要。

(图片来源网络,侵删)
{dede:list} 标签本身并不直接支持 typeid 属性。
它的行为是:在哪个栏目(频道)的模板页中使用,就默认调用该栏目下的文章列表。
我们可以通过其他几种方法,巧妙地实现“指定typeid来调用列表”的功能,这在实际开发中非常普遍。
在指定栏目模板中使用(最常用、最标准的方法)
这是织梦设计的标准工作流程,你不需要在标签里写 typeid,而是通过模板与栏目的绑定关系来隐式指定。

(图片来源网络,侵删)
工作原理:
- 在后台的“栏目管理”中,为每个栏目(或频道)指定一个对应的列表模板。
- 当你通过首页或导航栏点击进入某个栏目时,织梦会自动加载该栏目指定的模板文件。
- 在这个模板文件里,你放置的
{dede:list}标签,就会自动调用当前栏目的文章。
操作步骤:
-
创建栏目:
- 登录织梦后台 -> 核心 -> 频道模型 -> 单页频道管理 / 普通分类管理。
- 假设我们创建一个名为“技术分享”的栏目,其ID为
2。
-
指定栏目模板:
- 在“技术分享”栏目的编辑页面,找到“列表选项”。
- 在“列表模板”这一项,选择或上传一个你准备好的列表模板文件,
list_tech.html。
-
编辑模板文件:
- 打开
list_tech.html文件。 - 在文件中写入
{dede:list}- 关键点:这个模板文件是专门为“技术分享”(typeid=2)这个栏目服务的,所以这里的
{dede:list}无需任何参数,就会自动调用 typeid=2 的文章。 - 关键点:这个模板文件是专门为“技术分享”(typeid=2)这个栏目服务的,所以这里的
list_tech.html文件内容示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{dede:field.title/}_{dede:global.cfg_webname/}</title> </head> <body> <h1>{dede:field.title/}</h1> {dede:list pagesize='10'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span> </li> {/dede:list} <div class="dede_pages"> <ul>{dede:pagelist listsize="4"/}</ul> </div> </body> </html> - 打开
优点:
- 符合织梦的设计逻辑,代码最简洁。
- 后台管理清晰,每个栏目可以有不同的样式和布局。
使用 {dedarclist} 标签(灵活度最高)
{dede:list} 实际上是 {dedarclist} 的一个简写形式。{dedarclist} 功能更强大,明确支持 typeid 参数,可以在任何模板(包括首页、其他栏目页)中调用任意栏目的文章。
语法:
{dede:arclist typeid='' ...}
参数说明:
typeid='':指定栏目ID,可以写多个ID,用英文逗号隔开,如typeid='1,2',如果为空,则表示调用所有栏目的文档。row='':调用文章数量,len='':` 标题长度。orderby='':排序方式,如pubdate(发布时间),click(点击量),id(文章ID) 等。idlist='':调用指定ID的文章,多个ID用逗号隔开,优先级高于typeid。
使用场景示例:
假设你想在首页(index.html)上同时调用“技术分享”(typeid=2)和“行业资讯”(typeid=3)这两个栏目的文章。
index.html 文件内容示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:global.cfg_webname/}</title>
</head>
<body>
<h1>首页</h1>
<!-- 调用技术分享栏目下的最新5篇文章 -->
<h2>技术分享</h2>
{dede:arclist typeid='2' row='5' titlelen='30' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
<hr>
<!-- 调用行业资讯栏目下的最新5篇文章 -->
<h2>行业资讯</h2>
{dede:arclist typeid='3' row='5' titlelen='30' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</body>
</html>
优点:
- 极其灵活,不受当前页面栏目的限制。
- 可以实现跨栏目调用,制作聚合页非常方便。
使用SQL查询标签(功能最强大,风险也最高)
当 {dede:arclist} 无法满足复杂需求时(需要根据自定义字段、特定时间范围等条件查询),可以直接使用 {dede:sql} 标签执行原生SQL语句。
语法:
{dede:sql sql=''}
使用场景示例: 调用“技术分享”(typeid=2)栏目下,点击量最高的10篇文章。
list_tech.html 或任何页面文件中的示例:
<h2>技术分享 - 热门文章</h2>
{dede:sql sql="SELECT id, title, arcurl, click FROM `dede_archives` WHERE typeid=2 ORDER BY click DESC LIMIT 10"}
<li>
<a href="[field:arcurl/]" target="_blank">[field:title/]</a>
<span>点击:[field:click/]</span>
</li>
{/dede:sql}
⚠️ 重要警告:
- 安全风险:直接使用SQL有SQL注入的风险,请确保你的变量(如typeid)是可信的,或者做好过滤,对于动态typeid,需要非常小心。
- 性能问题:复杂的SQL查询会影响网站性能,尤其是在列表页这种高频调用的地方。
- 兼容性:SQL语句中的表名(如
dede_archives)和字段名在不同版本的织梦中可能不同,请根据你的实际情况修改。
优点:
- 功能最强大,可以实现任何复杂的查询逻辑。
- 绕过了织梦标签的封装,直接操作数据库。
总结与对比
| 方法 | 支持typeid | 优点 | 缺点 | 适用场景 | |
|---|---|---|---|---|---|
| 方法一 | {dede:list} |
间接支持(通过模板绑定) | 最标准、最简洁、最安全 | 灵活性差,只能在指定栏目模板内使用 | 标准的列表页,每个栏目一个模板文件。 |
| 方法二 | {dede:arclist} |
直接支持 | 灵活、强大、推荐 | 比 {dede:list} 稍显冗长 |
首页、聚合页、在任意位置调用其他栏目文章。 |
| 方法三 | {dede:sql} |
直接支持(通过SQL语句) | 功能最极致 | 有安全风险、性能问题、不兼容风险 | 复杂的、有特殊需求的查询,且开发者对织梦和SQL非常熟悉。 |
最终建议:
- 制作常规的栏目列表页:请使用 方法一,这是织梦的最佳实践。
- 需要在首页或其他地方调用指定栏目文章:请优先使用 方法二 (
{dede:arclist}),这是最常用且最灵活的解决方案。 - 只有当
{dede:arclist}无法满足需求时,才考虑使用 方法三 ({dede:sql}),并务必注意安全和性能问题。
