0 Comments

内容搜索的实现

发布于:2012-11-26  |   作者:广州网站建设  |   已聚集:人围观
 内容搜索的实现

内容搜索是在广告列表显示内容的基础上做关键字的匹配,然后重新生成数组。因为与广告列表共用一个页面,所以页面代码和标签都是完全相同的,这里不再重复了,请读者参考前面的页面代码。下面具体地介绍内容搜索的代码实现。

(1)页面搜索的表单代码:

广州网站设计
  1. <form action="" method="get" name="form1" id="form1"> 
  2. <tr> 
  3.     <td align="right"><input name="kw" type="text" id="kw" 
  4.         value="{|$kw|}"> <select name="type" id="type"> 
  5.         <option value="nr">广告内容</option> 
  6.         <option value="name">广告ID</option> 
  7.         <option value="all">广告备注</option> 
  8.         <option value="gge">广告规格</option> 
  9.     </select> <input type="submit" value="搜索"> <a href="add.php" 
  10.         target="_self">添加新的广告</a></td> 
  11. </tr> 
  12. </form> 

【代码解读】

上面的代码定义了一个标准的表单,提供给用户4种类型的选项。其中,input标签的值就是用户输入的查询关键字,代码如下:

广州网站设计
  1. <input name="kw" type="text" id="kw" value="{|$kw|}"> 

 

(2)接收到了表单传过来的查询关键字,PHP脚本匹配关键字,生成结果集数组,然后转化成对应的模板标签并输出查询结果。下面来看PHP是如何处理关键字获得查询结果的。先加载配置文件并获得查询类型,代码如下:
广州网站建设
  1. include_once(dirname(__FILE__)."/inc/include.smarty.php");    
  2.                                                     //加载Smarty配置文件  
  3. include(dirname(__FILE__). "/inc/include.function.php"); //加载函数库文件  
  4. require(dirname(__FILE__)."/config/config.php");           //加载容配置文件  
  5. $type=$_REQUEST[type];                                     //获得操作类型  
  6. $kw=$_REQUEST[kw];   
  7. $page=$_REQUEST[page];  

【代码解读】

上面的代码将获得的关键字赋值给$kw变量,这里需要具体解释配置文件config.php的作用,请看config.php文件的内容:

广州网站建设
  1. /*******************************************  
  2. '文件名:config.php  
  3. '主要功能:配置文件  
  4. '说明:  
  5. '*******************************************/  
  6. //定义管理员信息  
  7. $adminname="admin"; //管理员账号  
  8. $adminword="admin"; //管理员密码  
  9. //管理员URL安全码  
  10. //如设置后,管理地址将是 http://你的网址/本程序目录/log.php?safecode  
  11. $safecode="safecode";  
  12. //设置配置文件信息  
  13. //广告代码存放的目录  
  14. $addata="js";  
  15. $dbtable="config/data.txt";//设置文件存放位置  
  16. $pagesize="10";             //每页显示的广告条数  

【代码解读】

以上代码定义了管理员信息的变量和广告代码存放的目录。可以看到,广告代码文件是data.txt文件,也就是说,查询关键字是与这个文档中的内容做匹配得到的查询结果。读者要注意,这里的逻辑关系就是结果集的来源。

(3)在直观地了解了结果集来源后,来看程序是如何读取和匹配结果的。通过file_get_contents()函数获得广告文件中的内容,再通过explode()函数切割成字符串数组,代码如下:


  1. $msgd=explode("|www_allen|",file_get_contents($dbtable)); 

 

(4)匹配规则和处理数组代码如下:

  1. if($kw){  
  2. for ($i=0;$i<=$rows;$i++){  
  3.     $tmp2=explode("|allen|",$msgd[$i]);     //切割字符  
  4.     if($type=="name"){                      //类型赋值  
  5.         $msgn[$i]=$tmp2[0];                 //消息内容  
  6.         }elseif($type=="nr"){  
  7.             $msgn[$i]=$tmp2[2];  
  8.         }  
  9.         elseif($type=="gge"){  
  10.             $msgn[$i]=$tmp2[4];  
  11.         }  
  12.     else{$msgn[$i]=$tmp2[3];  
  13. }  
  14. if(eregi($kw,$msgn[$i])){                   //字符串比对解析(与大小写无关)  
  15.     $chj_nr[]=$msgd[$i];  
  16.     $chj_numib++;  
  17.     }  
  18. }  
  19. if($chj_numib<1){  
  20.     echo "没有相关 $kw 的匹配结果!!";  
  21.     exit;  
  22. }  
  23. //处理分页和计算总页数代码省略  
  24. ...  
  25. $chj_adlen=$chj_numib-1;  
  26. for($i=$pp;$i< $pp2;$i++){  
  27. if($i < $chj_numib){  
  28.     $tmp=explode("|allen|",$msg[$i]);  
  29.     if(!empty($kw)){  
  30.         $arr[$i]['title']=$tmp[0];  
  31.         $arr[$i]['type']=$tmp[1];  
  32.         $arr[$i]['size']=$tmp[4];  
  33.         $arr[$i]['desc']=$tmp[3];  
  34.         }else{  
  35.         //当为空时为前一个节点数组赋值  
  36.         $arr[$i-1]['title']=$tmp[0];  
  37.         $arr[$i-1]['type']=$tmp[1];  
  38.         $arr[$i-1]['size']=$tmp[4];  
  39.         $arr[$i-1]['desc']=$tmp[3];  
  40.     }  
  41.     }  
  42. }  

【代码解读】

得到的$arr数组就是跟关键字匹配得到的结果数组了。现在输入"互换链接"关键字测试程序匹配的结果,得到结果如图15.8所示。

(点击查看大图)图15.8  搜索结果
标签:
飞机