西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > dedecms教程 >

织梦DEDECMS给list标签加上多字段排序功能

时间:2017-03-14 09:34来源:未知 作者:好模板编辑 点击:
织梦dedecms的list标签orderby属性只支持按一个字段排序,假如想多个字段排序的话,就需要对PHP举办修改,使其可以支持多字段排序,修改如下: 打开include/arc.listview.class.php,找到: /
织梦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'}
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------