Copyright @ 2015-2024 织梦园 版权所有 Power by DedeCms
鲁ICP备15039853号-2

模板标签 TAG标签 网站地图 XML地图 今日更新 返回顶部
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'}