轻松实现DEDE分页列表页自定义字段的查询
作者:admin 日期:2012-09-13
今天做一个企业站,需要实现这么个功能,参考了一下网上的资料。实现了这么个功能!
可以实现多个字段的筛选
所有改动均在arc.listview.class.php这个文件中
1.大概在45行左右,添加如下代码
var $where=array();
2.大概在260行左右
//以下为增加
if($ctag->GetAtt("where")!="")
{
$this->where=explode(",",$ctag->GetAtt("where"));
};
//以上为增加
增加到else分支中
3.大概在783行左右
//以下为增加
$where="";
$c_arr=array();
if(!empty($this->where))
{
foreach($this->where as $v)
{
if($v!='' && isset($_GET[$v]))
{
$c_arr[]="$v='{$_GET[$v]}'";
}
}
if(count($c_arr)>0) //增加判断
$where=" and ". implode(" and ",$c_arr);
}
//以上为增加
//如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢)
4,上面增加过804行左右
原来是
$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";
改为
$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} $where $ordersql LIMIT $limitstart,$row";
原来是
$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 ";
改为
$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) $where $ordersql ";
然后在列表页的标签中增加如下
{dede:list pagesize='10' where='leibie,chandi'}
即在where属性中,增加需要筛选的字段列表,用逗号分割
然后访问如下地址实现筛选
/plus/list.php?tid=4&chandi=东海&leibie=鱼类
下面提供一个 dede5.7系统的arc.listview.class.php的下载
欢迎大家留言交流