织梦如何实现关键词关连文章?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 织梦建站 正文

页(article_article.htm)中,提取当前文章的关键词,然后根据这些关键词去数据库中查找包含相同关键词的其他文章,并将它们列表展示出来。

织梦 关键词关连文章
(图片来源网络,侵删)

实现这个功能主要有两种方法:

  1. 使用织梦内置的标签(最简单,但灵活性稍差)。
  2. 使用自定义SQL标签(最灵活,功能最强大,推荐)。

下面我将分步介绍这两种方法。


使用织梦内置的 {dede:likearticle}

织梦自带了一个非常方便的标签 likearticle,专门用于实现相关文章推荐,它就是基于关键词来匹配的。

标签基本用法

在你需要显示相关文章的模板文件中(通常是 article_article.htm),在文章内容下方或其他合适的位置,加入以下代码:

织梦 关键词关连文章
(图片来源网络,侵删)
<h3>相关文章推荐</h3>
<ul class="related-article-list">
    {dede:likearticle row='10' titlelen='42'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:likearticle}
</ul>

标签参数说明

  • row='10':显示的相关文章数量,你可以根据需要修改,len='42'`:相关文章标题的长度,单位是汉字(一个汉字算2个字符),防止标题过长影响排版。
  • innertext='':如果你想在每条相关文章外面包裹特定的HTML标签,可以在这里设置。innertext='<li><a href="[field:arcurl/]">[field:title/]</a></li>',那么上面的 <li> 标签就可以省略。
  • typeid='':可以指定只显示某个栏目下的相关文章,留空则表示全站。
  • orderby='':排序方式,可选值有 rand (随机), click (按点击量), pubdate (按发布日期),默认是 rand

优点和缺点

  • 优点
    • 使用极其简单,一行标签搞定。
    • 无需修改任何核心文件,升级织梦时不会被覆盖。
  • 缺点
    • 功能有限:它只能基于文章的 keywords 字段进行匹配,无法进行更复杂的查询(比如排除当前文章、按权重排序等)。
    • 灵活性差:自定义查询的能力较弱。

使用自定义SQL标签(强烈推荐)

这种方法功能更强大,可以实现更精细的控制,比如排除当前文章、按权重排序等,这是目前主流和推荐的做法。

第1步:修改文章内容页模板 (article_article.htm)

打开你的文章内容页模板文件,在 {dede:field.body/} 下面或其他你希望显示相关文章的位置,添加以下代码:

<h3>相关文章</h3>
<ul class="related-articles">
    {dede:sql sql="SELECT id,title,arcurl FROM dede_archives WHERE keywords regexp REPLACE('~field:keywords~',' ',',') AND id != ~id~ ORDER BY weight DESC, click DESC LIMIT 0,10"}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:sql}
</ul>

第2步:代码详解

我们来分解一下这段SQL代码,让你明白每一部分的作用:

{dede:sql sql="..."} 这是织梦的自定义SQL查询标签。

织梦 关键词关连文章
(图片来源网络,侵删)
  1. SELECT id,title,arcurl FROM dede_archives

    • id, title, arcurl:我们只需要文章的ID、标题和链接。
    • FROM dede_archives:从文章主表 dede_archives 中查询。注意:如果你的数据表前缀不是 dede_,请务必修改成你自己的表前缀!
  2. WHERE keywords regexp REPLACE('~field:keywords~',' ',',')

    • keywords:查询条件,匹配 keywords 字段。
    • regexp:正则表达式匹配,比 LIKE 更强大,可以匹配多个关键词。
    • REPLACE('~field:keywords~',' ',','):这是最核心的部分。
      • ~field:keywords~:这是织梦模板的变量占位符,在页面解析时,会被替换成当前文章keywords 字段内容,如果当前文章的关键词是 "织梦,CMS,教程",那么这里就会被替换成 "织梦,CMS,教程"。
      • REPLACE(..., ' ', ','):将关键词中的空格替换成逗号,因为 regexp 在匹配多个关键词时,通常用 (或) 或者 (逗号) 分隔,如果你的关键词是用空格分隔的,这一步就很有必要,如果你的关键词本身就是用逗号分隔的,可以简化为 regexp '~field:keywords~'
    • 整句话的意思是:查找 keywords 字段中包含当前文章任何一个关键词的文章。
  3. AND id != ~id~

    • ~id~:这是当前文章ID的占位符。
    • 这句非常重要,它排除了当前文章本身,确保推荐的文章是“其他”文章。
  4. ORDER BY weight DESC, click DESC

    • weight DESC:按文章的权重(weight 字段)从高到低排序,权重高的文章会优先显示。
    • , click DESC:如果权重相同,则按点击量(click 字段)从高到低排序。
    • 你可以根据需要修改排序规则,pubdate DESC (按发布时间)。
  5. LIMIT 0,10

    • 从第0条记录开始,取10条,也就是只显示10篇相关文章,你可以修改 10 来调整显示数量。

第3步:优化和注意事项

  • 性能考虑:如果网站文章非常多,regexp 操作可能会对数据库造成一定压力,但对于大多数中小型网站来说,影响微乎其微。
  • 关键词格式:确保你的文章关键词格式统一(比如都用逗号分隔),这样SQL查询会更稳定。
  • 表前缀:再次强调,请务必将 dede_archives 修改为你自己网站的数据表前缀。
  • 美观样式:上述代码只提供了HTML结构,你可以通过CSS来美化 .related-articles 的样式,使其与你的网站风格保持一致。

总结与对比

特性 方法一 ({dede:likearticle}) 方法二 ({dede:sql})
实现难度 非常简单,零代码基础可用 需要理解基本SQL和模板标签
功能灵活性 较低,功能固定 极高,可自定义查询条件、排序、排除项等
性能 织梦内部优化,性能尚可 取决于SQL语句复杂度和数据量,通常良好
推荐度 适合新手或快速实现 强烈推荐给所有用户,尤其是对功能有要求的

最终建议:

如果你只是想要一个简单的相关文章列表,用方法一足够了。

如果你希望获得更好的用户体验,比如排除当前文章、优先推荐权重高的文章,或者想学习更高级的织梦技巧,请毫不犹豫地选择方法二,它虽然多写几行代码,但带来的功能提升和掌控感是完全值得的。

-- 展开阅读全文 --
头像
C语言sendstring函数如何正确使用?
« 上一篇 03-01
dede交叉栏目怎么样
下一篇 » 03-01

相关文章

取消
微信二维码
支付宝二维码