织梦相同关键词如何实现高效调用?

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

这个功能非常实用,常用于制作“相关文章”模块,下面我将为您详细讲解实现方法,从简单到复杂,并提供最推荐的方案。

织梦相同关键词调用
(图片来源网络,侵删)

核心思路

  1. 获取当前文章的关键词:我们需要知道当前正在浏览的文章有哪些关键词。
  2. 构建查询条件:将获取到的关键词组合成一个SQL查询的WHERE子句,用于在数据库中查找匹配的文章。
  3. 执行查询并调用数据:使用织梦的标签(如{dede:arclist})来执行查询,并循环输出结果。

使用织梦自带的相关文章标签(最简单)

织梦CMS内置了一个非常方便的标签 {dede:likearticle},专门用于调用与当前文章相关的文章,它的原理就是基于文章的关键词进行匹配。

标签代码:

{dede:likearticle row='10' titlelen='42'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:likearticle}

参数说明:

  • row='10':调用10条相关文章,len='42'`:标题最多显示42个字符(一个汉字算2个字符)。
  • typeid='':可以指定特定栏目ID,留空则全站搜索。
  • innertext='':循环体内的模板代码。

优点:

织梦相同关键词调用
(图片来源网络,侵删)
  • 极其简单:无需任何代码修改,直接复制粘贴即可使用。
  • 效率较高:底层是经过优化的SQL查询。
  • 官方支持:最稳定、最推荐的方式。

缺点:

  • 灵活性较低:自定义能力不强,比如很难加入自定义字段、按时间排序等。

使用自定义SQL+{dede:arclist}标签(最灵活)

如果你需要更强大的自定义功能,比如修改排序方式、调用自定义字段等,可以手动编写SQL语句,并结合{dede:arclist}标签来实现。

实现步骤:

创建一个自定义宏标记(可选,但推荐)

为了避免在模板中写大段复杂的PHP代码,我们可以创建一个自定义宏标记来获取关键词。

织梦相同关键词调用
(图片来源网络,侵删)

在织梦后台,进入 “模板” -> “宏标记管理” -> “增加一个新的宏标记”

  • 宏名称getkeywords
  • 类型:定义为“标记
  • :输入以下PHP代码
global $dsql;
$id = isset($refObj->Fields['id']) ? $refObj->Fields['id'] : 0;
if($id > 0){
    $query = "SELECT keywords FROM dede_archives WHERE id = $id";
    $row = $dsql->GetOne($query);
    // 将关键词按逗号分割,并去除空格
    $keywords = empty($row['keywords']) ? '' : str_replace(' ', '', $row['keywords']);
    return $keywords;
}

注意dede_archives 是织梦默认的文章主表表名,如果你的表前缀修改过,请相应更改。

在模板中编写调用代码

你可以在文章详情页模板(通常是 article_article.htm)中使用这个宏标记和{dede:arclist}了。

<h3>相关文章</h3>
<ul>
    {dede:arclist 
        typeid='' 
        titlelen='42' 
        row='10' 
        orderby='pubdate' 
        keyword='[field:global name=autokeywords/]'
    }
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:arclist}
</ul>

代码解析:

  • {dede:arclist}:这是织梦用来调用文章列表的核心标签。
  • keyword='[field:global name=autokeywords/]':这是关键!
    • [field:global name=autokeywords/] 是织梦在文章页模板中内置的一个全局变量,它自动获取当前文章的关键词
    • 我们将这个变量值传递给arclist标签的keyword属性。arclist标签在接收到这个参数后,会自动将其转换为SQL的AND (keywords LIKE '%关键词1%' OR keywords LIKE '%关键词2%')这样的查询条件。
  • orderby='pubdate':按发布时间倒序排列,你也可以改成click(按点击量)等。
  • typeid='':留空表示在所有栏目中查找,如果只想在当前栏目查找,可以写 typeid='[field:typeid/]'

优点:

  • 灵活性极高:可以自由组合arclist的所有参数,实现各种复杂需求。
  • 代码清晰:使用内置变量autokeywords,比手动获取关键词更简洁。

缺点:

  • 相比likearticle标签,需要手动编写标签参数。

使用PHP代码直接查询(不推荐,仅作了解)

这种方法直接在模板文件里写PHP代码,虽然功能最强大,但破坏了模板的易用性,且存在安全风险,不推荐普通用户使用。

<h3>相关文章</h3>
<ul>
    <?php
    $keywords = '';
    if (isset($this->Fields['keywords'])) {
        $keywords = str_replace(' ', '', $this->Fields['keywords']);
    }
    if (!empty($keywords)) {
        $query = "SELECT id, title FROM dede_archives 
                  WHERE id!={$this->Fields['id']} AND (";
        $keyword_arr = explode(',', $keywords);
        foreach ($keyword_arr as $k) {
            $query .= " keywords LIKE '%{$k}%' OR";
        }
        $query = rtrim($query, 'OR') . ") ORDER BY pubdate DESC LIMIT 10";
        $dsql->SetQuery($query);
        $dsql->Execute();
        while ($row = $dsql->GetArray()) {
            echo "<li><a href='/plus/view.php?aid={$row['id']}'>{$row['title']}</a></li>";
        }
    }
    ?>
</ul>

总结与推荐

方法 优点 缺点 推荐度
{dede:likearticle} 简单、高效、稳定 灵活性低 ★★★★★ (首选)
{dede:arclist}+autokeywords 灵活、功能强大 需要了解arclist参数 ★★★★☆ (次选,用于特殊需求)
PHP代码直接查询 功能无限定制 破坏模板、不易维护、有风险 ★☆☆☆☆ (不推荐)

给你的建议:

  1. 如果你只是想要一个“相关文章”模块:直接使用 方法一 ({dede:likearticle}),这是最标准、最省事的做法。
  2. 如果你需要对相关文章进行特殊排序、调用自定义字段等:使用 方法二 ({dede:arclist} + autokeywords),它能满足你90%以上的自定义需求。

希望这个详细的解释能帮助你解决问题!

-- 展开阅读全文 --
头像
C语言基础入门免费视频哪里找?
« 上一篇 今天
C语言循环拼接字符串,如何高效实现?
下一篇 » 今天

相关文章

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

目录[+]