找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1121|回复: 0

[分享] DEDECMS给list标签加上多字段排序功能

[复制链接]
发表于 2018-6-30 09:46:44 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
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.         }
复制代码

此刻在模板中就可以应用了多字段排序了,模板应用如下:
  1. {dede:list pagesize='17' orderby='arc.title desc,arc.id'}
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2025-1-10 10:01 , Processed in 0.050692 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表