织梦默认的列表页是没有筛选功能的,但有时候我们做产品列表页的时候,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便的找到自己所需要的东西,实现这个联动筛选功能需要对织梦进行二次开发,下面就告诉大家如何对织梦二次开发实现这个很多人都需要的筛选功能,如下图所示:
首先需要说明的是这个功能需要在模板里面用到php标签,所以需要在后台模板引擎禁用标签里面解除这个标签的禁用,具体方法:
后台——系统——系统基本参数——其它选项——模板引擎禁用标签:php
将这个PHP去掉后保存就可以了!注意:如未去掉这个php,那么前台调用的时候会不显示任何内容。
好了,下面开始正题了。
首先需要修改2个PHP文件,都是include目录下面的。
一、修改arc.listview.class.php文件:
在文件中找到
if(empty($cfg_need_typeid2)) $cfg_need_typeid2 = 'N';
在下方添加:
//获得附加表的相关信息!!此段为添加内容!!!
$addtable = $this->ChannelUnit->ChannelInfos['addtable'];
if($addtable!="")
{
$addJoin = " LEFT JOIN `$addtable` ON arc.id = ".$addtable.'.aid ';
$addField = '';
$fields = explode(',',$this->ChannelUnit->ChannelInfos['listfields']);
foreach($fields as $k=>$v)
{
$nfields[$v] = $k;
}
if(is_array($this->ChannelUnit->ChannelFields) && !empty($this->ChannelUnit->ChannelFields))
{
foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
{
if(isset($nfields[$k]))
{
if(!empty($arr['rename'])) {
$addField .= ','.$addtable.'.'.$k.' as '.$arr['rename'];
}
else {
$addField .= ','.$addtable.'.'.$k;
}
}
}
}
if (isset($_REQUEST['tid']))
{
foreach($_GET as $key => $value) {
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".wwwcms_filter($key)." = '".wwwcms_filter(urldecode($value))."'" : '';
}
}
}
else
{
$addField = '';
$addJoin = '';
}
//添加内容结束!!
找到
$cquery = "SELECT COUNT(*) AS dd FROM `dede_arctiny` arc WHERE ".$this->addSql;
替换成:
$cquery = "SELECT COUNT(*) AS dd FROM `dede_arctiny` arc $addJoin WHERE ".$this->addSql.$filtersql;//有修改!by
找到
}
else
{
$addField = '';
$addJoin = '';
}
在上方添加
//此段为添加内容by
if (isset($_REQUEST['tid']))
{
foreach($_GET as $key => $value) {
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".wwwcms_filter($key)." = '".wwwcms_filter(urldecode($value))."'" : '';
}
}
//添加内容结束
找到
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaul