因为最近一直在做一个旅游网站(西藏家http://www.tibetic.com),需要用到一个全站资源搜索,当时从网上找了很久都没有找到实现方式,便用刚学习的“拙劣的”php代码自己写了一个全站内容搜索,主要思想就是用php的mysql_connect()函数连接数据库后,使用str_split()函数将关键词给拆分成单个字符,并且在每个资源后面加上一个通配符(%)之后组成一个新的字符串,然后再用新的字符串放到mysql_query()进行匹配,条件是网站中所有有内容的栏目的channelId号,最后遍历输出。参考代码如下
<?php
$local=数据库名称;
$connuser=用户名;
$connpass=密码;
$conn=mysql_connect("$local","$connuser","$connpass");
mysql_select_db("doccms",$conn);
mysql_query("SET NAMES 'utf8'");
$keyword = $_POST['keyboard'];
$re = str_split($keyword,3);
$st;
$index=0;
$max = count($re);
foreach($re as $value){
$index++;
if($index == $max) {
$st.='\'%'.$value.'%\'';
}else{
$st.='\'%'.$value.'%\' or ';
}
}
$t = mysql_query("select title from doc_list where
(channelId = '1' OR channelId = '2' OR channelId='3'……) AND title like $st");
while($row=mysql_fetch_row($t)){echo $row[0]."<br>";}
?>
这样子虽然可以打印出所有匹配的标题,但是这些标题都没有连接而且submit时也没有进行正则内容判断还是不能做到完善的功能。正当我要继续完善它时,无意中发现 API Document(http://www.doccms.com/faq/) <form id="searchform" name="searchform" method="post" action="<?php echo $tag['form.action.search']; ?>" target="_blank" style="text-align:center" onsubmit="javascript:return check();">
<input class="main text inputText" maxlength="70" size="30" type="text" name="keyword" id="keywords" placeholder="搜你所享" />
<input type="hidden" name="show" value="title,smalltext" />
<input type="hidden" name="tempid" value="1" />
<input class="inputImage" type="image" value=" 搜 索 " src="<?php echo $tag['path.skin']; ?>images/searchbutton.png"/>
</form>
大家一起感受下效果
我比较喜欢使用doccms的原因就是因为它很小,自定义化空间比较大。因为网站有一个组队功能,doccms提供一个自定义表单栏目可以用于提交自定义表单,但是我找了半天也没发现doccms提供自定义表单提供。好吧,不支持就就不支持吧,咱自己写。。。我查看doc_order的表结构发现,这些表单记录都可以用channelId进行区分,
所以需要哪部分表单用条件指定一下就好了(如:select custom from doc_order where channelId = 1),但是你自定义的那些表单项全部一股脑的放在了custom的字段里,而且每一条记录都是类似这样的结构:A<|@|>B<|@|>C,A、B、C都是你自己设置的表单项,于是完全可以用explode()函数将每条记录再拆成好几个结果集数组,需要什么你就使用哪个数组,从而曲线救国,实现了内容分离。
我写了一个组队信息公示的页面,代码如下
<?php
$server_name = 数据库名称;
$username =用户名;
$pass =密码;
$conn = mysql_connect("$server_name","$username","$pass");
if(!$conn)
{
echo "I'm sorry,your database could not connect..";
exit;
}
mysql_select_db(数据库名,$conn);
mysql_query("SET NAMES 'utf8'");
$infostr = mysql_query("select custom from doc_order where channelId = 7 ",$conn);
$remark = mysql_query("select remark from doc_order where channelId = 7 ",$conn);
while($rowR=mysql_fetch_row($remark))
{
$rowI = mysql_fetch_row($infostr);
$sub = explode("<|@|>",$rowI[0]);
echo "<div class='infoSty vcard'><div>团队名称:<span class='fn'>".$sub[0]."</span></div><div>人数上限:<span>".$sub[1]."</span></div><div>目的地:<span class='adr'>".$sub[2]."</span></div><div>交通工具:<span>".$sub[3]."</span></div><div>邮箱:<span class='email'>".$sub[4]."</span></div><div>队长说:<span class='note'>".$sub[5]."</span></div><div>备注:<span class='age'>".$rowR[0]."</span></div></div>";
}
?>
效果如下
好了,今天到这吧,近期准备跳槽到wordPress了,各位docer珍重啊:)