使用 like 标签(最常用、最灵活)
这是织梦官方提供的最强大、最灵活的标签,专门用于实现“相关文章”这类功能,它可以在一个频道页(列表页、内容页)中,根据当前文章的关键字、栏目ID、ID范围等条件来查询并调用文章。

(图片来源网络,侵删)
标签语法
{dede:like row='10' titlelen='40' orderby=''}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:like}
主要参数说明
row='':调用文章的数量,row='8'表示调用8篇文章,len=''长度,例如titlelen='30'` 表示标题最多显示30个字符(中文字符)。orderby='':排序方式,这是实现“按关键字调用”的核心。keyword:按关键字匹配度排序(最推荐),它会优先显示与当前文章关键字最匹配的文章。hot或click:按点击量排序。pubdate:按发布时间排序。id:按文章ID排序。
typeid='':指定在某个栏目ID下调用。typeid='5'只在ID为5的栏目里查找。innertext='':自定义单条记录的HTML模板,默认是<a href='[field:arcurl/]'>[field:title/]</a>。aid='':指定文章ID,用于根据某篇特定文章的关键字来调用。
实战示例:在文章内容页调用“相关文章”
这是最经典的应用场景,当用户看完一篇文章后,在页面底部显示几篇与当前文章内容(关键字)相关的文章。
步骤:
- 打开你的文章内容页模板文件,通常位于
/templets/default/article_article.htm。 - 在你希望显示“相关文章”的位置(例如文章末尾),插入以下代码:
<div class="related-article">
<h3>相关文章</h3>
<ul>
{dede:like row='5' titlelen='35' orderby='keyword'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:like}
</ul>
</div>
代码解释:
row='5':调用5篇相关文章,len='35'`:标题最多显示35个字符,超出部分用省略号(需要在CSS中处理)。orderby='keyword':关键参数,告诉织梦根据当前文章的关键字来查找并按匹配度排序。[field:arcurl/]:文章的链接地址。[field:title/]:文章的标题。
使用 arclist 标签配合 keyword 属性
arclist 是织梦最基础的列表调用标签,它也可以通过 keyword 属性来按关键字调用文章,但它的功能比 like 标签要简单一些,主要用于在列表页或特定页面按指定关键字调用。

(图片来源网络,侵删)
标签语法
{dede:arclist keyword='织梦,教程' row='10' titlelen='40'}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
主要参数说明
keyword='':核心参数,这里直接填入你想要搜索的关键字,多个关键字用英文逗号 分隔,它会在文章标题和内容中搜索这些关键字。row='',titlelen=''等参数与like标签用法相同。
与 like 标签的区别
| 特性 | like
| |
|---|---|---|
| 主要用途 | 页或列表页,基于当前环境(如当前文章、当前栏目)调用相关内容。 | 在任何页面,基于手动指定的条件(如指定关键字、栏目)调用内容。 |
| 关键字来源 | 可以自动获取当前文章的关键字(orderby='keyword'),也可以手动指定。 |
必须手动指定关键字(keyword='')。 |
| 灵活性 | 非常高,可以结合当前文章的ID、栏目ID、关键字等多个维度进行智能匹配。 | 相对较低,主要用于固定的、已知的条件查询。 |
| 推荐场景 | 页的相关文章、列表页下的相关推荐。 | 标签云页面、搜索结果页、某个固定关键词的聚合页。 |
使用SQL直接查询(高级用法)
当你需要实现更复杂的逻辑,或者上述标签无法满足需求时,可以直接在模板中执行SQL查询,这种方法性能最好,但需要对SQL语法和织梦的数据表结构有一定了解。
织梦文章关键字表结构
织梦的文章关键字存储在 dede_archives 表的 keywords 字段中,这是一个文本字段,存储的是由逗号分隔的关键字字符串,织梦,dedecms,教程。
示例:获取与当前文章关键字匹配的其他文章
这个例子需要在内容页模板中使用,并且需要结合PHP。
{dede:php}
// 1. 获取当前文章的关键字
$keywords = $this->Fields['keywords'];
// 2. 如果关键字不为空
if (!empty($keywords)) {
// 将关键字字符串转换为数组,并过滤空值
$keywordArray = array_filter(explode(',', $keywords));
// 如果关键字数组不为空
if (!empty($keywordArray)) {
// 3. 构建SQL查询
// 查询条件:关键字包含数组中的任意一个,并且文章ID不能是当前文章ID
$keywordLikeArray = array();
foreach ($keywordArray as $k) {
$keywordLikeArray[] = "keywords LIKE '%{$k}%'";
}
$keywordLikeStr = implode(' OR ', $keywordLikeArray);
$sql = "SELECT id, title, arc FROM `dede_archives` WHERE ({$keywordLikeStr}) AND id!={$this->Fields['id']} ORDER BY rand() LIMIT 5;";
// 4. 执行查询
$dsql->SetQuery($sql);
$dsql->Execute('me');
// 5. 循环输出结果
echo '<div class="related-article-sql"><h3>SQL实现的相关文章</h3><ul>';
while ($row = $dsql->GetArray('me')) {
$arcurl = GetOneArchive($row['id']);
echo "<li><a href='{$arcurl['arcurl']}' title='{$row['title']}'>{$row['title']}</a></li>";
}
echo '</ul></div>';
}
}
{/dede:php}
代码解释:

(图片来源网络,侵删)
$this->Fields['keywords']:获取当前文章的关键字。explode(',', $keywords):将关键字字符串(如 "a,b,c")拆分成数组['a', 'b', 'c']。- 构建一个
LIKE查询条件,确保文章的关键字字段中包含数组中的任意一个。 id!={$this->Fields['id']}:排除掉当前文章本身。ORDER BY rand() LIMIT 5:随机排序并取出5条结果。GetOneArchive($row['id']):这是一个织梦内置函数,用于根据文章ID获取文章的详细信息,包括URL。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
like |
简单、灵活、官方推荐,功能强大,无需写SQL。 | 灵活性略低于原生SQL。 | 99% 的场景,尤其是页的相关文章。 |
arclist |
简单,适用于固定条件的调用。 | 无法基于当前环境动态获取关键字。 | 标签云、搜索页、已知关键字的聚合页。 |
| SQL 查询 | 性能最高,功能最强大,可实现任何复杂逻辑。 | 需要懂SQL和PHP,代码量多,有一定维护成本。 | 复杂的数据统计、特殊需求、对性能有极致要求的场景。 |
对于绝大多数用户来说,强烈推荐使用方法一(like,它能完美解决你在文章内容页调用相关文章的需求,并且代码简洁、易于维护。
