0712-2888027 189-8648-0214
微信公众号

孝感风信网络科技有限公司微信公众号

当前位置:主页 > 技术支持 > DedeCMS > dedecms自动模型联动搜索

dedecms自动模型联动搜索

时间:2024-06-14来源:风信官网 点击: 543次

今天看了一中午的dedecms,改了一个小东西,就是dedecms自动模型的联动搜索。

大家都知道,好像联动搜索只能是独立模型里面的。搞了一会儿我就打算直接用搜索功能的,但是想了一会儿,还是要相信自己能弄出来的。

闲话不多说,Let’s go!!这里我们选择nativeplace举例,而且这里的nativeplace我只保留的省份(嘿嘿,工作需要)。

当然是打开list.php了(如果你不知道这个,好吧,我告诉你,联动搜索是用这个文件的,位置是plus/list.php),大家可以看到有一个if判断结构

if($tinfos['issystem']==-1){
//others;
include(DEDEINC."/arc.sglistview.class.php");
$lv = new SgListView($tid,$cArr);
}  else {
include(DEDEINC."/arc.listview.class.php");
$lv = new ListView($tid);      //others
}

这里的issystem就是判断你的模型是不是独立模型,如果值为-1就是独立模型了,因为我们是自动模型,所有就在else包含的语句中搞搞了。

可以看到SgListView类中多了一个$cArr参数,这里就是传递的nativeplace等参数,所以我也给我们的listview加上参数

然后else包含的语句变为

include(DEDEINC."/arc.listview.class.php");
$nativeplace = ( (empty($nativeplace) || !is_numeric($nativeplace)) ? 0 : $nativeplace );
$cArr['nativeplace'] = $nativeplace;
$lv = new ListView($tid,1,$cArr);

当然了,我们传了一个$cArr给构造函数,当然构造函数要想办法接收了。所以我们打开位于include/arc.listview.class.php的文件,然后修改此类的构造函数为(原来的构造函数什么样子自己看):

function __construct($typeid,$uppage=1,$searchArr=array()) {
//在$this->TotalResult = is_numeric($this->TotalResult)? $this->TotalResult : "";下面加入下面一行
$this->searchArr = $searchArr;
}

然后这里出现了一个$this->searchArr,所以,我们要给类加一个属性:var $searchArr;(别跟我说你不知道加哪)。

现在我们已经传过来nativeplace了,即$this->searchArr['nativeplace'],然后我们给查询语句加一个判断就大功搞成了。

在大概650行左右有if(ereg(‘hot|click|lastpost’,$orderby))这么一句话,在上面加上:

if(!empty($this->searchArr['nativeplace']))  {
$temp = $this->searchArr['nativeplace'];
$dobila = "$addtable.nativeplace = $temp and";
}  else {
$dobila = "";
}

通过这几句,我们增加了一个判断条件$dobila,具体我就不说明了。

讲$dobila加入到查询字符串就OK了,位置在,饿,不好说,这样吧,在if(ereg(‘hot|click|lastpost’,$orderby))这个条件判断语句中,我把整段代码复制过来,大家看看在哪就ok了。

//如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢)

if(ereg('hot|click|lastpost',$orderby))  {
$query = "Select arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addField      from `dede_archives` arc      left join `dede_arctype` tp on arc.typeid=tp.id
$addJoin      where $dobila {$this->addSql} $ordersql limit $limitstart,$row";
}  //普通情况先从arctiny表查出ID,然后按ID查询(速度非常快)
else  {
$t1 = ExecTime();
$ids = array();
$query = "Select id From `dede_arctiny` arc where {$this->addSql} $ordersql limit $limitstart,$row ";
$this->dsql->SetQuery($query);
$this->dsql->Execute();
while($arr=$this->dsql->GetArray())
{   $ids[] = $arr['id'];      }
$idstr = join(',',$ids);
if($idstr=='')      {
return '';
}      else      {
$query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,          tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addField          from `dede_archives` arc left join `dede_arctype` tp on arc.typeid=tp.id
$addJoin          where $dobila arc.id in($idstr) $ordersql ";
}
$t2 = ExecTime();      //echo $t2-$t1;
}

对了,本来想上网查这个东东来,结果看到几个付费的,擦,哥自己弄,不用你们,然后我就写了一个免费的给大家看

热门关键词: dedecms 自动模型 联动搜索
栏目列表
推荐内容
热点内容
展开