• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    DEDECMS给list标签加上多字段排序功能
    POST TIME:2017-11-13 01:24

    dedecms的list标签orderby属性只支持按一个字段排序,假如想多个字段排序的话,就需要对PHP举办修改,使其可以支持多字段排序,修改如下:

    打开include/arc.listview.class.php,找到:

    //假如不消默认的sortrank或id排序,利用连系查询(数据量大时很是迟钝) 
           if(preg_match('/hot|click|lastpost|title/', $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 `js_archives` arc 
              LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
              $addJoin
              WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row"; 
           } 
           //普通环境先从arctiny表查出ID,然后按ID查询(速度很是快) 
           else
           { 
               $t1 = ExecTime(); 
               $ids = array(); 
               $query = "SELECT id FROM `js_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 `js_archives` arc LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
                          $addJoin
                          WHERE arc.id in($idstr) $ordersql "; 
               } 
               $t2 = ExecTime(); 
               //echo $t2-$t1; 
      
           }

    替换为:

    if($orderby=="default") 
           { 
               $t1 = ExecTime(); 
               $ids = array(); 
               $query = "SELECT id FROM `js_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 `js_archives` arc LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
                          $addJoin
                          WHERE arc.id in($idstr) $ordersql "; 
               } 
               $t2 = ExecTime(); 
               //echo $t2-$t1; 
      
           } 
            else
           { 
               $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 `js_archives` arc 
              LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
              $addJoin
              WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row"; 
           }

    找到:

    else { 
                $ordersql=" ORDER BY arc.sortrank $orderWay"; 
          }

    替换为:

    else if($orderby=="default"){ 
                $ordersql=" ORDER BY arc.sortrank $orderWay"; 
            } 
            else{ 
               $ordersql=" ORDER BY ".$orderby.",arc.sortrank $orderWay"; 
            }

    此刻在模板中就可以应用了多字段排序了,模板应用如下:

    {dede:list pagesize='17' orderby='arc.title desc,arc.id'}


    
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!