一、让list标签支持多字段排序
织梦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 `dede_archives` arc
LEFT JOIN `dede_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 `dede_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 `dede_archives` arc LEFT JOIN `dede_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 `dede_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 `dede_archives` arc LEFT JOIN `dede_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 `dede_archives` arc
LEFT JOIN `dede_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'}
请立即点击咨询我们或拨打咨询热线: 18031152740,我们会详细为你一一解答你心中的疑难。业务经理在线