dede search 5.7分页如何实现?

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

这是一个非常常见的需求,因为默认的搜索结果列表可能很长,没有分页会严重影响用户体验和网站性能。

dede search 分页5.7
(图片来源网络,侵删)

核心思路

实现 DedeCMS 搜索分页的核心思路是利用 DedeCMS 自带的分页函数,但需要确保在搜索结果页面中正确地传递和接收分页所需的参数(尤其是关键词 q)。

默认情况下,DedeCMS 的搜索分页是失效的,因为分页链接会丢失 q 这个关键参数,我们的任务就是修复这个问题。


修改核心文件(最直接、最常用)

这是最经典和直接的方法,通过修改 arc.searchview.class.php 文件来解决问题,这个文件是处理所有列表页(包括搜索结果页)分页逻辑的核心。

操作步骤:

  1. 找到并打开文件 使用 FTP 或文件管理器登录你的网站,找到并编辑以下文件: /include/arc.searchview.class.php

    dede search 分页5.7
    (图片来源网络,侵删)
  2. 定位关键代码 在文件中找到 GetPageListDM 函数(大约在 680 行左右,不同版本可能略有差异),这个函数负责生成分页代码。

  3. 修改分页链接 找到类似 $listitem = "<a href='".$purl."?PageNo=$i'>".$i."</a>"; 的代码行,我们需要确保 $purl 这个基础 URL 包含了搜索关键词 q

    GetPageListDM 函数内,找到生成 $purl 的部分,通常在函数开头,你会看到类似这样的代码:

    // 获取当前页码
    $this->PageNo = $this->GetCurPage();
    // 获取链接
    $geturl = "keyword=".rawurlencode($this->keyword)."&searchtype=".$this->searchtype;
    $purl = $this->GetCurUrl();
    // ... 其他代码 ...

    问题所在:这里的 $purl 是当前页的完整 URL,但当你点击 "下一页" 时,DedeCMS 默认会移除一些 GET 参数,导致 keyword 丢失。

    dede search 分页5.7
    (图片来源网络,侵删)

    解决方案:修改 $purl 的生成逻辑,强制它包含搜索关键词。

    将生成 $purl 的那几行代码替换为以下代码:

    // 获取当前页码
    $this->PageNo = $this->GetCurUrlPageNo();
    // 获取链接 - 修改从这里开始
    $geturl = "keyword=".rawurlencode($this->keyword)."&searchtype=".$this->searchtype;
    $purl = $this->GetCurUrl();
    // --- 关键修改 ---
    // 确保 URL 中包含搜索关键词
    if (strpos($purl, '?') === false) {
        $purl .= '?'.$geturl;
    } else {
        $purl .= '&'.$geturl;
    }
    // --- 修改结束 ---
    $purl = str_replace("(&)", "&", $purl);
    $purl = ereg_replace("(&{1,})","&", $purl);
    $purl = str_replace("&?","&", $purl);
    if($purl=="") $purl = './';
    if($purl != './' && substr($purl, -1) != '/'){
        if(strpos($purl, '?') === false){
            $purl .= '/';
        }
    }

    更简单且有效的修改方案(推荐): 如果你不想处理上面的复杂逻辑,可以直接找到 $purl = $this->GetCurUrl(); 这一行,在它后面添加一行代码,强制将 keyword 参数追加到 URL 中。

    找到这一行:

    $purl = $this->GetCurUrl();

    在它后面添加:

    // 强制将关键词参数附加到URL上,解决搜索分页失效问题
    $purl .= (strpos($purl, '?') === false ? '?' : '&') . "keyword=" . rawurlencode($this->keyword) . "&searchtype=" . $this->searchtype;

    这行代码的作用是:检查当前 URL 是否已经有 ,如果没有就加 ,有就加 &,然后手动把 keywordsearchtype 这两个搜索参数加上去,这样无论怎么翻页,这两个参数都不会丢失。

  4. 保存文件 保存对 arc.searchview.class.php 文件的修改。

  5. 更新缓存 登录你的 DedeCMS 后台,点击 “系统” -> “一键更新网站”,然后选择 “更新HTML”“更新主页”,最后点击 “开始更新”,这一步是为了让服务器重新加载修改过的 PHP 文件。

完成以上步骤后,你的搜索结果分页就应该可以正常工作了。


修改搜索模板(如果方法一无效)

在某些特殊模板或版本中,可能还需要检查并修改搜索结果页的模板文件。

  1. 找到模板文件 搜索结果页的模板文件通常位于你的模板目录下,文件名一般为 search.htm。 路径:/templets/你的模板名称/search.htm

  2. 检查表单提交 确保搜索表单的 action 属性指向正确的搜索页面,通常是这样的:

    <form name="formsearch" action="{dede:global name='cfg_phpurl'/}/search.php">
        <input type="hidden" name="kwtype" value="0" />
        <input type="hidden" name="searchtype" value="titlekeyword" />
        <input type="text" name="q" class="search-keyword" />
        <button type="submit" class="search-submit">搜索</button>
    </form>

    这里的 name="q" 是 DedeCMS 默认接收关键词的变量名。

  3. 检查分页标签search.htm 模板中,调用分页的标签应该是:

    {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}

    确保这个标签存在于你的搜索结果列表循环 {dede:arclist} 之外,分页标签本身通常是没问题的,问题出在它生成的链接上,所以主要还是靠方法一。


调试与常见问题

如果修改后仍然不工作,可以按以下步骤排查:

  1. 检查 URL 在搜索结果页,点击“下一页”或页码,查看浏览器地址栏里的 URL,看看 keyword 参数是否存在,如果不存在,说明方法一的修改没有生效,请检查文件路径和代码是否正确。

  2. 检查关键词编码 如果搜索的是中文关键词,确保 URL 中是正确的编码(如 %E6%90%9C%E7%B4%A2)。rawurlencode 函数就是用来处理这个的。

  3. 浏览器缓存 清除浏览器缓存或使用无痕模式访问,确保你看到的是最新的页面效果。

  4. PHP 错误 检查 arc.searchview.class.php 文件是否有语法错误,可以通过在页面中故意写错一个 PHP 代码(如 echo $i;)来测试是否能报错,以确认文件是否被正确加载。

对于 DedeCMS 5.7 的搜索分页问题,99% 的情况都可以通过修改 /include/arc.searchview.class.php 文件解决

核心要点:修改 GetPageListDM 函数中 $purl 的生成逻辑,强制在分页链接中包含 keywordsearchtype 参数,上面提供的“更简单且有效的修改方案”是最推荐的一行代码修复法。

希望这个详细的教程能帮助你成功解决问题!

-- 展开阅读全文 --
头像
织梦DedeCms arctype字段如何自定义与调用?
« 上一篇 2025-12-18
织梦fckeditor下载安全吗?
下一篇 » 2025-12-18

相关文章

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

目录[+]