织梦搜索页面为何必须同一窗口打开?

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

默认情况下,织梦的搜索结果页面 plus/search.php 会通过 JavaScript 的 window.open() 方法在新窗口或新标签页中打开,要修改这个行为,我们需要找到并修改相关的代码。

织梦搜索页面在同一窗口
(图片来源网络,侵删)

这个功能主要涉及到两个文件:

  1. plus/search.php:这是搜索的核心处理文件,它包含了打开新窗口的JavaScript代码。
  2. templets/default/search.htm:这是用户在前台看到的搜索框页面模板文件,用于提交搜索请求。

修改核心搜索文件 (推荐)

这是最直接、最根本的修改方法,可以一劳永逸地解决问题。

操作步骤:

  1. 登录FTP或主机控制面板,使用文件管理器找到并打开织梦网站的根目录。

    织梦搜索页面在同一窗口
    (图片来源网络,侵删)
  2. 定位文件:进入 plus 文件夹,找到 search.php 文件。

  3. 编辑文件:使用代码编辑器(如VS Code, Sublime Text, 或主机自带的编辑器)打开 search.php

  4. 查找并修改代码: 在文件中,搜索 window.open 关键字,你会找到类似下面这样的代码段(可能在第200行左右,具体行数可能因版本不同而异):

    // ... 其他代码 ...
    if(empty($keyword))
    {
        ShowMsg('关键字不能为空!','-1');
        exit();
    }
    $typeArr = array('article', 'archive', 'specification');
    $type = isset($type) && in_array($type, $typeArr) ? $type : 'article';
    // 关键字替换
    $keyword = RepPostVar($keyword);
    // 搜索结果链接
    $searchUrl = $cfg_cmspath."/plus/search.php?searchtype=titlekeyword&keyword=".urlencode($keyword);
    // 跳转到搜索结果页
    echo "<script>window.location.href='".$searchUrl."';</script>";
    // 或者是下面这种新窗口打开的代码,我们需要注释掉或替换它
    // echo "<script>window.open('".$searchUrl."');</script>";
    exit();
    // ... 其他代码 ...
  5. 进行修改: 你会看到两处关键的JavaScript代码:

    织梦搜索页面在同一窗口
    (图片来源网络,侵删)
    • 旧版织梦(较常见)
      echo "<script>window.open('".$searchUrl."');</script>";
    • 新版织梦(如DedeCMS V5.7/V5.8)
      echo "<script>location.href='".$searchUrl."';</script>";

      或者

      echo "<script>window.location.href='".$searchUrl."';</script>";

    修改方法

    • 如果你的代码是 window.open(...)直接将其修改为 location.hrefwindow.location.href
    • 如果你的代码已经是 location.href(...),那么恭喜你,你的版本已经是默认在同窗口打开的了,无需修改。

    修改后的代码示例

    // 跳转到搜索结果页 (修改后)
    echo "<script>window.location.href='".$searchUrl."';</script>";
    // 或者更简洁的写法
    // echo "<script>location.href='".$searchUrl."';</script>";
  6. 保存文件:保存对 search.php 文件的修改,然后上传回服务器覆盖原文件。

完成以上步骤后,用户在前台点击搜索时,结果就会在当前窗口中显示了。


修改搜索框模板文件 (备选方案)

如果你不想修改核心PHP文件,或者只想针对特定模板下的搜索框进行修改,可以采用这个方法。

操作步骤:

  1. 定位文件:进入 templets 文件夹,找到你当前正在使用的模板文件夹(default),然后打开 search.htm 文件。

  2. 查找表单代码:在 search.htm 中,找到搜索框的 <form> 标签,它看起来通常是这样的:

    <form name="formsearch" action="/plus/search.php" target="_blank">
        <div class="form">
            <h4>搜索</h4>
            <input type="hidden" name="kwtype" value="0" />
            <input name="q" type="text" class="search-keyword" id="search-keyword" placeholder="请输入关键字" />
            <select name="searchtype" class="search-option" id="search-option">
                <option value="titlekeyword" selected='1'>智能模糊搜索</option>
                <option value="keyword">仅搜索关键字</option>
            </select>
            <button type="submit" class="search-submit">搜索</button>
        </div>
    </form>
  3. 修改 target 属性: 找到 <form> 标签中的 target="_blank" 属性。

    • target="_blank":表示在新窗口/新标签页中打开。
    • target="_self":表示在当前窗口中打开。
    • 删除 target 属性:如果完全移除 target 属性,浏览器默认行为通常也是在当前窗口打开。

    修改后的代码示例

    <!-- 修改前 -->
    <form name="formsearch" action="/plus/search.php" target="_blank">
    <!-- 修改后 (选择其中一种方式) -->
    <!-- 方式A:指定在当前窗口打开 -->
    <form name="formsearch" action="/plus/search.php" target="_self">
    <!-- 方式B:移除target属性,使用浏览器默认行为 -->
    <form name="formsearch" action="/plus/search.php">
  4. 保存文件:保存对 search.htm 文件的修改,然后上传回服务器。


总结与对比

方法 优点 缺点 适用场景
修改 search.php 一劳永逸,全站所有搜索都生效,是根本的解决方案。 需要修改核心PHP文件,对新手来说可能稍显复杂。 强烈推荐,适用于所有希望统一搜索行为的网站。
修改 search.htm 简单直观,只修改模板文件,不影响核心程序。 只能修改特定模板下的搜索框,如果网站有多个模板,每个都要改一遍。 只想修改特定页面搜索行为的场景,或者不想动核心文件时使用。

对于绝大多数用户来说,方法一 是最佳选择,它解决了问题的根源,让你的网站行为更加统一和专业。

重要提示:在修改任何文件之前,请务必备份原始文件,以防修改后出现意外问题,可以快速恢复。

-- 展开阅读全文 --
头像
dede自定义表单提交404
« 上一篇 01-15
c语言中 函数返回值的类型是由
下一篇 » 01-15

相关文章

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

目录[+]