dede相关文章标签怎么调用?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

使用官方提供的 {dede:likearticle} 标签(最常用、最推荐)

这是织梦官方内置的标签,专门用于调用相关文章,它非常方便,功能也足够强大,能满足大部分需求。

dede 相关文章调用标签
(图片来源网络,侵删)

基础用法

将以下代码放在文章内容页(article_article.htm)模板的任何你希望显示相关文章的位置即可。

{dede:likearticle}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:likearticle}
  • [field:arcurl/]:文章的链接地址。
  • [field:title/]:文章的标题。

标签属性详解

{dede:likearticle} 标签支持多种属性,可以让你精确控制相关文章的显示方式。

  • row='10':显示的文章数量,默认为 10 篇。
  • col='1':每行显示的列数,默认为 1(即单列),len='30'的长度,超过这个字数会被截断并添加...`。
  • infolen='160':文章摘要的长度(如果调用摘要的话)。
  • orderby='click':排序方式。
    • click:按点击量排序(默认)。
    • pubdate:按发布时间排序。
    • rand:随机排序。
  • typeid='0':指定栏目 ID。
    • 0:不限制栏目(默认,会从全站查找)。
    • 数字:只显示指定栏目 ID 下的文章。
    • 数字1,数字2:显示多个指定栏目下的文章。
  • channelid='1':指定模型 ID。1 代表文章模型,2 代表图集模型等,默认为 1
  • imgwidth='120':如果调用文章缩略图,设置图片宽度。
  • imgheight='90':如果调用文章缩略图,设置图片高度。
  • textlen='100':显示文章正文的长度,超出部分截断。

综合示例

假设我们要调用 8 篇相关文章,按发布时间排序,并且只显示当前文章所在栏目的文章,同时显示标题和缩略图。

<h3>相关文章</h3>
<ul class="related-article">
    {dede:likearticle row='8' col='1' titlelen='30' orderby='pubdate' typeid=''}
        <li>
            <a href="[field:arcurl/]">
                <img src="[field:picname/]" alt="[field:title/]" width="120" height="90" />
                <span>[field:title/]</span>
            </a>
        </li>
    {/dede:likearticle}
</ul>

注意typeid='' 留空表示不限制栏目,如果你只想调用当前文章所在栏目的,可以删除这个属性或者留空,如果你想在所有栏目中查找,可以明确写上 typeid='0'

dede 相关文章调用标签
(图片来源网络,侵删)

使用 SQL 查询标签 {dede:sql}(高级、灵活)

当官方的 {dede:likearticle} 标签无法满足你的特殊需求时(需要根据非常复杂的条件进行关联),你可以使用更底层的 {dede:sql} 标签直接执行 SQL 查询。

工作原理

通过 SQL 语句,我们可以手动指定如何查找“相关”的文章,最常用的相关逻辑是:根据文章标签,即,找出与当前文章拥有相同标签的其他文章。

示例代码(基于标签关联)

将以下代码放在你的模板文件中:

{dede:sql sql="
    SELECT a.id, a.title, a.arcurl, a.litpic
    FROM dede_archives a
    JOIN dede_taglist t ON a.id = aid
    JOIN (
        SELECT tagid FROM dede_taglist WHERE aid = ~id~
    ) AS my_tags ON t.tagid = my_tags.tagid
    WHERE 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}

代码解释:

dede 相关文章调用标签
(图片来源网络,侵删)
  1. SELECT a.id, a.title, a.arcurl, a.litpic: 从 dede_archives 表(别名为 a)中选择文章的基本信息。
  2. JOIN dede_taglist t ON a.id = aid: 关联 dede_archives 表和 dede_taglist 表(文章标签关联表),通过文章 ID (aid) 进行连接。
  3. JOIN (SELECT tagid FROM dede_taglist WHERE aid = ~id~) AS my_tags ...: 这是一个子查询,它会先找出当前文章 (~id~ 是织梦的变量,代表当前文章ID) 的所有 tagid
  4. WHERE a.id != ~id~: 排除当前文章本身,避免重复。
  5. GROUP BY a.id: 确保每个相关文章只显示一次。
  6. ORDER BY a.pubdate DESC LIMIT 0, 10: 按发布时间倒序排列,并只取前 10 条结果。

优点

  • 极其灵活,可以实现任何你想到的关联逻辑(如按关键词、按作者等)。
  • 性能可能比官方标签更优,因为你可以精确控制查询的字段和条件。

缺点

  • 需要你懂一些 SQL 语句。
  • 如果数据库表结构发生变化,代码可能会失效。

修改官方标签的底层逻辑(进阶)

如果你发现官方的 {dede:likearticle} 标签算法不理想(比如它默认是按关键字匹配,但匹配效果不好),你可以直接修改其核心 PHP 文件,让它使用你想要的算法,比如上面提到的“按标签匹配”。

操作步骤:

  1. 找到文件: 打开织梦的 /include/taglib/likearticle.lib.php 文件,这个文件就是 {dede:likearticle} 标签的核心逻辑所在。

  2. 修改代码: 在这个文件中,找到关键的 SQL 查询部分,默认的查询可能类似于 ... AND ( CONCAT(arc.keywords,',',arc.title) LIKE '%".$keyword."%' ) ... 这样的模糊匹配。

    你可以将这部分逻辑替换为你自己写的 SQL,比如替换成上面方法二中提到的“按标签匹配”的 SQL 语句(需要做一些变量适配)。

  3. 保存并测试: 修改后,保存文件,清除一下织梦的缓存(后台 -> 系统 -> 清除缓存),然后刷新文章页面查看效果。

优点

  • 从根本上改变了官方标签的行为,一劳永逸。
  • 保持了标签调用的简洁性。

缺点

  • 直接修改核心文件,升级织梦版本时可能会被覆盖,需要重新修改。
  • 对 PHP 代码能力有一定要求。

总结与推荐

方法 优点 缺点 适用场景
{dede:likearticle} 简单、官方、稳定、属性丰富 算法固定,可能不够智能 99% 的场景,强烈推荐作为首选
{dede:sql} 极度灵活、可定制任何逻辑 需要懂 SQL、代码稍复杂、维护性差 官方标签无法满足的特殊需求,如按作者、按自定义字段关联
修改核心文件 从根本上优化,调用方式不变 升级会覆盖、有风险、需要技术能力 对官方算法极度不满,且不介意手动维护代码的开发者

给你的建议:

  1. 首先尝试使用方法一,通过调整 roworderbytypeid 等属性,看看是否能满足你的需求。
  2. 如果效果不理想,再考虑使用方法二,用 SQL 实现按标签关联,这通常比官方默认的关键字匹配效果好得多。
  3. 只有当你有很强的定制需求,并且不害怕修改核心文件时,才去考虑方法三
-- 展开阅读全文 --
头像
全国计算机二级C语言题库如何高效备考?
« 上一篇 02-17
织梦列表页五行一空格如何实现?
下一篇 » 02-17
取消
微信二维码
支付宝二维码

目录[+]