dede搜索页热门内容如何高效生成与展示?

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

利用DedeCMS内置的“热门关键词”功能(最简单)

这是最直接、最简单的方法,但它统计的是全站搜索的热门关键词,而不是某个具体搜索结果页内的热门内容。

dede搜索页热门内容
(图片来源网络,侵删)

实现步骤:

  1. 开启关键词功能

    • 登录DedeCMS后台,进入【系统】->【系统基本参数】->【核心设置】。
    • 找到“是否开启关键字替换功能”选项,选择“是”。
    • 找到“关键字 relevance(搜索结果相关度)”,可以设置一个合适的值,比如5000`,这个值越高,搜索结果中包含关键词的文章权重越大。
  2. 在搜索页模板中调用热门关键词

    • 打开您的搜索页模板文件,通常位于 /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天的搜索记录。

优点

dede搜索页热门内容
(图片来源网络,侵删)
  • 零代码,纯后台设置。
  • 实现快速。

缺点

  • 不是“热门内容”,而是“热门关键词”。
  • 显示的是全站的热门词,与当前用户的搜索词无关。
  • 需要用户有实际的搜索行为才能统计到。

手动调用“点击最高”的相关文章(推荐)

这个方法更符合“热门内容”的定义,我们可以在搜索结果页,同时调用出与当前搜索词相关的、并且点击量最高的文章。

实现步骤:

  1. 修改搜索页模板 (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>
  2. 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文件,使其在搜索的同时,能查询出与本次搜索词相关的、并且点击量最高的文章。

核心思路

  1. 修改搜索处理文件 plus/search.php
  2. 在执行常规搜索后,再执行一次额外的数据库查询。
  3. 这次查询的 WHERE 条件要包含当前搜索的关键词,ORDER BY 按点击量排序。
  4. 将查询到的热门文章数据传递给模板。
  5. 在模板中用新的标签调用这些数据。

详细步骤(需要一定的PHP和MySQL基础):

第1步:修改 plus/search.php

  1. 找到 plus/search.php 文件并下载备份。

  2. 在文件中找到 //排序方式 的注释部分,在它后面添加以下代码:

    // --- 新增:获取与当前搜索词相关的热门内容 ---
    $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条热门文章。
  3. 将查询结果传递给模板,在 include DedeTemplate.class.php; 这行代码之后,找到 $tpl->Display(); 之前,添加:

    // 将热门文章列表传递给模板
    $tpl->Assign('hotArcList', $hotArcList);

第2步:修改搜索页模板 (search.htm)

我们可以在模板中调用这个新创建的 $hotArcList 变量了。

  1. 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片段。
  2. CSS样式:您可以使用方法二中提供的CSS样式,或者根据需要调整。

优点

  • 功能最强大:实现了真正意义上的“与当前搜索词相关的热门内容”。
  • 精准度高,用户体验最好。

缺点

  • 需要修改核心文件:升级DedeCMS时,这些修改可能会被覆盖,需要重新修改。
  • 对PHP和MySQL有一定要求,操作不当可能导致网站出错。
  • 每次搜索都会多执行一次数据库查询,如果网站流量巨大,可能会对服务器造成轻微负担(但对于普通网站来说影响可以忽略不计)。

总结与建议

方法 优点 缺点 适用场景
方法一 零代码,最简单 不是热门内容,是热门词,相关性差 快速实现,对内容质量要求不高
方法二 代码简单,易实现 不够精准,调用全站热门内容 推荐!大部分网站都适用,平衡了效果和复杂度
方法三 功能最强,最精准 需改核心文件,有技术门槛 对用户体验有极高要求,且有技术维护能力的网站

对于绝大多数用户,我强烈推荐 方法二,它简单有效,不需要触碰核心文件,安全可靠,并且已经能带来不错的用户体验,只有在您发现方法二的结果确实不够好,并且有能力进行后续维护时,才考虑采用 方法三

-- 展开阅读全文 --
头像
谭浩强C语言最新版有哪些新增内容?
« 上一篇 03-05
学生基本信息管理系统C语言如何实现核心功能?
下一篇 » 03-05

相关文章

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

目录[+]