轻松实现DEDE分页列表页自定义字段的查询

 今天做一个企业站,需要实现这么个功能,参考了一下网上的资料。实现了这么个功能!

可以实现多个字段的筛选

所有改动均在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的下载

 

百度网盘下载

欢迎大家留言交流



文章来自: 本站原创
Tags:
评论: 3 | 查看次数: 7029