使用 arclist 标签(推荐)
arclist 是织梦最强大、最灵活的列表标签,虽然名字叫“列表”,但它完全可以用来调用单篇文章,这是官方推荐的方式,因为它经过了充分的封装,安全且易于扩展。

(图片来源网络,侵删)
核心参数
要调用指定ID的文章,你需要使用 idlist 这个参数。
idlist:一个用英文逗号 分隔的文章ID列表。'1,5,10'表示调用ID为1、5、10的三篇文章。
基本语法
{dede:arclist idlist='你的文章ID'}
<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:arclist}
完整示例
假设你想调用ID为 58 的文章,并显示标题、摘要和发布日期。
<h2>指定文章ID调用示例</h2>
{dede:arclist idlist='58' titlelen='50' infolen='200' orderby='id'}
<div class="article-item">
<h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
<div class="article-info">
发布时间:[field:pubdate function='MyDate("Y-m-d H:i:s", @me)'/]
</div>
<div class="article-summary">
[field:description function='cn_substr(@me, 200)'/]...
</div>
</div>
{/dede:arclist}
参数详解
| 参数 | 作用 | 示例 |
|---|---|---|
idlist |
核心参数,指定要调用的文章ID列表。 | idlist='58, 100, 200' |
row |
显示的文章数量,当 idlist 指定了多个ID时,此参数生效。 |
row='3' |
infolen 或 descriptionlen |
描述)的长度。 | infolen='200' |
orderby |
排序方式。idlist模式下默认按ID顺序,可设置为id。 |
orderby='id' |
channelid |
指定频道ID,默认为0(所有频道),建议指定为文章模型的ID(通常是1)。 | channelid='1' |
typeid |
指定栏目ID,如果调用的文章不属于该栏目,则不显示,可用于过滤。 | typeid='5' |
addfields |
额外调用自定义字段,如果文章有自定义字段,需要在这里指定。 | addfields='jiage,xinghao' |
使用 sql 标签(灵活但需谨慎)
当你需要更复杂的查询逻辑,或者 arclist 无法满足需求时,可以直接使用原生SQL语句进行查询,这种方法更灵活,但同时也需要你对织梦的数据库结构有一定了解,并且要注意SQL注入的风险。
核心语法
{dede:sql sql='SELECT * FROM `dede_archives` WHERE id = 你的文章ID LIMIT 1'}
<a href="[field:arcurl/]">[field:title/]</a>
<p>[field:pubdate function='MyDate("Y-m-d", @me)'/]</p>
{/dede:sql}
完整示例
调用ID为 58 的文章。

(图片来源网络,侵删)
<h2>使用SQL标签调用指定文章</h2>
{dede:sql sql='SELECT * FROM `dede_archives` WHERE id = 58'}
<div class="article-detail">
<h1>[field:title/]</h1>
<div class="meta">
发布时间:[field:pubdate function='MyDate("Y-m-d H:i:s", @me)'/]
</div>
<!-- 注意:sql标签不能直接调用body内容,需要联合查询 -->
<!-- 下面是一个更完整的联合查询示例 -->
</div>
{/dede:sql}
更完整的SQL示例(包含文章内容)
存储在 dede_addonarticle 表中(对于文章模型),而基本信息在 dede_archives 表,需要联合查询。
{dede:sql sql="
SELECT a.*, b.body
FROM `dede_archives` a
LEFT JOIN `dede_addonarticle` b ON a.id = b.aid
WHERE a.id = 58
LIMIT 1
"}
<h1>[field:title/]</h1>
<div class="article-content">
[field:body/]
</div>
{/dede:sql}
重要提示
- 表前缀:如果你的数据库表前缀不是默认的
dede_,请务必修改SQL语句中的表名。 - 安全性:如果文章ID来自用户输入(如URL参数),务必进行过滤或使用织梦提供的过滤函数,防止SQL注入,直接在模板中写死ID(如上面的示例)是安全的。
- 字段名:
[field:arcurl/]、[field:title/]等是织梦的底层字段处理函数,即使SQL查询中没有这些字段,织梦也会根据dede_archives表的结构自动处理,但对于body这样的自定义字段,必须确保SQL查询中包含了它。
总结与对比
| 特性 | arclist
| |
|---|---|---|
| 易用性 | 高,参数化设计,无需懂SQL。 | 低,需要编写SQL语句,了解表结构。 |
| 灵活性 | 中等,能满足大部分列表和单篇调用需求。 | 极高,可以执行任何复杂的查询。 |
| 安全性 | 高,官方封装,能有效防止SQL注入。 | 低,需开发者自行注意,有注入风险。 |
| 性能 | 良好,有缓存机制。 | 依赖数据库查询,无特殊优化。 |
| 适用场景 | 绝大多数情况,特别是调用单篇文章或简单列表。 | 特殊需求,如复杂条件查询、跨表关联查询等。 |
对于“调用指定文章ID”这个需求,强烈推荐使用 arclist,它更安全、更简单,并且符合织梦的设计规范,只有在 arclist 无法满足你的特定业务逻辑时,才考虑使用 sql
(图片来源网络,侵删)
