各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > dedecms

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

管理员 2015-07-28
dedecms
130

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'}


本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

扫码关注

qrcode

QQ交谈

回顶部