使用织梦官方提供的 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版本为例):
-
找到核心文件: 打开织梦的
/include/taglib/hotwords.lib.php文件,这个文件就是hotwords标签的解析逻辑。
(图片来源网络,侵删) -
修改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; } -
修改模板标签: 你可以在模板中像这样使用:
{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%的热门关键词调用需求,只有在方法一无法满足你的特定要求时,再考虑使用方法二或方法三。
