使用内置的 {dede:likearticle} 标签(最推荐、最简单)
这是 DedeCMS 官方提供的专门用于调用相关文章的标签,使用起来非常方便,功能也足够强大。

(图片来源网络,侵删)
标签基本语法
{dede:likearticle col='num' titlelen='30'}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:likearticle}
参数详解
col='num':每行显示的文章数量。col='3'表示一行显示3个标题。row='num':总共显示多少行。row='2'表示共显示 2 行,col='3',那么总共会显示 6 篇文章,通常只使用col参数即可,len='30'的长度,单位是汉字(一个汉字算2个字符),如果标题超过这个长度,将被截断并加上...`。infolen='100':文章简介的长度。orderby='rand':文章排序方式。orderby='hot'或orderby='click':按点击量(热度)排序。orderby='pubdate':按发布时间排序。orderby='rand':随机排序。
aid='当前文章ID':指定当前文章的ID,系统会根据这个ID查找相关文章,通常情况下,这个参数可以省略,标签会自动获取当前文章的ID。typeid='0':指定相关文章的栏目ID。0表示不限栏目,可以在所有栏目中查找,如果你只想在特定栏目中查找,可以设置typeid='栏目ID'。channelid='1':指定模型ID。1代表文章模型,2代表图集模型等,默认为1。
完整示例
假设你想在文章内容页(article_article.htm 模板)的底部调用5篇相关文章,按点击量排序,标题长度限制在25个汉字。
<div class="related-article">
<h3>相关文章</h3>
<ul>
{dede:likearticle row='5' titlelen='25' orderby='click'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="view-count">([field:click/])</span>
</li>
{/dede:likearticle}
</ul>
</div>
优点:
- 官方支持:稳定可靠,与系统结合紧密。
- 使用简单:无需额外代码,一个标签搞定。
- 功能齐全:支持多种排序、数量控制等。
缺点:
- 默认的“相关”算法是基于关键词匹配的,如果关键词设置不当,效果可能不理想。
通过SQL查询自定义调用(最灵活、性能最佳)
当内置的 {dede:likearticle} 标签无法满足你的特殊需求时(你想根据自定义字段、标签等来关联文章),或者为了追求极致的性能(因为内置标签每次都会执行一次数据库查询),你可以使用 {dede:sql} 标签直接进行SQL查询。

(图片来源网络,侵删)
实现原理
- 获取当前文章的关键词。
- 根据关键词去
dede_archives表(文章主表)中查询包含相同关键词的其他文章。 - 排除掉当前文章本身。
完整示例
页模板中,将以下代码放在你需要的位置:
<div class="related-article">
<h3>基于关键词的相关文章</h3>
<ul>
{dede:sql sql="
SELECT a.id, a.title, a.typeid, a.click, a.pubdate
FROM dede_archives a
JOIN (
SELECT keywords FROM dede_archives WHERE id = ~id~
) AS b ON a.keywords LIKE CONCAT('%', b.keywords, '%')
WHERE a.id != ~id~ AND a.arcrank > -1
ORDER BY a.click DESC
LIMIT 5
"}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="view-count">([field:click/])</span>
</li>
{/dede:sql}
</ul>
</div>
代码解析
SELECT ... FROM dede_archives a:从文章主表dede_archives查询。JOIN (SELECT keywords FROM dede_archives WHERE id = ~id~) AS b ON ...:这是一个子查询,它会先获取当前文章的关键词。~id~是 DedeCMS 的一个特殊变量,代表当前文章的ID。a.keywords LIKE CONCAT('%', b.keywords, '%'):这是核心关联逻辑,查找keywords字段中包含当前文章关键词的所有文章。WHERE a.id != ~id~:非常重要,排除掉当前文章本身,防止相关文章列表中显示自己。AND a.arcrank > -1:只显示已审核通过的文章。arcrank = -1通常表示未审核或回收站的文章。ORDER BY a.click DESC:按点击量降序排序,你也可以改成pubdate DESC按时间排序。LIMIT 5:限制只返回5条结果。[field:arcurl/]:在{dede:sql}标签中,DedeCMS 会自动根据查询出的id和typeid来生成文章链接,所以这个标签依然有效。
优点:
- 极致灵活:可以完全自定义关联逻辑,比如结合自定义字段、多关键词等。
- 性能可控:你可以通过优化SQL查询语句来获得比内置标签更好的性能。
- 功能强大:可以实现任何基于数据库的复杂关联。
缺点:
- 需要SQL知识:对不熟悉SQL的用户有一定门槛。
- 维护成本:如果未来DedeCMS的数据库表结构发生变化,这段代码可能需要修改。
调用同栏目的其他文章(最常用的一种“相关”)
在很多场景下,“相关文章”其实指的是“同栏目的其他文章”,这种调用非常简单,而且逻辑清晰。
使用 {dede:arclist}
{dede:arclist} 是 DedeCMS 最强大的列表标签,也可以用来调用当前栏目的其他文章。
<div class="related-article">
<h3>同栏目文章推荐</h3>
<ul>
{dede:arclist typeid='~typeid~' row='5' titlelen='25' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="pubdate">([field:pubdate function="MyDate('m-d', @me)"/])</span>
</li>
{dede:arclist}
</ul>
</div>
代码解析
typeid='~typeid~':~typeid~ 是另一个特殊变量,代表当前文章所在的栏目ID,通过这个参数,我们确保只调用当前栏目下的文章。
row='5':调用5篇文章。
orderby='pubdate':按发布时间排序,你也可以用 click 按点击量排序。
优点:
- 逻辑清晰:用户通常对同栏目的文章更感兴趣。
- 调用简单:使用最常用的
arclist
- 性能良好:
arclist 标签有良好的缓存机制。
缺点:
- 关联性弱:如果一个大栏目下文章主题差异很大,推荐效果可能不佳。
总结与建议
方法
标签/代码
优点
缺点
适用场景
方法一
{dede:likearticle}
最简单、官方支持、功能齐全
关联算法基于关键词,可能不精确
绝大多数情况下的首选,快速实现功能。
方法二
{dede:sql}
最灵活、性能最佳、可定制
需要SQL知识,维护成本稍高
对关联逻辑有特殊要求,或对性能有极致追求的网站。
方法三
{dede:arclist}
逻辑清晰、调用简单、性能好
关联性相对较弱
推荐“同栏目文章”的场景,这是用户最常见的需求。
给你的建议:
- 新手或快速实现:直接使用 方法一
{dede:likearticle},它已经能满足大部分需求。
- 追求用户体验:在文章页同时使用 方法三
{dede:arclist}(同栏目推荐)和 方法一 {dede:likearticle}(关键词相关),给用户更多选择。
- 高级开发者或特定需求:如果默认的关键词匹配效果不好,或者你想实现更复杂的“标签云”式关联,方法二
{dede:sql} 是你的不二之选。
希望这些详细的解释和示例能帮助你完美地实现 DedeCMS 5.7 的相关文章调用功能!
{dede:arclist} 是 DedeCMS 最强大的列表标签,也可以用来调用当前栏目的其他文章。
<div class="related-article">
<h3>同栏目文章推荐</h3>
<ul>
{dede:arclist typeid='~typeid~' row='5' titlelen='25' orderby='pubdate'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span class="pubdate">([field:pubdate function="MyDate('m-d', @me)"/])</span>
</li>
{dede:arclist}
</ul>
</div>
代码解析
typeid='~typeid~':~typeid~是另一个特殊变量,代表当前文章所在的栏目ID,通过这个参数,我们确保只调用当前栏目下的文章。row='5':调用5篇文章。orderby='pubdate':按发布时间排序,你也可以用click按点击量排序。
优点:
- 逻辑清晰:用户通常对同栏目的文章更感兴趣。
- 调用简单:使用最常用的
arclist- 性能良好:
arclist标签有良好的缓存机制。 - 性能良好:
缺点:
- 关联性弱:如果一个大栏目下文章主题差异很大,推荐效果可能不佳。
总结与建议
| 方法 | 标签/代码 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 方法一 | {dede:likearticle} |
最简单、官方支持、功能齐全 | 关联算法基于关键词,可能不精确 | 绝大多数情况下的首选,快速实现功能。 |
| 方法二 | {dede:sql} |
最灵活、性能最佳、可定制 | 需要SQL知识,维护成本稍高 | 对关联逻辑有特殊要求,或对性能有极致追求的网站。 |
| 方法三 | {dede:arclist} |
逻辑清晰、调用简单、性能好 | 关联性相对较弱 | 推荐“同栏目文章”的场景,这是用户最常见的需求。 |
给你的建议:
- 新手或快速实现:直接使用 方法一
{dede:likearticle},它已经能满足大部分需求。 - 追求用户体验:在文章页同时使用 方法三
{dede:arclist}(同栏目推荐)和 方法一{dede:likearticle}(关键词相关),给用户更多选择。 - 高级开发者或特定需求:如果默认的关键词匹配效果不好,或者你想实现更复杂的“标签云”式关联,方法二
{dede:sql}是你的不二之选。
希望这些详细的解释和示例能帮助你完美地实现 DedeCMS 5.7 的相关文章调用功能!
