doccms的全站关键词搜索标签使用和doc_order的内容调用(php)

本文介绍了如何使用PHP实现DocCMS全站内容搜索,通过拆分关键词并结合MySQL查询进行匹配。同时,展示了如何利用doc_order表的custom字段,通过explode()函数拆分记录以满足自定义表单的需求。最后分享了作者即将转向WordPress的计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    因为最近一直在做一个旅游网站(西藏家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/)中已经提供了全站搜索的功能函数,只需要在action使用这个标签就可以实现搜索了,不仅有链接,当你的网站使用产品展示栏目时,他也会显示产品的图片,分页也是必须的,狂拽帅气吊炸天了。。。

 <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珍重啊:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值