• 0712-2888027 189-8648-0214
    微信公眾號

    孝感風信網絡科技有限公司微信公眾號

    當前位置:主頁 > 技術支持 > DedeCMS > dedecms自動模型聯動搜索

    dedecms自動模型聯動搜索

    時間:2024-03-28來源:風信官網 點擊: 452次

    今天看了一中午的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查詢(速度非??欤?br /> 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 自動模型 聯動搜索
    欄目列表
    推薦內容
    熱點內容
    展開
    动漫h精品无码一区二区三区,欧美日韩精品一区二区,午夜麻豆国产精品,加勒比中文字幕无码,亚洲日本va中文字幕区