注册 | 登录 |
地方论坛门户及新闻和人才网址大全

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

时间:2021-07-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;         }

替换为:

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


上篇:DEDECMS5.7会员空间文章分页总是显示"共 0 页/0...

下篇:DEDECMS列表页分页输入数字跳转到指定分页代码