广

织梦CMS教程

  • 帝国cms教程
  • 织梦CMS教程
  • PHP CMS教程
  • ECSHOP教程
  • WordPress教程
  • Discuz教程
  • CMS学习

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

    2018-04-02 20:50:37 次阅读 稿源:互联网
    广告
    dedecms的list标签orderby属性只支持按一个字段排序,假如想多个字段排序的话,就需要对PHP举办修改,使其可以支持多字段排序,修改如下:
     打开include/arc.listview.class.php,找到:
    1. //假如不消默认的sortrank或id排序,利用连系查询(数据量大时很是迟钝) 
    2.        if(preg_match('/hot|click|lastpost|title/'$orderby)) 
    3.        { 
    4.            $query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname, 
    5.           tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath 
    6.           $addField 
    7.           FROM `js_archives` arc 
    8.           LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
    9.           $addJoin 
    10.           WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row"; 
    11.        } 
    12.        //普通环境先从arctiny表查出ID,然后按ID查询(速度很是快) 
    13.        else 
    14.        { 
    15.            $t1 = ExecTime(); 
    16.            $ids = array(); 
    17.            $query = "SELECT id FROM `js_arctiny` arc WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row "
    18.            $this->dsql->SetQuery($query); 
    19.            $this->dsql->Execute(); 
    20.            while($arr=$this->dsql->GetArray()) 
    21.            { 
    22.                $ids[] = $arr['id']; 
    23.            } 
    24.            $idstr = join(',',$ids); 
    25.            if($idstr==''
    26.            { 
    27.                return ''
    28.            } 
    29.            else 
    30.            { 
    31.                $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname, 
    32.                       tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath 
    33.                       $addField 
    34.                       FROM `js_archives` arc LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
    35.                       $addJoin 
    36.                       WHERE arc.id in($idstr$ordersql "; 
    37.            } 
    38.            $t2 = ExecTime(); 
    39.            //echo $t2-$t1; 
    40.  
    41.        } 
     替换为:
    1. if($orderby=="default"
    2.        { 
    3.            $t1 = ExecTime(); 
    4.            $ids = array(); 
    5.            $query = "SELECT id FROM `js_arctiny` arc WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row "
    6.            $this->dsql->SetQuery($query); 
    7.            $this->dsql->Execute(); 
    8.            while($arr=$this->dsql->GetArray()) 
    9.            { 
    10.                $ids[] = $arr['id']; 
    11.            } 
    12.            $idstr = join(',',$ids); 
    13.            if($idstr==''
    14.            { 
    15.                return ''
    16.            } 
    17.            else 
    18.            { 
    19.                $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname, 
    20.                       tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath 
    21.                       $addField 
    22.                       FROM `js_archives` arc LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
    23.                       $addJoin 
    24.                       WHERE arc.id in($idstr$ordersql "; 
    25.            } 
    26.            $t2 = ExecTime(); 
    27.            //echo $t2-$t1; 
    28.  
    29.        } 
    30.         else 
    31.        { 
    32.            $query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname, 
    33.           tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath 
    34.           $addField 
    35.           FROM `js_archives` arc 
    36.           LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id 
    37.           $addJoin 
    38.           WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row"; 
    39.        } 
    找到:
    1. else { 
    2.             $ordersql=" ORDER BY arc.sortrank $orderWay"
    3.       } 
    替换为:
    1. else if($orderby=="default"){ 
    2.             $ordersql=" ORDER BY arc.sortrank $orderWay"
    3.         } 
    4.         else
    5.            $ordersql=" ORDER BY ".$orderby.",arc.sortrank $orderWay"
    6.         } 
     此刻在模板中就可以应用了多字段排序了,模板应用如下:
    {dede:list pagesize='17' orderby='arc.title desc,arc.id'} 
     

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告