使用系统自带的 {dede:likearticle} 标签(最推荐)
这是DedeCMS内置的功能,专门用于调用“相关文章”,其原理就是匹配当前文章的 keywords 字段,这是最简单、最标准的方法。

(图片来源网络,侵删)
基本语法
{dede:likearticle}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:likearticle}
常用属性详解
你可以通过添加属性来精确控制调用结果。
| 属性名 | 说明 | 示例 |
|---|---|---|
row |
调用文章的数量 | row='10' (调用10篇) |
col |
每行显示的列数 | col='2' (每行显示2篇,会自动用<li>或<dl>等标签换行) |
infolen |
简介/摘要长度 | infolen='100' (摘要最多显示100个字符) |
orderby |
排序方式 | orderby='pubdate' (按发布时间排序), orderby='hot' (按点击量排序), orderby='rand' (随机排序) |
idlist |
指定文章ID列表 | idlist='1,3,5,8' (只调用ID为1,3,5,8的文章,这是实现你需求的关键属性) |
keyword |
指定关键词 | keyword='织梦,DedeCMS' (调用关键词包含“织梦”或“DedeCMS”的文章) |
typeid |
指定栏目ID | typeid='5' (只在ID为5的栏目内查找) |
channelid |
指定模型ID | channelid='1' (只在文章模型中查找) |
subday |
指定天数内 | subday='30' (只调用30天内发布的文章) |
场景1:调用当前文章的“相关文章”(基于关键词)
这是 {dede:likearticle} 最经典的应用,在你的文章内容页模板(通常是 article_article.htm)中,加入以下代码:
<h3>相关文章</h3>
<ul class="related-article">
{dede:likearticle row='8' titlelen='40' orderby='rand'}
<li><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></li>
{/dede:likearticle}
</ul>
工作原理:当这个标签在文章内容页被解析时,DedeCMS会自动获取当前文章的 keywords 字段,然后去数据库中查找 keywords 字段包含相同关键词的其他文章。
场景2:直接指定关键词调用(回答你的核心问题)
如果你想在一个固定的页面(比如首页某个板块)调用包含特定关键词的文章,而不是依赖当前文章的关键词,你可以使用 keyword 属性。

(图片来源网络,侵删)
示例:在首页调用所有包含“织梦教程”关键词的文章
在你的首页模板(通常是 index.htm)中,加入以下代码:
<h3>织梦教程专题</h3>
<ul class="dede-tutorial">
{dede:likearticle keyword='织梦教程' row='6' titlelen='35' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{dede:likearticle}
</ul>
说明:
keyword='织梦教程':这里明确指定了要查找的关键词。- 如果一篇文章的
keywords字段是“织梦,教程,建站”,它同样会被匹配到。 - 你也可以用逗号隔开多个关键词,表示“或”的关系,
keyword='织梦,教程'会调用关键词包含“织梦”或者包含“教程”的所有文章。
使用 {dedarclist} 标签 + SQL语句(更灵活)
如果你觉得 {dede:likearticle} 的功能不够用,或者需要进行更复杂的查询,可以使用功能更强大的 {dede:arclist} 标签,并通过 innertext 属性配合自定义SQL。
这种方法的核心是利用DedeCMS的 arc_search 函数,它专门用来处理关键词的模糊匹配。
示例:调用包含“织梦”关键词的文章,并按点击量排序
{dede:arclist row='10' titlelen='40' orderby='click'}
{dede:field name='array' runphp='yes'}
$keywords = '织梦'; // 你要查找的关键词
$arcitle = @me;
$search_result = Search_keywords($arcitle['keywords'], $keywords);
if ($search_result) {
// 如果匹配成功,则输出此li的内容
@me = '<li><a href="'.$arcitle['arcurl'].'" title="'.$arcitle['title'].'">'.$arcitle['title'].'</a></li>';
} else {
// 如果匹配失败,则输出空,不显示此条
@me = '';
}
{/dede:field}
{/dede:arclist}
代码解析:
{dede:arclist}: 先正常调用文章列表。{dede:field name='array' runphp='yes'}: 对每篇文章的数据(存放在数组@me中)进行PHP处理。$keywords = '织梦';: 设置你要查找的目标关键词。Search_keywords($arcitle['keywords'], $keywords): 这是DedeCMS的核心函数,它检查文章自身的keywords是否包含你设定的$keywords。if ($search_result): 如果包含,则用PHP代码拼接出HTML标签并赋值给@me;如果不包含,则@me设为空字符串,该条目就不会显示。
使用自定义SQL(最高级,不推荐新手)
这种方法性能最好,但直接操作数据库,有一定风险,你需要确保你的关键词字段(通常是 keywords)是全文索引或者你知道如何进行高效的模糊查询。
示例:直接在模板中执行SQL
{dede:sql sql="
SELECT id, title, arcurl
FROM `#@__archives`
WHERE keywords LIKE '%织梦教程%'
AND arcrank > -1
ORDER BY click DESC
LIMIT 10
"}
<li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:sql}
说明:
#@__archives是DedeCMS数据表dede_archives的前缀,你的前缀可能不是dede_。keywords LIKE '%织梦教程%'是标准的SQL模糊查询。arcrank > -1是一个常用条件,表示只审核通过的文章。- 这种方法简单粗暴,但不灵活,如果网站更换了关键词字段名,或者修改了数据结构,这里的代码就会失效。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:likearticle} |
简单、标准、安全,官方支持 | 功能相对固定 | 绝大多数情况下的首选,特别是“相关文章”和指定关键词调用。 |
{dede:arclist} + PHP |
极其灵活,可结合所有arclist属性 |
代码稍复杂,需要懂一点PHP | 需要在复杂条件下调用,比如按某个自定义字段排序,并配合关键词筛选。 |
| 自定义SQL | 性能可能最高 | 不灵活、有风险,硬编码了表名和字段 | 对性能有极致要求,且查询逻辑非常固定,不会轻易改变的场景。 |
对于你的问题“dede指定关键词调用”,强烈推荐使用方法一({dede:likearticle}),因为它最符合DedeCMS的设计理念,也最稳定可靠,只有在它无法满足你的特殊需求时,才考虑使用方法二。
