第一步:导入地区文件,dedecms 是把地区以数据的形式保存在文件里。
require_once(DEDEDATA.'/enums/nativeplace.php');
第二步: 判断是否启用地区搜索,有没有传入地区的ID
$nativeplace = ( (empty($nativeplace) || !is_numeric($nativeplace)) ? 0 : $nativeplace ); $nativeplace=GetPlace($nativeplace);
第三步:处理传入的地区ID,这个是获取子类的方法
function GetPlace($nat) { global $em_nativeplaces; $place=''; if($nat%500==0){ foreach($em_nativeplaces as $eid=>$em){ $place.=$eid.","; //获取二级,如果顶级分类就输出该分类下的所有类别 } } else{ if(strpos($eid,".")!==false&&$eid>500) //当有点的时候是三级分类,没点的就是二级分类 { $place.=$nat.","; }else{ foreach($em_nativeplaces as $eid=>$em) { if(strpos($eid,$nat,0)!==false) { $place.=$eid.","; } } } } $place=substr($place,0,strlen($place)-1); return $place; }
第四步:在搜索查询的时候传入查询出来的地区Id
if(!empty($this->nativeplace)){ $this->addSql .=" and sp.nativeplace in({$this->nativeplace})"; } if(!empty($this->q)){ $this->addSql .="and ch.title like '%{$this->q}%' "; } if(!empty($this->types)){ $this->addSql .=" and arc.typeid IN ({$this->types}) "; }
这里就是查询的条件,传入地区搜索的sql 当中就可以了,这样就可以试下地区查询的方法。