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

 4636
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. }

替换为:

  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. else
  30. {
  31. $query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname,
  32. tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
  33. $addField
  34. FROM `js_archives` arc
  35. LEFT JOIN `js_arctype` tp ON arc.typeid=tp.id
  36. $addJoin
  37. WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row";
  38. }
找到:

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

本文网址:https://www.zztuku.com/index.php/detail-8028.html
站长图库 - DEDECMS给list标签加上多字段排序功能
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐