核心概念:织梦的搜索机制
在开始之前,你需要了解织梦搜索的几个关键点:

(图片来源网络,侵删)
- 搜索表单:用户输入关键词并点击“搜索”按钮的表单,它最重要的部分是
action属性,这个属性指向处理搜索请求的PHP脚本。 - 搜索脚本:接收表单提交过来的关键词,在数据库中进行查询,并返回搜索结果的页面,这个脚本的路径通常是
/plus/search.php。 - 搜索模板:用于展示搜索结果列表的HTML模板,这个模板的路径通常是
/templets/default/search.htm,你可以自定义这个模板来改变搜索结果的展示样式。
在首页添加一个简单的搜索框(最常用)
这是最基础也是最常见的需求,通常放在网站顶部的导航栏或Logo旁边。
操作步骤:
-
打开首页模板文件 登录织梦后台,点击【模板】->【默认模板管理】,找到你正在使用的首页模板(通常是
index.htm),点击后面的【修改】。 -
添加搜索表单代码 在你希望显示搜索框的位置(
<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> -
代码解释
<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所指向的脚本。
- 提交按钮,用户点击后会触发表单的
-
保存并刷新首页 保存模板文件,然后刷新你的网站首页,就能看到一个可以使用的搜索框了。
在列表页或内容页添加搜索框
这个操作和方法一几乎完全一样,只是打开的模板文件不同。
操作步骤:
-
打开对应的模板文件
- 如果你想在文章列表页添加,就修改
list_article.htm。 - 如果你想在产品列表页添加,就修改
list_product.htm。 - 如果你想在文章内容页添加,就修改
article_article.htm。 - 位置:【模板】->【默认模板管理】。
- 如果你想在文章列表页添加,就修改
-
插入代码 同样,在你需要的位置插入方法一中的搜索表单代码即可。
修改搜索结果页模板 (search.htm)
当你使用默认的搜索功能时,结果页可能样式比较单一,你可以通过修改 search.htm 来美化搜索结果页。
操作步骤:
-
找到并打开搜索模板 模板路径通常是:
/templets/default/search.htm,你可以通过【模板】->【默认模板管理】->【搜索模板设置】来找到它。 -
理解模板结构
search.htm模板的核心是一个循环,用于遍历并显示所有搜索到的结果,关键标签是{dede:list}。 -
自定义搜索结果列表 你可以像修改列表页模板一样,修改
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> -
代码解释
{dede:global.keyword/}:获取用户搜索的关键词。{dede:global.resultcount/}:获取搜索到的结果总数。{dede:list ...}:循环输出搜索结果,用法和列表页的{dede:list}完全一样。[field:arcurl/]:文章链接。[field:title/]。[field:description/]:[field:pubdate/]:发布日期。{dede:pagelist ...}:调用分页条。
实现“搜索并指定栏目”的高级搜索
有时候我们希望用户可以在特定栏目内进行搜索,这需要修改搜索表单,增加一个栏目选择的下拉框。
操作步骤:
-
修改搜索表单 在你的搜索表单中,增加一个
<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> -
代码解释
<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=1或2)。 - 搜索结果样式不好看?:直接去修改
/templets/default/search.htm文件,像修改普通列表页一样修改它。 - 想搜索特定字段?:默认搜索的是标题和内容,如果你需要搜索其他字段(如作者、来源等),需要修改
/plus/search.php文件,这属于二次开发范畴,相对复杂。
希望这份详细的教程能帮助你成功为织梦网站添加搜索功能!
