织梦模板如何添加搜索功能?

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

核心概念:织梦的搜索机制

在开始之前,你需要了解织梦搜索的几个关键点:

织梦 寻模板怎么加搜索
(图片来源网络,侵删)
  1. 搜索表单:用户输入关键词并点击“搜索”按钮的表单,它最重要的部分是 action 属性,这个属性指向处理搜索请求的PHP脚本。
  2. 搜索脚本:接收表单提交过来的关键词,在数据库中进行查询,并返回搜索结果的页面,这个脚本的路径通常是 /plus/search.php
  3. 搜索模板:用于展示搜索结果列表的HTML模板,这个模板的路径通常是 /templets/default/search.htm,你可以自定义这个模板来改变搜索结果的展示样式。

在首页添加一个简单的搜索框(最常用)

这是最基础也是最常见的需求,通常放在网站顶部的导航栏或Logo旁边。

操作步骤:

  1. 打开首页模板文件 登录织梦后台,点击【模板】->【默认模板管理】,找到你正在使用的首页模板(通常是 index.htm),点击后面的【修改】。

  2. 添加搜索表单代码 在你希望显示搜索框的位置(<header><nav> 标签内),插入以下代码:

    <form name="formsearch" action="{dede:global.cfg_cmspath/}/plus/search.php">
      <div class="search-box">
        <input type="hidden" name="kwtype" value="0" />
        <input type="text" name="q" placeholder="请输入搜索关键词" class="search-input" />
        <button type="submit" class="search-btn">搜索</button>
      </div>
    </form>
  3. 代码解释

    • <form ... action="{dede:global.cfg_cmspath/}/plus/search.php">:
      • action 指定了表单提交的地址。{dede:global.cfg_cmspath/} 是织梦的全局变量,代表你的网站根目录,这样写可以保证无论网站安装在哪个目录下都能正确跳转。
    • <input type="hidden" name="kwtype" value="0" />:
      • 这是一个隐藏字段,用于设置搜索模式。
      • value="0":精确匹配(默认)。
      • value="1":模糊匹配。
      • value="2":含有的关键词(最常用)。
    • <input type="text" name="q" ... />:
      • 这是用户输入关键词的文本框。
      • name="q"非常重要,这个 name 值是固定的,织梦的搜索脚本就是通过 $_GET['q'] 来获取用户输入的关键词的,不要修改它!
    • <button type="submit">...</button>:
      • 提交按钮,用户点击后会触发表单的 action 所指向的脚本。
  4. 保存并刷新首页 保存模板文件,然后刷新你的网站首页,就能看到一个可以使用的搜索框了。


在列表页或内容页添加搜索框

这个操作和方法一几乎完全一样,只是打开的模板文件不同。

操作步骤:

  1. 打开对应的模板文件

    • 如果你想在文章列表页添加,就修改 list_article.htm
    • 如果你想在产品列表页添加,就修改 list_product.htm
    • 如果你想在文章内容页添加,就修改 article_article.htm
    • 位置:【模板】->【默认模板管理】。
  2. 插入代码 同样,在你需要的位置插入方法一中的搜索表单代码即可。


修改搜索结果页模板 (search.htm)

当你使用默认的搜索功能时,结果页可能样式比较单一,你可以通过修改 search.htm 来美化搜索结果页。

操作步骤:

  1. 找到并打开搜索模板 模板路径通常是:/templets/default/search.htm,你可以通过【模板】->【默认模板管理】->【搜索模板设置】来找到它。

  2. 理解模板结构 search.htm 模板的核心是一个循环,用于遍历并显示所有搜索到的结果,关键标签是 {dede:list}

  3. 自定义搜索结果列表 你可以像修改列表页模板一样,修改 search.htm,下面是一个常见的自定义 search.htm 示例:

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <title>搜索结果 - {dede:global.keyword/}</title>
      <link rel="stylesheet" href="{dede:global.cfg_templets_skin/}/style.css">
    </head>
    <body>
      <div class="main">
        <div class="search-result-title">
          搜索“<strong>{dede:global.keyword/}</strong}”的结果,共找到 <strong>{dede:global.resultcount/}</strong> 条
        </div>
        <ul class="search-list">
          {dede:list pagesize='10'}
          <li>
            <h3><a href="[field:arcurl/]">[field:title function='htmlspecialchars(@me)'/]</a></h3>
            <p class="search-info">[field:description function='cn_substr(@me, 200)'/]...</p>
            <div class="search-meta">
              <span>发布时间:[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
              <span>来源:[field:source/]</span>
              <span>点击:[field:click/]</span>
            </div>
          </li>
          {/dede:list}
        </ul>
        <!-- 分页 -->
        <div class="page-nav">
          {dede:pagelist listsize='5' listitem='index,pre,next,end,pageno'}
          </div>
        </div>
      </div>
    </body>
    </html>
  4. 代码解释

    • {dede:global.keyword/}:获取用户搜索的关键词。
    • {dede:global.resultcount/}:获取搜索到的结果总数。
    • {dede:list ...}:循环输出搜索结果,用法和列表页的 {dede:list} 完全一样。
    • [field:arcurl/]:文章链接。
    • [field:title/]
    • [field:description/]
    • [field:pubdate/]:发布日期。
    • {dede:pagelist ...}:调用分页条。

实现“搜索并指定栏目”的高级搜索

有时候我们希望用户可以在特定栏目内进行搜索,这需要修改搜索表单,增加一个栏目选择的下拉框。

操作步骤:

  1. 修改搜索表单 在你的搜索表单中,增加一个 <select> 下拉框,并使用织梦的 {dede:channel} 标签来获取所有栏目。

    <form name="formsearch" action="{dede:global.cfg_cmspath/}/plus/search.php">
      <div class="search-box">
        <input type="hidden" name="kwtype" value="0" />
        <select name="typeid" style="width:120px;">
          <option value='0'>全站搜索</option>
          {dede:channel type='son' noself='yes'}
          <option value='[field:id/]'>[field:typename/]</option>
          {/dede:channel}
        </select>
        <input type="text" name="q" placeholder="请输入搜索关键词" class="search-input" />
        <button type="submit" class="search-btn">搜索</button>
      </div>
    </form>
  2. 代码解释

    • <select name="typeid">:
      • name="typeid":这个 name 值也是固定的,织梦搜索脚本通过 $_GET['typeid'] 来获取用户选择的栏目ID。
    • <option value='0'>全站搜索</option>:
      • value='0' 代表全站,这是织梦的约定。
    • {dede:channel type='son' noself='yes'}:
      • 这个标签会循环输出当前栏目下的所有子栏目,如果你想在首页显示所有顶级栏目,可以去掉 type='son' 属性。

用户就可以选择栏目进行精确搜索了。


总结与排错

  • 搜索没反应?:首先检查 <form> 标签里的 action 路径是否正确,以及 <input name="q"> 中的 name 是否为 q
  • 搜索结果为空?:检查你的文章是否已审核发布,文章标题或内容中是否包含你搜索的关键词,可以尝试用模糊匹配(kwtype=12)。
  • 搜索结果样式不好看?:直接去修改 /templets/default/search.htm 文件,像修改普通列表页一样修改它。
  • 想搜索特定字段?:默认搜索的是标题和内容,如果你需要搜索其他字段(如作者、来源等),需要修改 /plus/search.php 文件,这属于二次开发范畴,相对复杂。

希望这份详细的教程能帮助你成功为织梦网站添加搜索功能!

-- 展开阅读全文 --
头像
sprintf在C语言中如何实现?
« 上一篇 01-22
织梦表单图片上传大小如何调整?
下一篇 » 01-22

相关文章

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

目录[+]