织梦list标签的orderby属性只支持按一个字段排序,如果想多字段排序的话,我对后台的PHP进行了修改,使其可以支持多字段排序,修改如下:
先找到文件arc.listview.class.php 在主目录include文件夹下,找到
//
如果不用默认的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 `#@__archives` arc
LEFT JOIN `#@__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 `#@__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 `#@__archives` arc LEFT JOIN `#@__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 `#@__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 `#@__archives` arc LEFT JOIN `#@__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 `#@__archives` arc
LEFT JOIN `#@__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'}