帝国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" > |
04 | < td >关键字:< input name = "keyboard" type = "text" size = "10" ></ td > |
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 > |
16 | < select name = "classid" > |
17 | < option value = "0" >搜索全部</ option > |
18 | < option value = "1" >新闻中心</ option > |
19 | < option value = "4" >技术文档</ option > |
20 | < option value = "22" >下载中心</ option > |
22 | < td >< input type = "submit" name = "submit" value = "搜索" ></ td > |
搜索表单多条件并列搜索语法说明
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 = "[!--news.url--]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 > |
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" > |
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 > |
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 > |
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 > |
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 > |
为了可以加入对自定义字段myarea与mycategory的搜索,我们需要对e/search/index.php进行适当改写:
01 | $keyboard = $_POST [ 'keyboard' ]. ',' . $_POST [ 'area' ]. ',' . $_POST [ 'category' ]; |
04 | if ( is_array ( $keyboard )) |
06 | elseif ( strstr ( $keyboard , ',' )) |
08 | $keyboard = explode ( ',' , $keyboard ); |
12 | $keyboard =trim( $keyboard ); |
13 | $len = strlen ( $keyboard ); |
14 | if ( $len < $public_r [min_keyboard]|| $len > $public_r [max_keyboard]) |
16 | printerror( "MinKeyboard" , $getfrom ,1); |
OK,完成。