帝国CMS的搜索表单语法规则

帝国CMS提供了比较强大的搜索结果调用,你可以按照帝国cms搜索表单制作语法,制作出满足你需求的大部分搜索功能。如果你在你的数据库中有自定义字段,那么可能需要改一下e/search/index.php对form表单提交的数据处理,可以参考文章最后提供的例子。先来看看搜索表单变量说明:

变量名 说明 例子
搜索表单提交地址 POST方式:/e/search/index.php
GET方式:/e/search/?searchget=1 /e/search/?searchget=1&keyboard=帝国&show=title
keyboard 搜索关键字变量
show 搜索字段变量(多个字段用","格开。搜索字段必须是后台模型开启搜索的字段)
classid 搜索栏目ID(不设置为不限,多个栏目可用","格开,设置父栏目会搜索所有子栏目)
ztid 搜索专题ID(不设置为不限,多个专题可用","格开)
tbname 按数据表搜索(需与搜索模板ID结合)
tempid 所用搜索模板ID(一般跟按表搜索结合使用)
starttime与endtime 分别为搜索发布起始时间与结束时间的信息(不填为不限.格式:2008-02-27)
startprice与endprice 分别为商品价格的起始价格与结束价格(不填为不限)
搜索特殊字段 id : 按信息ID搜索
keyboard : 按关键字搜索(可实现按tags列出信息)
userid : 按发布者用户ID搜索
username : 按发布者用户名搜索
member 值为0则不限制
值为1则为只搜索会员投稿的信息
值为2则为只搜索管理员增加的信息
orderby 排序字段:
0:按发布日期(默认)
1:按ID
2:按评论数
3:按浏览人气
4:按下载数
myorder 排序方式:
0:倒序排列(默认)
1:顺序排列
andor 设置多条件查询之间关联关系,有两种:
or : 或者的关系(默认)
and : 并且的关系
hh 逻辑运算联结符变量:
LT : 小于
GT : 大于
EQ : 等于
LE : 小于等于
GE : 大于等于
NE : 不等于
IN : 包含(搜索关键字用空格隔开每个值)
BT : 范围,两个值之间(搜索关键字用空格隔开两个值)
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="[!--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>
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             <tdtd>
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             <tdtd>
40         tr>
41         <tr class="even">
42             <td style=" text-align:left;"><input name="keyboard"type="text" size="32" value="" id="keyboard" class="inputText" />   <inputtype="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,完成。

你可能感兴趣的:(帝国CMS)