织梦搜索指定几个栏目

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文
  1. 使用织梦自带的搜索功能(推荐) - 这是最简单、最直接的方法,无需修改代码。
  2. 通过修改PHP源码实现 - 适用于需要更深度定制或希望搜索结果页URL更美观的场景。

下面我将详细介绍这两种方法。

织梦搜索指定几个栏目
(图片来源网络,侵删)

使用织梦自带的搜索功能(推荐)

织梦的搜索功能本身就支持指定栏目,你只需要在搜索框所在的模板文件中,添加一个包含栏目选项的下拉菜单即可。

操作步骤:

  1. 定位搜索模板文件 找到你网站搜索页所使用的模板文件,通常这个文件位于 /templets/default/ 目录下,文件名可能是 search.htmsearch_list.htm,如果你使用了自定义模板,请找到你自己的搜索模板。

  2. 修改模板文件 用编辑器打开这个搜索模板文件,找到包含搜索表单的 <form> 标签,通常它看起来是这样的:

    <form name="formsearch" action="{dede:global.cfg_cmspath/}/plus/search.php">
      <div class="form">
        <h4>搜索</h4>
        <input type="hidden" name="kwtype" value="0" />
        <input type="hidden" name="searchtype" value="titlekeyword" />
        <input name="q" type="text" class="search-keyword" id="search-keyword" />
        <select name="typeid" id="typeid">
          <option value='0' selected='1'>所有栏目</option>
          {dede:channel type='self' currentstyle="<option value='typeid' selected='1'>typename</option>"}
          <option value='typeid'>typename</option>
          {/dede:channel}
        </select>
        <button type="submit" class="search-submit">搜索</button>
      </div>
    </form>
  3. 理解关键代码

    织梦搜索指定几个栏目
    (图片来源网络,侵删)
    • {dede:channel type='self' ...}: 这是织梦的栏目列表标签。
      • type='self': 表示只获取当前栏目及其所有子栏目,如果你想在全站搜索时显示所有顶级栏目,可以改为 type='top'
      • currentstyle: 这是当前选中栏目的样式,当用户选择的栏目和这个标签循环到的栏目一致时,会使用这个HTML代码,这里我们让它自动 selected
      • <option value='typeid'>typename</option>: 这是循环出来的每一个栏目的HTML选项。typeidtypename 会被自动替换为栏目的ID和名称。
    • <input type="hidden" name="searchtype" value="titlekeyword" />: 这个隐藏字段指定了搜索范围,titlekeyword 表示只搜索文章标题和关键字,你也可以改为 keyword 只搜索关键字,或者去掉这个字段让它搜索所有内容。
  4. 如何指定默认栏目(可选) 如果你希望默认就选中某个或某几个栏目,可以在 <select> 标签里手动添加 <option> 并设置 selected 属性。

    <select name="typeid" id="typeid">
      <!-- 默认选中“公司简介”和“产品中心” -->
      <option value='0'>所有栏目</option>
      <option value='1' selected>公司简介</option>
      <option value='2' selected>产品中心</option>
      <!-- 下面用标签自动加载其他栏目 -->
      {dede:channel type='self' currentstyle="<option value='typeid' selected='1'>typename</option>"}
      <option value='typeid'>typename</option>
      {/dede:channel}
    </select>

    注意:直接在模板里写死 selected 可能会和标签的 currentstyle 冲突,更稳妥的方法是,如果你只想让用户从这几个栏目中选择,就只列出这几个栏目,而不是用 {dede:channel} 标签来循环所有栏目。

    你只想让用户在“新闻中心”和“产品展示”中选择:

    <select name="typeid" id="typeid">
      <option value='0'>所有栏目</option>
      <option value='5'>新闻中心</option>
      <option value='6'>产品展示</option>
    </select>
  5. 保存并更新 保存修改后的模板文件,然后刷新你的网站搜索页面,就能看到下拉菜单了,用户选择栏目后点击搜索,结果就会限定在该栏目及其子栏目内。


通过修改PHP源码实现

这种方法可以让你实现更灵活的控制,比如在搜索结果页的URL中直接包含栏目ID,并且不依赖模板中的表单。

操作步骤:

  1. 修改搜索处理文件 打开织梦根目录下的 /plus/search.php 文件。

  2. 添加栏目ID获取逻辑 在文件的开头部分,找到获取 typeid 的代码,默认情况下,它可能只从 POST 请求中获取,我们需要让它也能从 GET 请求中获取,以便支持URL形式的搜索。

    找到类似这样的代码(大约在第30-40行):

    //增加按栏目搜索
    if($typeid > 0)
    {
        $typeid = GetSonIds($typeid);
        $addsql .= " And (arc.typeid in ($typeid) OR arc.typeid2 in ($typeid))";
    }

    在这行代码之前,添加以下代码来获取URL中的 typeid 参数:

    // 从GET请求中获取typeid,用于URL形式的搜索,如 search.php?q=关键词&typeid=5
    if(empty($typeid) && isset($_GET['typeid']))
    {
        $typeid = intval($_GET['typeid']);
    }

    这样,搜索功能现在既支持表单提交(POST),也支持URL直接访问(GET)。

  3. 修改搜索结果页模板 打开你的搜索结果页模板,通常是 /templets/default/search.htm

  4. 添加栏目筛选链接 在模板中,你可以添加一些链接,让用户可以直接点击来搜索特定栏目,你可以这样写:

    <div class="channel-filter">
      <span>按栏目筛选:</span>
      <a href="{dede:global.cfg_cmspath/}/plus/search.php?q={dede:global name='keyword'/}">所有栏目</a>
      <a href="{dede:global.cfg_cmspath/}/plus/search.php?q={dede:global name='keyword'/}&typeid=5">新闻中心</a>
      <a href="{dede:global.cfg_cmspath/}/plus/search.php?q={dede:global name='keyword'/}&typeid=6">产品展示</a>
    </div>

    解释:

    • {dede:global.cfg_cmspath/}: 获取网站的根目录路径。
    • {dede:global name='keyword'/}: 获取当前搜索的关键词。
    • &typeid=5: 这部分就是我们添加的参数,5 是你想要搜索的栏目ID。
  5. 保存并测试 保存修改后的两个文件(search.phpsearch.htm),当用户通过URL .../plus/search.php?q=织梦&typeid=5 访问时,就会只搜索栏目ID为5及其子栏目中的内容。

总结与建议

特性 方法一 (模板修改) 方法二 (修改PHP)
实现难度 简单,只需懂HTML 中等,需要修改PHP代码
灵活性 一般,依赖表单 高,支持URL直接访问
适用场景 常规网站,用户通过表单搜索 需要生成特定搜索链接、API调用等高级场景
维护性 模板修改,升级可能覆盖 源码修改,升级时需注意重新修改

对于绝大多数网站,强烈推荐使用方法一,它简单、安全,且符合织梦的设计逻辑,只有在有特殊需求,比如需要生成可分享的、带栏目筛选的搜索链接时,才考虑使用方法二。

-- 展开阅读全文 --
头像
c语言程序设计第三版谭浩强
« 上一篇 03-23
手机访问织梦如何自动跳转?
下一篇 » 03-23

相关文章

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

目录[+]