栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > dedecms

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

dedecms 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/3317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号