织梦搜索自定义字段如何设置?

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

要实现搜索自定义字段,你需要修改几个核心文件,这个过程需要你对织梦的文件结构有一定了解,并且建议在修改前备份你的网站

织梦 搜索自定义字段
(图片来源网络,侵删)

下面我将为你提供两种方法:

  1. 直接修改核心文件(适用于所有自定义字段)

    • 优点:功能最完整,可以搜索所有类型的自定义字段(文本、数字、下拉、多选等)。
    • 缺点:直接修改核心文件,升级织梦时可能会被覆盖,需要重新修改。
  2. 使用官方“高级搜索”模块(适用于特定字段)

    • 优点:官方模块,比较稳定,无需修改核心文件,适合制作带筛选条件的搜索页面。
    • 缺点:功能相对固定,灵活性不如方法一,且需要额外安装。

直接修改核心文件(推荐)

这个方法的核心思路是:修改处理搜索请求的PHP文件,让它在构建SQL查询时,将你指定的自定义字段也包含进去。

织梦 搜索自定义字段
(图片来源网络,侵删)

假设你的自定义字段名为 yourfield

步骤 1:修改 plus/search.php 文件

这是处理搜索请求的主入口文件,我们需要在这里修改SQL查询的构建逻辑。

  1. 打开 /plus/search.php 文件。

  2. 找到构建SQL查询的地方,通常在文件中下部,类似这样的代码:

    织梦 搜索自定义字段
    (图片来源网络,侵删)
    // ... 其他代码 ...
    $query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.money,
            arc.description,arc.pubdate,arc.senddate,arc.arcrank,arc.click,
            arc.litpic,channel.addtable FROM `dede_archives` arc
            LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
            LEFT JOIN `{$addtable}` ON arc.id = {$addtable}.aid
            WHERE {$orlike} $typeid $orderQuery $limit";
    // ... 其他代码 ...
  3. 修改 LEFT JOIN 部分

    • 默认情况下,它只关联了 dede_archives 和你模型对应的附加表({$addtable})。
    • 如果你的自定义字段在附加表里,这部分通常不需要改,如果你的字段在主表 dede_archives,这里也不需要改。
  4. 修改 WHERE 子句(最关键的一步)

    • 找到 $orlike 变量的定义,它通常是一个 OR 连接的字符串,用于在标题和正文中搜索。
    • $orlike 的基础上,加上你的自定义字段。

    修改前(示例):

    // $orlike 可能是这样的
    $orlike = " (arc.title LIKE '%$keyword%') ";
    // 或者更复杂的
    $orlike = " (arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%') ";

    修改后(示例): 假设你想在 yourfield 这个自定义字段中也搜索,并且它位于附加表中。

    // 在原有的 $orlike 基础上,添加你的自定义字段
    // 注意:字段名前要加上附加表的别名,通常是 'a'(取决于你的SQL)
    $orlike = " (arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%' OR a.yourfield LIKE '%$keyword%') ";

    完整代码示例: 假设你的 search.php 文件中相关部分如下,你需要修改 $orlike 的赋值语句。

    // ... 前面的代码 ...
    // 1. 获取附加表名
    if($typeid > 0){
        $typeid = GetSonIds($typeid, $channelid);
    }
    $addtable = $arc->addtable;
    // 2. 构建搜索关键词条件 (这是需要修改的核心)
    // 默认只搜索标题和body
    $orlike = " (arc.title LIKE '%$keyword%' OR arc.body LIKE '%$keyword%') ";
    // ======== 在这里添加你的自定义字段搜索 =========
    // 假设你的自定义字段 'yourfield' 在附加表中,附加表别名为 'a'
    $orlike .= " OR a.yourfield LIKE '%$keyword%' ";
    // ===============================================
    // 3. 构建完整的SQL查询
    $query = "SELECT arc.id,arc.title,arc.typeid,arc.ismake,arc.money,
            arc.description,arc.pubdate,arc.senddate,arc.arcrank,arc.click,
            arc.litpic,channel.addtable FROM `dede_archives` arc
            LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
            LEFT JOIN `{$addtable}` a ON arc.id = a.aid
            WHERE {$orlike} $typeid $orderQuery $limit";
    // ... 后面的执行查询代码 ...

步骤 2:修改 include/arc.searchview.class.php 文件

这个文件负责处理搜索结果页的显示逻辑,为了让搜索结果页能正确显示你的自定义字段,你需要修改 GetResultList() 函数。

  1. 打开 /include/arc.searchview.class.php 文件。

  2. 找到 GetResultList() 函数。

  3. 在函数内,找到构建SQL查询的地方,同样需要将你的自定义字段加入到 SELECT 语句中。

    修改前(示例):

    // 在 GetResultList 函数中
    $fields = 'arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
              tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath';
    $query = "SELECT $fields FROM `dede_archives` arc
              LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
              WHERE $query";

    修改后(示例): 将你的自定义字段 yourfield 添加到 $fields 变量中。

    // 在 GetResultList 函数中
    // 将你的自定义字段 a.yourfield 添加到字段列表
    $fields = 'arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
              tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath, a.yourfield';
    $query = "SELECT $fields FROM `dede_archives` arc
              LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
              LEFT JOIN `{$this->AddTable}` a ON arc.id = a.aid
              WHERE $query";

    注意:这里使用了 {$this->AddTable} 来获取附加表名,这是更规范的做法。

步骤 3:在搜索结果模板中调用自定义字段

  1. 打开你的搜索结果模板文件,通常位于 /templets/default/search.htm

  2. 在你需要显示自定义字段的地方,使用织梦的标签 {dede:field.yourfield /} 来调用。

    <div class="result-item">
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
        <p class="summary">[field:description function='cn_substr(@me,100)'/]...</p>
        <!-- 在这里添加你的自定义字段显示 -->
        <p class="custom-field">自定义字段内容:{dede:field.yourfield/}</p>
    </div>

步骤 4:清理缓存

完成所有修改后,务必进入织梦后台的【系统】->【一键更新网站】->【更新缓存】,然后更新一下搜索页面,才能看到效果。


使用官方“高级搜索”模块

这个方法不修改核心代码,而是利用织梦自带的“高级搜索”功能,它天生就支持对自定义字段进行搜索和筛选。

  1. 安装模块

    • 登录织梦后台,进入【模块】->【模块管理】。
    • 点击“上传新模块”,找到织梦安装目录下的 /plus/advancedsearch.php 文件,上传并安装。
    • 或者,如果你的织梦是完整版,这个模块可能已经存在,直接在“模块列表”中启用即可。
  2. 创建搜索页面

    • 进入【核心】->【内容模型管理】,选择你想要添加搜索功能的模型(文章模型”)。

    • 在模型管理页面,点击“高级搜索”或类似的按钮,系统会引导你生成一个高级搜索页面。

    • 或者,你也可以手动创建一个页面,在页面内容中插入以下标签:

      {dede:global name='keyword' function='RemoveXSS(@me)'/}
      {dede:php}
      $formurl = $cfg_cmspath.'/plus/advancedsearch.php';
      $typeid = isset($_GET['typeid']) ? intval($_GET['typeid']) : 0;
      $channeltype = isset($_GET['channeltype']) ? intval($_GET['channeltype']) : 0;
      $searchtype = isset($_GET['searchtype']) ? trim($_GET['searchtype']) : 'title';
      $keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
      $orderby = isset($_GET['orderby']) ? trim($_GET['orderby']) : 'default';
      $mid = isset($_GET['mid']) ? intval($_GET['mid']) : 0;
      // 这里可以输出搜索表单
      echo "<form name='search' action='{$formurl}' method='get'>";
      echo "关键词:<input type='text' name='keyword' value='{$keyword}'>";
      // 其他表单元素...
      echo "<input type='submit' value='搜索'>";
      echo "</form>";
      {/dede:php}
      {dede:sql sql="SELECT * FROM `dede_advancedsearch` WHERE aid=1"}
      这里会加载你配置好的高级搜索表单
      {/dede:sql}

      更简单的方式是直接访问 plus/advancedsearch.php 页面,系统会自动生成一个包含所有自定义字段的搜索表单。

  3. 配置自定义字段

    • 访问你创建的高级搜索页面,你会看到所有你在模型中设置的自定义字段(文本框、下拉框、复选框等)。
    • 用户可以直接在这些字段中输入内容或进行选择,然后进行搜索。
  4. 显示搜索结果

    • 高级搜索提交后,结果会默认显示在 plus/advancedsearch.php 页面。
    • 你可以复制 plus/advancedsearch.php 文件,重命名(如 my_search.php),然后修改其中的模板部分,来定制自己的搜索结果页样式。

总结与建议

特性 方法一 (修改核心文件) 方法二 (高级搜索模块)
适用场景 需要将自定义字段搜索集成到站内全局搜索框中。 需要一个独立的、带筛选条件的搜索页面。
优点 功能强大,无缝集成,搜索范围广。 官方支持,安全稳定,无需改核心,界面友好。
缺点 修改核心文件,升级有风险,代码稍复杂。 功能相对固定,需要额外页面,不适合全局搜索。
推荐度 ⭐⭐⭐⭐⭐ (对于需要此功能的开发者) ⭐⭐⭐⭐⭐ (对于普通用户和快速部署)

对于大多数用户,方法二是更安全、更简单的选择,如果你需要将自定义字段完全融入织梦的全局搜索体验(比如顶部搜索框),那么方法一是必经之路。

希望这个详细的教程能帮到你!如果在操作中遇到问题,可以再提出。

-- 展开阅读全文 --
头像
dede游戏网站源码哪里下载?
« 上一篇 04-12
dede后台菜单乱码怎么办?
下一篇 » 04-12

相关文章

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

目录[+]