织梦热门关键词如何调用?

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

使用织梦官方提供的 hotwords 标签(最简单、最推荐)

这是织梦内置的标签,专门用于调用热门搜索词,使用起来非常方便,无需修改任何文件。

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

标签语法:

{dede:hotwords num='10' subday='30' maxlength='20'}
    <a href='[field:link/]'>[field:name/]</a>
{/dede:hotwords}

参数说明:

  • num: 调用关键词的数量。num='10' 表示调用10个热门关键词。
  • subday: 统计关键词热度的时间范围(单位:天)。subday='30' 表示统计最近30天内用户搜索过的关键词,如果设置为 0,则表示统计所有时间。
  • maxlength: 关键词的最大显示长度,如果关键词过长,会被截断,避免影响页面布局。maxlength='20' 表示最多显示20个字符。
  • link: 链接格式。[field:link/] 会自动生成一个指向搜索结果页的链接,格式通常是 search.php?kw=关键词
  • name: 关键词名称。[field:name/] 就是关键词本身。

示例:调用10个最近7天内最热门的关键词,并用逗号隔开

{dede:hotwords num='10' subday='7' maxlength='20'}
    <a href='[field:link/]'>[field:name/]</a>
    {/dede:hotwords}

优点:

  • 无需修改文件:直接在模板文件中使用,非常安全。
  • 官方支持:稳定可靠,符合织梦的数据结构。
  • 使用简单:参数清晰,易于上手。

使用SQL直接查询数据库(最灵活、最强大)

当官方标签无法满足你的特殊需求时(你想按自定义的权重排序,或者关联其他数据表),可以直接使用SQL查询。

标签语法:

{dede:sql sql='SELECT * FROM dede_search_keywords ORDER BY count DESC LIMIT 0,10'}
    <a href='/search.php?kw=[field:keyword/]'>[field:keyword/]</a>
{/dede:sql}

代码详解:

  • {dede:sql ...}: 织梦执行自定义SQL的标签。
  • sql='...': SQL语句字符串。
  • *`SELECT FROM dede_search_keywordsdede_search_keywords是织梦存储用户搜索记录的数据表。*表示选择所有字段,我们只需要keyword(关键词) 和count` (搜索次数) 字段。
  • ORDER BY count DESC: 这是关键。count 是记录搜索次数的字段,DESC 表示降序排列,这样就能得到搜索次数最多的关键词。
  • LIMIT 0,10: 限制查询结果的数量,从第0条开始,取10条,这和 num='10' 的效果一样。
  • [field:keyword/]: 在循环中,使用 [field:字段名/] 来获取数据表中的值,这里的字段名是 keyword

进阶示例:调用热门关键词并显示搜索次数

{dede:sql sql='SELECT keyword, count FROM dede_search_keywords ORDER BY count DESC LIMIT 0,10'}
    <a href='/search.php?kw=[field:keyword/]'>[field:keyword/] ([field:count/])</a>
{/dede:sql}

优点:

  • 高度灵活:可以完全控制SQL查询逻辑,实现任何复杂的排序和筛选。
  • 性能可控:对于大数据量,可以针对性地优化查询。

缺点:

织梦热门关键词调用
(图片来源网络,侵删)
  • 需要了解数据库结构:必须知道表名和字段名。
  • 有一定风险:错误的SQL可能导致网站出错。

修改官方标签以增加新功能(高级用法)

如果你觉得官方的 hotwords 标签功能不够用,但又不想直接写SQL,可以修改织梦的核心文件来扩展它的功能。

场景示例:我们想让 hotwords 标签也能像方法二一样,显示每个关键词的搜索次数。

操作步骤(以织梦DedeCMS 5.7版本为例):

  1. 找到核心文件: 打开织梦的 /include/taglib/hotwords.lib.php 文件,这个文件就是 hotwords 标签的解析逻辑。

    织梦热门关键词调用
    (图片来源网络,侵删)
  2. 修改PHP代码: 打开 hotwords.lib.php,找到类似下面的代码(版本不同可能略有差异):

    // 原始代码片段
    $ctp->LoadTemplate($typeid);
    $revalue = $ctp->GetResult();
    return $revalue;

    在它之前,你需要修改SQL查询,并传递新的字段(如 count)给模板。

    // 修改后的 hotwords.lib.php 文件示例
    function lib_hotwords(&$ctag, &$refObj)
    {
        global $dsql;
        $attlist = "num|10,subday|30,maxlen|20,action|";
        FillAttsDefault($ctag->CAttribute->Items, $attlist);
        extract($ctag->CAttribute->Items, EXTR_SKIP);
        $revalue = '';
        $limit = "0,{$num}";
        // 修改SQL,增加 count 字段
        $query = "SELECT keyword, count FROM `dede_search_keywords` WHERE `day` >= SUBDATE(CURDATE(), INTERVAL {$subday} DAY) ORDER BY count DESC LIMIT {$limit}";
        $dsql->Execute('hw', $query);
        while ($row = $dsql->GetArray('hw')) {
            $keyword = cn_substr($row['keyword'], $maxlen);
            $link = $GLOBALS['cfg_cmspath'] . "/search.php?kw=" . urlencode($keyword);
            // 将新的字段 count 也传递给模板
            $ctp = new DedeTagParse();
            $ctp->SetName('hotword');
            $ctp->SetTemplet($ctag->GetInnerText());
            $ctp->Assign('name', $keyword);
            $ctp->Assign('link', $link);
            $ctp->Assign('count', $row['count']); // 新增:传递搜索次数
            $ctp->Assign('typeid', $typeid);
            $ctp->ParseValue();
            $revalue .= $ctp->GetResult();
        }
        return $revalue;
    }
  3. 修改模板标签: 你可以在模板中像这样使用:

    {dede:hotwords num='10' subday='30' maxlength='20'}
        <a href='[field:link/]'>[field:name/] ([field:count/])</a>
    {/dede:hotwords}

优点:

  • 功能强大:可以深度定制标签行为。
  • 保持标签调用方式:模板代码依然简洁。

缺点:

  • 需要修改核心文件:升级织梦时,这些修改可能会被覆盖,需要重新修改。
  • 对PHP有一定要求:需要具备一定的PHP和织梦二次开发能力。

总结与推荐

方法 优点 缺点 适用场景
hotwords 简单、安全、无需修改文件 功能相对固定,不够灵活 绝大多数场景下的首选,能满足基本需求。
sql 极度灵活,功能强大 需要懂SQL,有潜在风险 需要特殊排序、关联查询等复杂功能时使用。
修改核心文件 功能可深度定制 升级会覆盖,需要二次开发能力 当官方标签和SQL都无法满足,且需要长期稳定功能时。

对于绝大多数用户,我强烈推荐使用【方法一:hotwords,它简单、直接、安全,足以应付99%的热门关键词调用需求,只有在方法一无法满足你的特定要求时,再考虑使用方法二或方法三。

-- 展开阅读全文 --
头像
dede水印图片路径如何正确设置?
« 上一篇 04-21
C语言digits是什么?怎么用?
下一篇 » 04-21

相关文章

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