欢迎来到欣怡建站!我们致力于提供优质的网站建站服务
注册

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

作者:欣怡建站 挑错 时间:2020-12-07 08:48
首先声明,只要是我们的vip会员所有源码均可以免费下载,不做任何限制
☉本站的源码不会像其它下载站一样植入大量的广告。为了更好的用户体验以后坚持不打水印
☉本站只提供精品源码,源码在于可用,不在多!!希望在这里找到你合适的。
☉本站提供的整站程序,均带数据及演示地址。可以在任一源码详情页查看演示地址
☉本站所有资源(包括源码、模板、素材、特效等)仅供学习与参考,请勿用于商业用途。
☉如有其他问题,请加网站客服QQ(984818011)进行交流。
相关教程
在线客服