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

尝试去理解ECMS的搜索机制
服务器君一共花费了223.241 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

帝国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">

下面是一个例子:

<table width="320" border="0" cellspacing="1" cellpadding="3">
<form name="searchform" method="post" action="/e/search/index.php">
<tr>
   <td>关键字:<input name="keyboard" type="text" size="10"></td>
   <td>范围:
      <select name="show">
      <option value="title">标题</option>
      <option value="smalltext">简介</option>
      <option value="newstext">内容</option>
      <option value="writer">作者</option>
      <option value="title,smalltext,newstext,writer">搜索全部</option>
       </select></td>
</tr>
<tr>
   <td>栏 目:
      <select name="classid">
      <option value="0">搜索全部</option>
      <option value="1">新闻中心</option>
      <option value="4">技术文档</option>
      <option value="22">下载中心</option>
       </select> </td>
   <td><input type="submit" name="submit" value="搜索"></td>
</tr>
</form>
</table>

搜索表单多条件并列搜索语法说明

1. 多字段并列搜索:有"字符串"与"数组"两种传递方式

字符串传递为例子:

<input type="hidden" name="hh" value="LK">
<input type="hidden" name="show" value="title,writer">
<input type="hidden" name="keyboard" value="标题,作者">

说明:上面为模糊查询title字段包含"标题"字符或者writer字段包含"作者"的信息

数组传递为例子:

<input type="hidden" name="hh" value="LK">
<input type="hidden" name="show[]" value="title">
<input type="hidden" name="keyboard[]" value="标题">
<input type="hidden" name="show[]" value="writer">
<input type="hidden" name="keyboard[]" value="作者">

上面为模糊查询title字段包含"标题"字符或者writer字段包含"作者"的信息

2. 多逻辑运算联结符并列搜索

字符串传递为例子:

<input type="hidden" name="hh" value="LK,EQ">
<input type="hidden" name="show" value="title,writer">
<input type="hidden" name="keyboard" value="标题,作者">

说明:上面为模糊查询title字段包含"标题"字符或者writer字段等于"作者"的信息

字符串传递为例子:

<input type="hidden" name="show[]" value="title">
<input type="hidden" name="hh[]" value="LK">
<input type="hidden" name="keyboard[]" value="标题">
<input type="hidden" name="show[]" value="writer">
<input type="hidden" name="hh[]" value="EQ">
<input type="hidden" name="keyboard[]" value="作者">

说明:上面为模糊查询title字段包含"标题"字符或者writer字段等于"作者"的信息。

一个实际例子

表单设计如下:

						<form action="[!--news.url--]e/search/index.php" method="post" name="searchform" id="searchform">
						<select name="classid" id="" style="display:none">
							<option value="59,60,78,79,80,81" selected>全部</option>
						</select>
						<input type="hidden" name="show" value="title,myarea,mycategory,smalltext" />
						<input type="hidden" name="tempid" value="1" />
						<table width="100%" cellspacing="0" cellpadding="0" border="0">
							<tbody>
								<tr class="even">
									<td style=" text-align:left;">地区:
								<select name="area" id="">
									<option value="">不限</option>
									<option value="香洲">香洲</option>
									<option value="吉大">吉大</option>
									<option value="拱北">拱北</option>
									<option value="新香洲">新香洲</option>
									<option value="前山">前山</option>
									<option value="南屏">南屏</option>
									<option value="金湾">金湾</option>
									<option value="斗门">斗门</option>
								</select>
								
								  房型:
								<select name="category" id="">
									<option value="">不限</option>
									<option value="58_0">一房</option>
									<option value="58_1">二房</option>
									<option value="58_2">三房以上</option>
									<option value="58_3">公寓</option>
									<option value="58_4">写字楼</option>
									<option value="58_5">商铺</option>
									<option value="58_6">厂房</option>
								</select>
									</td>
									<td> </td>
								</tr>
								<tr class="even">
									<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>
									<td> </td>
								</tr>
								<tr class="even">
									<td style=" text-align:left;"><input name="keyboard" type="text" size="32" value="" id="keyboard" class="inputText" />   <input type="submit" name="Submit22" value=" 搜 索 " /></td>
									<td></td>
								</tr>
							</tbody>
						</table>
						</form>

为了可以加入对自定义字段myarea与mycategory的搜索,我们需要对e/search/index.php进行适当改写:

$keyboard=$_POST['keyboard'].','.$_POST['area'].','.$_POST['category'];
// 这是原来的:$keyboard=$_POST['keyboard'];
$keyboardone=0;
if(is_array($keyboard))
{}
elseif(strstr($keyboard,','))
{
	$keyboard=explode(',',$keyboard);
}
else
{
	$keyboard=trim($keyboard);
	$len=strlen($keyboard);
	if($len<$public_r[min_keyboard]||$len>$public_r[max_keyboard])
	{
		printerror("MinKeyboard",$getfrom,1);
	}
	$keyboardone=1;
}

OK,完成。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1448,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1448

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《设计模式:可复用面向对象软件的基础》 Erich Gamma (作者), Richard Helm (作者), Ralph Johnson (作者), John Vlissides (作者), 李英军 (译者), 等 (译者)

《设计模式:可复用面向对象软件的基础》是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。四位顶尖的面向对象领域专家精心选取了最具价值的设计实践,加以分类整理和命名,并用简洁而易于重用的形式表达出来。本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇。

更多计算机宝库...