织梦园模板网提供云优cms模板,pbootcms模板,Wordpress主题模板等各类企业新闻资讯网站模板下载服务。织梦园网站模板交流群
用户名:
密码:
注册
注册后享受折扣价

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

织梦园模板 / 2019-01-21 / 收藏

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

替换为:

01 if($orderby=="default")
02        {
03            $t1 = ExecTime();
04            $ids = array();
05            $query = "SELECT id FROM `js_arctiny` arc WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row ";
06            $this->dsql->SetQuery($query);
07            $this->dsql->Execute();
08            while($arr=$this->dsql->GetArray())
09            {
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'}

相关织梦技巧

收缩