织梦tag如何调用相关文章?

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

核心原理

织梦的标签系统允许你通过SQL查询来获取数据,要调用相关文章,核心思路是:

织梦tag调用相关文章
(图片来源网络,侵删)
  1. 获取当前文章的标签:你需要知道当前文章的tag字段里存储了哪些标签。
  2. 根据标签查找其他文章:在数据库的dede_archives(文章主表)和dede_taglist(标签文章关联表)中进行查询,找到包含相同标签的其他文章。
  3. 排除当前文章:在查询结果中排除掉当前正在浏览的这篇文章,以避免重复。

使用内置的 likearticle 标签(最简单)

织梦内置了一个 {dede:likearticle} 标签,它就是专门用来调用相关文章的,这是最简单、最直接的方法。

适用场景:只需要一个简单的相关文章列表,对自定义要求不高。

代码示例

将以下代码放置在你需要显示相关文章的模板文件中(通常是 article_article.htm)。

织梦tag调用相关文章
(图片来源网络,侵删)
<h3>相关文章</h3>
<ul>
    {dede:likearticle titlelen='42' row='8'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:likearticle}
</ul>

参数说明: len='42'`:相关文章标题的长度,限制为42个汉字(一个汉字算2个字节)。

  • row='8':显示的相关文章数量,这里是8篇。
  • typeid='':可以指定只调用某个栏目下的相关文章,留空则表示全站。
  • innertext='':循环体内的模板代码,如上面的 <li>...</li>

优点

  • 使用简单,无需编写SQL。
  • 织梦官方提供,兼容性较好。

缺点

  • 自由度较低,无法进行更复杂的筛选或排序。
  • 默认的匹配算法可能不够精确。

使用 arclist 标签 + 自定义SQL(推荐,更灵活)

这是最常用且最灵活的方法,它通过 arclist 标签的 sql 属性来执行自定义的SQL查询,从而精确控制相关文章的获取逻辑。

适用场景:需要对相关文章进行排序、按栏目筛选、排除特定栏目等高级操作。

代码示例

<h3>相关文章</h3>
<ul>
    {dede:arclist row='10' titlelen='40' orderby='rand'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
</ul>

等等,上面的代码不对! 这只是一个普通的随机文章列表,我们需要在 sql 属性中写正确的查询逻辑。

正确的SQL实现

<h3>相关文章</h3>
<ul>
    {dede:sql sql='
        SELECT a.id, a.title, a.typeid, a.litpic, a.pubdate
        FROM dede_archives a
        JOIN dede_taglist t ON a.id = aid
        WHERE t.tag IN (
            SELECT tag FROM dede_taglist WHERE aid = ~id~
        )
        AND a.id <> ~id~
        GROUP BY a.id
        ORDER BY a.pubdate DESC
        LIMIT 0, 10
    '}
        <li>
            <a href='[field:arcurl/]'>[field:title/]</a>
        </li>
    {/dede:sql}
</ul>

SQL语句详解

  1. SELECT a.id, a.title, ...:从文章主表 dede_archives(别名为 a)中选择我们需要的字段。
  2. JOIN dede_taglist t ON a.id = aid:将文章表和标签关联表 dede_taglist(别名为 t)通过文章ID(aid)进行内连接。
  3. WHERE t.tag IN (SELECT tag FROM dede_taglist WHERE aid = ~id~):这是核心筛选条件,它查找 tag 字段与当前文章标签相同的所有记录。
    • ~id~ 是织梦模板中的特殊变量,会被自动替换为当前文章的ID。
  4. AND a.id <> ~id~非常重要,排除当前文章本身,避免显示自己。
  5. GROUP BY a.id:因为一个文章可能有多个标签,连接后可能会出现重复的文章,所以按文章ID分组去重。
  6. ORDER BY a.pubdate DESC:按发布时间降序排列,让最新的文章排在前面,你也可以使用 rand() 随机排序。
  7. LIMIT 0, 10:限制只返回10条结果。

优点

  • 非常灵活:可以自由编写SQL,实现任何复杂的查询逻辑。
  • 性能可控:可以精确控制查询的字段和条件,避免不必要的查询。
  • 功能强大:可以轻松实现按栏目、按时间、按随机等多种排序方式。

缺点

  • 需要了解基本的SQL语句。
  • 如果网站文章和标签数据量巨大,此SQL可能会对数据库造成一定压力(通常影响不大)。

使用 loop 标签 + 自定义SQL(与方法二类似)

loop 标签比 arclist 更底层,它直接执行一个SQL并循环输出结果,当 arclist 无法满足需求时,可以使用 loop

代码示例

<h3>相关文章</h3>
<ul>
    {dede:loop table='dede_archives a JOIN dede_taglist t ON a.id = aid'
        sort='a.pubdate DESC'
        row='10'
        if='t.tag IN (SELECT tag FROM dede_taglist WHERE aid = ~id~) AND a.id <> ~id~'}
        <li>
            <!-- 注意:这里需要手动拼接URL -->
            <a href='[field:global.cfg_phpurl/]/view.php?aid=[field:id/]'>[field:title/]</a>
        </li>
    {/dede:loop}
</ul>

参数说明

  • table='...':直接指定要查询的表和连接条件。
  • sort='...':排序方式。
  • row='10':返回记录数。
  • if='...':查询的WHERE条件。

arclist 的区别

  • loop 更加底层,直接操作表。
  • arclist 封装了更多织梦内部逻辑(如URL规则、栏目缓存等),通常更方便。
  • loop 中,URL可能需要手动拼接,而 arclist 会自动处理 [field:arcurl/]

建议:在大多数情况下,优先使用方法二(arclist + sql属性),因为它更简洁,且能更好地利用织梦的内置功能。


总结与建议

方法 优点 缺点 推荐度
likearticle 极其简单,开箱即用 不够灵活,自定义能力差 ⭐⭐⭐ (适合新手或简单需求)
arclist + SQL 非常灵活,功能强大,性能可控 需要编写SQL语句 ⭐⭐⭐⭐⭐ (强烈推荐,是专业开发者的首选)
loop + SQL 底层,直接控制SQL 使用稍复杂,URL需手动处理 ⭐⭐⭐ (当 arclist 无法满足时使用)

最终建议

对于绝大多数网站,使用方法二(arclist 结合自定义SQL)是最佳实践,它既保持了代码的简洁性,又提供了足够的灵活性和性能,能够完美满足各种复杂的相关文章调用需求。

注意事项

  • 表前缀:如果你的数据库表前缀不是默认的 dede_,请记得将SQL语句中的 dede_ 替换成你自己的表前缀。
  • 缓存:相关文章列表可以考虑加上缓存功能,以减少数据库查询次数,提升网站速度,可以在标签中加入 cache='3600'(缓存3600秒)等属性。
-- 展开阅读全文 --
头像
strcpy在C语言中具体指什么?
« 上一篇 02-07
Linux下C语言编程环境如何快速搭建与配置?
下一篇 » 02-07

相关文章

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

目录[+]