帝国CMS提供了比较强大的搜索结果调用,你可以按照帝国cms搜索表单制作语法,制作出满足你需求的大部分搜索功能。如果你在你的数据库中有自定义字段,那么可能需要改一下e/search/index.php对form表单提交的数据处理,可以参考文章最后提供的例子。先来看看搜索表单变量说明:
变量名 | 说明 | 例子 |
搜索表单提交地址 | POST方式:/e/search/index.php | <form name="searchform" method="post" action="/e/search/index.php"> |
GET方式:/e/search/?searchget=1 | /e/search/?searchget=1&keyboard=帝国&show=title | |
keyboard | 搜索关键字变量 | <input name="keyboard" type="text"> |
show | 搜索字段变量(多个字段用","格开。搜索字段必须是后台模型开启搜索的字段) | <input type="hidden" name="show" value="title,newstext"> |
classid | 搜索栏目ID(不设置为不限,多个栏目可用","格开,设置父栏目会搜索所有子栏目) | <input type="hidden" name="classid" value="1"> |
ztid | 搜索专题ID(不设置为不限,多个专题可用","格开) | <input type="hidden" name="ztid" value="1"> |
tbname | 按数据表搜索(需与搜索模板ID结合) | <input type="hidden" name="tbname" value="news"> |
tempid | 所用搜索模板ID(一般跟按表搜索结合使用) | <input type="hidden" name="tempid" value="1"> |
starttime与endtime | 分别为搜索发布起始时间与结束时间的信息(不填为不限.格式:2008-02-27) | <input name="starttime" type="text" value="0000-00-00" size="12"> <input name="endtime" type="text" value="0000-00-00" size="12"> |
startprice与endprice | 分别为商品价格的起始价格与结束价格(不填为不限) | <input name="startprice" type="text" value="0" size="6"> <input name="endprice" type="text" value="0" size="6"> |
搜索特殊字段 | id : 按信息ID搜索 keyboard : 按关键字搜索(可实现按tags列出信息) userid : 按发布者用户ID搜索 username : 按发布者用户名搜索 | <input type="hidden" name="show" value="keyboard"> |
member | 值为0则不限制 值为1则为只搜索会员投稿的信息 值为2则为只搜索管理员增加的信息 | <input type="hidden" name="member" value="1"> |
orderby | 排序字段: 0:按发布日期(默认) 1:按ID 2:按评论数 3:按浏览人气 4:按下载数 | <input type="hidden" name="orderby" value="1"> |
myorder | 排序方式: 0:倒序排列(默认) 1:顺序排列 | <input type="hidden" name="myorder" value="1"> |
andor | 设置多条件查询之间关联关系,有两种: or : 或者的关系(默认) and : 并且的关系 | <input type="hidden" name="andor" value="and"> |
hh | 逻辑运算联结符变量: LT : 小于 GT : 大于 EQ : 等于 LE : 小于等于 GE : 大于等于 NE : 不等于 IN : 包含(搜索关键字用空格隔开每个值) BT : 范围,两个值之间(搜索关键字用空格隔开两个值) LK : 模糊查询(默认) | <input type="hidden" name="hh" value="LK"> |
下面是一个例子:
01 | <table width="320" border="0" cellspacing="1" cellpadding="3"> |
02 | <form name="searchform" method="post" action="/e/search/index.php"> |
03 | <tr> |
04 | <td>关键字:<input name="keyboard" type="text" size="10"></td> |
05 | <td>范围: |
06 | <select name="show"> |
07 | <option value="title">标题</option> |
08 | <option value="smalltext">简介</option> |
09 | <option value="newstext">内容</option> |
10 | <option value="writer">作者</option> |
11 | <option value="title,smalltext,newstext,writer">搜索全部</option> |
12 | </select></td> |
13 | </tr> |
14 | <tr> |
15 | <td>栏 目: |
16 | <select name="classid"> |
17 | <option value="0">搜索全部</option> |
18 | <option value="1">新闻中心</option> |
19 | <option value="4">技术文档</option> |
20 | <option value="22">下载中心</option> |
21 | </select> </td> |
22 | <td><input type="submit" name="submit" value="搜索"></td> |
23 | </tr> |
24 | </form> |
25 | </table> |
1. 多字段并列搜索:有"字符串"与"数组"两种传递方式
字符串传递为例子:
1 | <input type="hidden" name="hh" value="LK"> |
2 | <input type="hidden" name="show" value="title,writer"> |
3 | <input type="hidden" name="keyboard" value="标题,作者"> |
说明:上面为模糊查询title字段包含"标题"字符或者writer字段包含"作者"的信息
数组传递为例子:
1 | <input type="hidden" name="hh" value="LK"> |
2 | <input type="hidden" name="show[]" value="title"> |
3 | <input type="hidden" name="keyboard[]" value="标题"> |
4 | <input type="hidden" name="show[]" value="writer"> |
5 | <input type="hidden" name="keyboard[]" value="作者"> |
上面为模糊查询title字段包含"标题"字符或者writer字段包含"作者"的信息
2. 多逻辑运算联结符并列搜索
字符串传递为例子:
1 | <input type="hidden" name="hh" value="LK,EQ"> |
2 | <input type="hidden" name="show" value="title,writer"> |
3 | <input type="hidden" name="keyboard" value="标题,作者"> |
说明:上面为模糊查询title字段包含"标题"字符或者writer字段等于"作者"的信息
字符串传递为例子:
1 | <input type="hidden" name="show[]" value="title"> |
2 | <input type="hidden" name="hh[]" value="LK"> |
3 | <input type="hidden" name="keyboard[]" value="标题"> |
4 | <input type="hidden" name="show[]" value="writer"> |
5 | <input type="hidden" name="hh[]" value="EQ"> |
6 | <input type="hidden" name="keyboard[]" value="作者"> |
说明:上面为模糊查询title字段包含"标题"字符或者writer字段等于"作者"的信息。
表单设计如下:
01 | <form action="/e/search/index.php" method="post" name="searchform" id="searchform"> |
02 | <select name="classid" id="" style="display:none"> |
03 | <option value="59,60,78,79,80,81" selected>全部</option> |
04 | </select> |
05 | <input type="hidden" name="show" value="title,myarea,mycategory,smalltext" /> |
06 | <input type="hidden" name="tempid" value="1" /> |
07 | <table width="100%" cellspacing="0" cellpadding="0" border="0"> |
08 | <tbody> |
09 | <tr class="even"> |
10 | <td style=" text-align:left;">地区: |
11 | <select name="area" id=""> |
12 | <option value="">不限</option> |
13 | <option value="香洲">香洲</option> |
14 | <option value="吉大">吉大</option> |
15 | <option value="拱北">拱北</option> |
16 | <option value="新香洲">新香洲</option> |
17 | <option value="前山">前山</option> |
18 | <option value="南屏">南屏</option> |
19 | <option value="金湾">金湾</option> |
20 | <option value="斗门">斗门</option> |
21 | </select> |
22 |
23 | 房型: |
24 | <select name="category" id=""> |
25 | <option value="">不限</option> |
26 | <option value="58_0">一房</option> |
27 | <option value="58_1">二房</option> |
28 | <option value="58_2">三房以上</option> |
29 | <option value="58_3">公寓</option> |
30 | <option value="58_4">写字楼</option> |
31 | <option value="58_5">商铺</option> |
32 | <option value="58_6">厂房</option> |
33 | </select> |
34 | </td> |
35 | <td> </td> |
36 | </tr> |
37 | <tr class="even"> |
38 | <td style=" text-align:left;">时间范围: <input name="starttime" type="text"value="2008-08-08" size="12" onclick="calendar.show(this);" /> 到 <input type="text"id="todayButton" name="todayButton" value="" size="12" onclick="calendar.show(this);" /> (不选则不限时段)</td> |
39 | <td> </td> |
40 | </tr> |
41 | <tr class="even"> |
42 | <td style=" text-align:left;"><input name="keyboard" type="text" size="32"value="" id="keyboard" class="inputText" /> <input type="submit" name="Submit22"value=" 搜 索 " /></td> |
43 | <td></td> |
44 | </tr> |
45 | </tbody> |
46 | </table> |
47 | </form> |
为了可以加入对自定义字段myarea与mycategory的搜索,我们需要对e/search/index.php进行适当改写:
01 | $keyboard=$_POST['keyboard'].','.$_POST['area'].','.$_POST['category']; |
02 | // 这是原来的:$keyboard=$_POST['keyboard']; |
03 | $keyboardone=0; |
04 | if(is_array($keyboard)) |
05 | {} |
06 | elseif(strstr($keyboard,',')) |
07 | { |
08 | $keyboard=explode(',',$keyboard); |
09 | } |
10 | else |
11 | { |
12 | $keyboard=trim($keyboard); |
13 | $len=strlen($keyboard); |
14 | if($len<$public_r[min_keyboard]||$len>$public_r[max_keyboard]) |
15 | { |
16 | printerror("MinKeyboard",$getfrom,1); |
17 | } |
18 | $keyboardone=1; |
19 | } |
OK,完成。
比如公共模板里的模向搜索js模板。
自定义模型,字段搜索启用后,按自建表job 可以写成这样,供参考
// <form name=search_js1 method=post action='/e/search/index.php' onsubmit='return search_check(document.search_js1);'><input type="hidden" name="show" value="title,fl,yx,jy,xl,xz,dd,ftitle,smalltext"><input type="hidden" name="tbname" value="job"><input type="hidden" name="tempid" value="1"><input class="search_input" name="keyboard" type="text" placeholder="请输入职位名称或公司名称" value=""><input type="submit" name="Submit" value="找工作" class="search_button"></form> //
新闻热点
疑难解答