页(article_article.htm)或列表页的详情中,自动获取与当前文章相关的其他文章,并将其以列表形式展示出来,这对于网站的内链建设、提升用户体验和 SEO 非常重要。

基础标签语法
最常用、最简单的相关新闻标签是 {dede:likearticle}。
基本格式:
{dede:likearticle}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:likearticle}
代码解释:
{dede:likearticle}:标签开始,表示开始调用相关新闻。{/dede:likearticle}:标签结束。[field:arcurl/]:调用文章的完整链接地址。[field:title/]:调用文章的标题。
默认情况下,这个标签会根据 当前文章的关键词 来查找相关文章,它会自动将文章内容中的关键词提取出来,然后去数据库中查找包含这些关键词的其他文章。
常用参数详解
通过给 {dede:likearticle} 添加参数,我们可以精确控制相关新闻的显示方式。
数量控制 (row)
用于设置显示多少条相关新闻。
- 语法:
row='数字' - 示例: 显示 8 条相关新闻
{dede:likearticle row='8'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
标题长度控制 (titlelen)
用于设置显示的文章标题最多多少个字符(一个汉字算一个字符)。
- 语法:
titlelen='数字' - 示例: 标题最多显示 30 个字符,超出部分用省略号代替(需要在CSS中配合
text-overflow: ellipsis;使用)
{dede:likearticle row='5' titlelen='30'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
排序方式 (orderby)
用于设置相关新闻的排序规则,这是非常实用的一个参数。
- 语法:
orderby='排序字段' - 常用值:
hot或click:按点击量(人气)从高到低排序。pubdate:按发布时间从新到旧排序。rand:随机排序,每次刷新页面相关新闻的顺序都会变。
- 示例: 按点击量排序,显示 6 条
{dede:likearticle row='6' orderby='click'}
<li><a href="[field:arcurl/]">[field:title/]</a> ([field:click/])</li>
{/dede:likearticle}
注意:
[field:click/]用于调用文章的点击次数。
排除当前文章 (idlist)
用于排除当前文章,避免显示自己,这个参数很重要,否则在极端情况下(比如一篇全新的文章,没有任何相关文章),可能会显示自己。
- 语法:
idlist='要排除的文章ID' - 如何获取当前文章ID? 使用
{dede:field.id/}可以获取当前文章的ID。 - 示例: 排除当前文章,并按随机顺序显示 5 条
{dede:likearticle row='5' orderby='rand' idlist='{dede:field.id/}'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
指定栏目 (typeid)
有时候我们希望相关新闻只限定在某个或某些栏目内。
- 语法:
typeid='栏目ID' - 示例: 只在当前文章的栏目(
{dede:field.typeid/})内查找相关文章
{dede:likearticle row='5' typeid='{dede:field.typeid/}'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
注意:如果同时使用了
typeid,相关文章的查找范围就会缩小到指定栏目内,可能找不到足够的结果。
底部分页 (subday)
这个参数比较特殊,它用于指定查找多少天内的文章。subday='30' 表示只查找最近 30 天内发布的文章。
- 语法:
subday='天数' - 示例: 只查找最近 7 天内发布的、按点击量排序的相关文章
{dede:likearticle row='5' orderby='click' subday='7'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
完整示例
下面是一个在实际模板中非常常见的完整写法,结合了多种参数,并加入了更丰富的信息。
场景: 在文章内容页右侧,显示一个“相关阅读”模块,包含标题、文章列表、发布时间和点击量。
HTML 代码 (article_article.htm 中):
<div class="related-news">
<h3>相关阅读</h3>
<ul>
{dede:likearticle row='6' titlelen='40' orderby='click' idlist='{dede:field.id/}'}
<li>
<span class="title"><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></span>
<span class="info">([field:pubdate function="MyDate('m-d', @me)"/])</span>
</li>
{/dede:likearticle}
</ul>
</div>
代码解析:
row='6':显示 6 条,len='40'`:标题最多 40 个字符。orderby='click':按点击量排序。idlist='{dede:field.id/}':排除当前文章。[field:pubdate function="MyDate('m-d', @me)"/]:调用发布时间,并使用function将其格式化为月-日的形式,12-25。"[field:title/]"给链接的title` 属性赋值,鼠标悬停时会显示完整标题,对SEO和用户体验有益。
高级用法:自定义 SQL 查询
如果默认的关键词匹配方式无法满足你的需求(你希望按文章标签、作者等关联),你可以使用 sql 参数来执行自定义的 SQL 查询。
语法: sql='你的SQL查询语句'
示例: 假设你有一个自定义的 tag 字段,你想查找与当前文章 tag 字段相同的其他文章。
{dede:likearticle sql='SELECT * FROM `dede_archives` WHERE `tag` = (SELECT `tag` FROM `dede_archives` WHERE id = ~id~) AND id != ~id~ ORDER BY click DESC LIMIT 0, 5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
重要说明:
~id~是 DedeCMS 的一个特殊占位符,在标签解析时会被自动替换为当前文章的 ID。- 使用
sql参数时,[field:arcurl/]、[field:title/]等常规字段依然有效。 - 这种方式非常灵活,但对 SQL 语句的编写能力有一定要求,且需要确保你的数据库表结构符合查询逻辑。
常见问题与解决
问题1:为什么我的相关新闻是空的?
- 原因1: 新文章,数据库里没有其他包含相同关键词的文章。
- 原因2: 文章的关键词是特殊字符、数字或英文,匹配不到。
- 原因3: 排除当前文章后,符合条件的文章不足
row设定的数量。 - 解决: 可以尝试放宽条件,比如减少
row的值,或者不使用idlist参数看看是否会出现自己。
问题2:相关新闻和我想象的不一样。
- 原因: 默认的关键词匹配算法可能不够智能。
- 解决:
- 手动设置关键词: 在文章编辑页面的“关键词”输入框中,手动输入用英文逗号隔开的关键词,DedeCMS 会优先使用这里的关键词进行匹配。
- 使用
orderby参数: 强制按点击量或时间排序,而不是依赖关键词。 - 使用
typeid参数: 将范围限制在更小的栏目内。
希望这份详细的指南能帮助你完全掌握 DedeCMS 的相关新闻标签!
