利用DedeCMS内置的“热门关键词”功能(最简单)
这是最直接、最简单的方法,但它统计的是全站搜索的热门关键词,而不是某个具体搜索结果页内的热门内容。

(图片来源网络,侵删)
实现步骤:
-
开启关键词功能:
- 登录DedeCMS后台,进入【系统】->【系统基本参数】->【核心设置】。
- 找到“是否开启关键字替换功能”选项,选择“是”。
- 找到“关键字 relevance
(搜索结果相关度)”,可以设置一个合适的值,比如5000`,这个值越高,搜索结果中包含关键词的文章权重越大。
-
在搜索页模板中调用热门关键词:
- 打开您的搜索页模板文件,通常位于
/templets/default/search.htm。 - 在您希望显示热门关键词的位置(例如搜索框下方或侧边栏),插入以下DedeCMS标签:
<div class="hot-keywords"> <h3>热门搜索</h3> <div> {dede:hotwords num='10' subday='30' /} </div> </div>- 标签参数说明:
num='10':显示的热门关键词数量。subday='30':统计最近30天的搜索记录。
- 打开您的搜索页模板文件,通常位于
优点:

(图片来源网络,侵删)
- 零代码,纯后台设置。
- 实现快速。
缺点:
- 不是“热门内容”,而是“热门关键词”。
- 显示的是全站的热门词,与当前用户的搜索词无关。
- 需要用户有实际的搜索行为才能统计到。
手动调用“点击最高”的相关文章(推荐)
这个方法更符合“热门内容”的定义,我们可以在搜索结果页,同时调用出与当前搜索词相关的、并且点击量最高的文章。
实现步骤:
-
修改搜索页模板 (
search.htm):- 打开
/templets/default/search.htm文件。 - 在
{dede:loop}标签(循环显示搜索结果的地方)旁边或下方,添加一个新的区块来显示热门相关内容。
<!-- 搜索结果列表 --> <div class="search-result-list"> <h2>搜索结果</h2> {dede:loop} <div class="result-item"> <a href="[field:arcurl/]">[field:title/]</a> <p>[field:description function='cn_substr(@me,100)'/]...</p> </div> {/dede:loop} </div> <!-- 热门相关内容 --> <div class="hot-related-content"> <h3>与“<strong>{dede:global name='keyword'/}</strong>”相关的热门内容</h3> <ul> {dede:arclist titlelen='42' row='8' orderby='click'} <li> <span class="hot-num">[field:global.autoindex/]</span> <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <span class="view-count">([field:click/]次阅读)</span> </li> {/dede:arclist} </ul> </div> - 打开
-
CSS样式美化(可选): 在您的CSS文件中添加一些样式,让布局更美观。
.hot-related-content { margin-top: 30px; padding: 15px; border: 1px solid #eee; background-color: #f9f9f9; } .hot-related-content h3 { font-size: 16px; border-bottom: 1px solid #ddd; padding-bottom: 10px; margin-bottom: 15px; } .hot-related-content ul { list-style: none; padding: 0; } .hot-related-content li { margin-bottom: 8px; line-height: 24px; } .hot-num { display: inline-block; width: 20px; height: 20px; line-height: 20px; text-align: center; background-color: #ff6600; color: #fff; border-radius: 2px; margin-right: 8px; } .view-count { color: #999; font-size: 12px; }
优点:
- 实现了真正的“热门内容”(按点击排序)。
- 代码简单,易于理解和修改。
- 不需要修改核心文件,升级安全。
缺点:
- 不够精确:它调用的是全站点击最高的文章,而不是与当前搜索词最相关的热门文章,搜索“织梦教程”,它可能显示的是全站点击最高的“织梦安装指南”,而不是与“教程”最相关的热门文章。
通过修改PHP文件实现精准的热门内容(功能最强)
这是最完美但也是最复杂的方法,我们需要修改DedeCMS的搜索PHP文件,使其在搜索的同时,能查询出与本次搜索词相关的、并且点击量最高的文章。
核心思路:
- 修改搜索处理文件
plus/search.php。 - 在执行常规搜索后,再执行一次额外的数据库查询。
- 这次查询的
WHERE条件要包含当前搜索的关键词,ORDER BY按点击量排序。 - 将查询到的热门文章数据传递给模板。
- 在模板中用新的标签调用这些数据。
详细步骤(需要一定的PHP和MySQL基础):
第1步:修改 plus/search.php
-
找到
plus/search.php文件并下载备份。 -
在文件中找到
//排序方式的注释部分,在它后面添加以下代码:// --- 新增:获取与当前搜索词相关的热门内容 --- $hotkeyword = $keyword; $hotArcList = ''; if (!empty($hotkeyword)) { // 将空格替换为 SQL OR 查询,支持多关键词 $like_kw = str_replace(' ', '%', $hotkeyword); $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `#@__archives` arc LEFT JOIN `#@__arctype` tp ON arc.typeid=tp.id WHERE arc.arcrank > -1 AND (arc.title LIKE '%$like_kw%' OR arc.keywords LIKE '%$like_kw%' OR arc.description LIKE '%$like_kw%') ORDER BY arc.click DESC LIMIT 0, 8"; // 限制显示8条 $hotdsql = new DedeSql(false); $hotdsql->SetQuery($query); $hotdsql->Execute('hotlist'); $hotArcList = ''; while ($hotrow = $hotdsql->GetArray('hotlist')) { $hotArcList .= GetOneArchive($hotrow); } $hotdsql->FreeResult(); } // --- 新增结束 ---- 代码解释:
$query构建了一个SQL查询,它会从文章表 (#@__archives) 中查找标题、关键词、描述包含当前搜索词的文章,并按点击量 (click) 降序排列。GetOneArchive()是DedeCMS的内置函数,用于格式化单篇文章的数据,使其可以在模板中像{dede:arclist}一样被调用。LIMIT 0, 8表示只获取前8条热门文章。
- 代码解释:
-
将查询结果传递给模板,在
include DedeTemplate.class.php;这行代码之后,找到$tpl->Display();之前,添加:// 将热门文章列表传递给模板 $tpl->Assign('hotArcList', $hotArcList);
第2步:修改搜索页模板 (search.htm)
我们可以在模板中调用这个新创建的 $hotArcList 变量了。
-
在
search.htm中,您希望显示热门内容的位置,添加以下代码:<!-- 精准热门相关内容 --> <div class="hot-related-content-precise"> <h3>与“<strong>{dede:global name='keyword'/}</strong>”相关的热门内容</h3> <ul> {dede:hotArcList} <li> <span class="hot-num">[field:global.autoindex/]</span> <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a> <span class="view-count">([field:click/]次阅读)</span> </li> {/dede:hotArcList} </ul> </div>- 注意:这里的标签是
{dede:hotArcList},这是我们刚刚在PHP中动态创建的,它不是一个标准的DedeCMS标签,而是直接包含了格式化好的HTML片段。
- 注意:这里的标签是
-
CSS样式:您可以使用方法二中提供的CSS样式,或者根据需要调整。
优点:
- 功能最强大:实现了真正意义上的“与当前搜索词相关的热门内容”。
- 精准度高,用户体验最好。
缺点:
- 需要修改核心文件:升级DedeCMS时,这些修改可能会被覆盖,需要重新修改。
- 对PHP和MySQL有一定要求,操作不当可能导致网站出错。
- 每次搜索都会多执行一次数据库查询,如果网站流量巨大,可能会对服务器造成轻微负担(但对于普通网站来说影响可以忽略不计)。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 方法一 | 零代码,最简单 | 不是热门内容,是热门词,相关性差 | 快速实现,对内容质量要求不高 |
| 方法二 | 代码简单,易实现 | 不够精准,调用全站热门内容 | 推荐!大部分网站都适用,平衡了效果和复杂度 |
| 方法三 | 功能最强,最精准 | 需改核心文件,有技术门槛 | 对用户体验有极高要求,且有技术维护能力的网站 |
对于绝大多数用户,我强烈推荐 方法二,它简单有效,不需要触碰核心文件,安全可靠,并且已经能带来不错的用户体验,只有在您发现方法二的结果确实不够好,并且有能力进行后续维护时,才考虑采用 方法三。
