织梦系统(dedecms)如何实现字段联动筛选功能
织梦系统(dedecms)默认的列表页没有任意字段联动筛选的功能,但我们在做产品列表页的时候,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便的找到自己所需要的东西,实现这个联动筛选功能需要对织梦进行二次开发,下面就告诉大家如何对织梦进行二次开发实现这个很多人都需要的筛选功能,如下图所示:

第一步:开启模板引擎php标签
这个功能需要在模板里面用到php标签,所以需要在后台模板引擎禁用标签里面解除这个标签的禁用,具体方法:
后台→系统→系统基本参数→其它选项→模板引擎禁用标签,将所禁用的PHP去掉后保存即可。
第二步:修改2个PHP文件,都在include目录下
1、修改arc.listview.class.php文件,这文件改动比较大,建议大家直接下载附件压缩包里面的文件替换,如果你之前对这个文件改动过的话,请在下载下来的压缩包里的这个文件里面搜索有“士人网络”这些注释的这些地方,都是修改过的,然自己手动将有注释的代码插入到自己的文件里面!点击这里下载
2、修改extend.func.php文件,在其最后面添加如下代码:
//dedecms联动筛选功能
functionwwwcms_filter($str,$stype="inject"){
if($stype=="inject"){
$str=str_replace(
array("select","insert","update","delete","alter","cas","union","into","load_file","outfile","create","join","where","like","drop","modify","rename","'","/*","*","../","./"),
array("","","","","","","","","","","","","","","","","","","","","",""),
$str);
}elseif($stype=="xss"){
$farr=array("/s+/",
"/<(/?)(script|META|STYLE|HTML|HEAD|BODY|STYLE|i?frame|b|strong|style|html|img|P|o:p|iframe|u|em|strike|BR|div|a|TABLE|TBODY|object|tr|td|st1:chsdate|FONT|span|MARQUEE|body|title||link|meta|?|%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU",
);
$tarr=array("",
"",
"",
);
$str=preg_replace($farr,$tarr,$str);
$str=str_replace(
array("<",">","'",""",";","/*","*","../","./"),
array("<",">","","","","","","",""),
$str);
}
return$str;
}
/**
*载入自定义表单(用于发布)
*
*@accesspublic
*@paramstring$fieldset字段列表
*@paramstring$loadtype载入类型
*@returnstring
*/
functionAddFilter($channelid,$type=1,$fieldsnamef,$defaulttid,$loadtype='autofield')
{
global$tid,$dsql,$id;
$tid=$defaulttid?$defaulttid:$tid;
if($id!="")
{
$tidsq=$dsql->GetOne("SelecttypeidFrom`dede_archives`whereid='$id'");//本行修改数据表dede_archives前缀
$tid=$tidsq["typeid"];
}
$nofilter=(isset($_REQUEST['TotalResult'])?"&TotalResult=".$_REQUEST['TotalResult']:'').(isset($_REQUEST['PageNo'])?"&PageNo=".$_REQUEST['PageNo']:'');
$filterarr=wwwcms_filter(stripos($_SERVER['REQUEST_URI'],"list.php?tid=")?str_replace($nofilter,'',$_SERVER['REQUEST_URI']):$GLOBALS['cfg_cmsurl']."/plus/list.php?tid=".$tid);
$cInfos=$dsql->GetOne("Select*From`dede_channeltype`whereid='$channelid'");//本行修改数据表dede_channeltype前缀
$fieldset=$cInfos['fieldset'];
$dtp=newDedeTagParse();
$dtp->SetNameSpace('field','<','>');
$dtp->LoadSource($fieldset);
$dede_addonfields='';
if(is_array($dtp->CTags))
{
foreach($dtp->CTagsas$tid=>$ctag)
{
$fieldsname=$fieldsnamef?explode(",",$fieldsnamef):explode(",",$ctag->GetName());
if(($loadtype!='autofield'||($loadtype=='autofield'&&$ctag->GetAtt('autofield')==1))&&in_array($ctag->GetName(),$fieldsname))
{
$href1=explode($ctag->GetName().'=',$filterarr);
$href2=explode('&',$href1[1]);
$fields_value=$href2[0];
$dede_addonfields.='<divclass="scv-shaixuan"><b>'.$ctag->GetAtt('itemname').':</b>';
switch($type){
case1:
$dede_addonfields.=(preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm)?'<atitle="全部"href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'">全部</a>':'<span>全部</span>').' ';
$addonfields_items=explode(",",$ctag->GetAtt('default'));
for($i=0;$i<count($addonfields_items);$i++)
{
$href=stripos($filterarr,$ctag->GetName().'=')?str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr):$filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]);//echo$href;
$dede_addonfields.=($fields_value!=urlencode($addonfields_items[$i])?'<atitle="'.$addonfields_items[$i].'"href="'.$href.'">'.$addonfields_items[$i].'</a>':'<span>'.$addonfields_items[$i].'</span>')." ";
}
$dede_addonfields.='</div>';
break;
case2:
$dede_addonfields.='<selectname="filter"'.$ctag->GetName().'onchange="window.location=this.options[this.selectedIndex].value">
'.'<optionvalue="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'">全部</option>';
$addonfields_items=explode(",",$ctag->GetAtt('default'));
for($i=0;$i<count($addonfields_items);$i++)
{
$href=stripos($filterarr,$ctag->GetName().'=')?str_replace("=".$fields_value,"=".urlencode($addonfields_items[$i]),$filterarr):$filterarr.'&'.$ctag->GetName().'='.urlencode($addonfields_items[$i]);
$dede_addonfields.='<optionvalue="'.$href.'"'.($fields_value==urlencode($addonfields_items[$i])?'selected="selected"':'').'>'.$addonfields_items[$i].'</option>
';
}
$dede_addonfields.='</select><br/>
';
break;
}
}
}
}
echo$dede_addonfields;
}需要注意的,这里有两处地方是查询数据表的,系统默认数据表前缀都是dede,如果你自定义了数据表的前缀,就需要把数据表的前缀改成你的数据表前缀即可!
好,到这里PHP文件修改的部分就完成了!
第三步:添加字段
接下来就需要给指定的模型添加字段了,这里需要注意的就是 字段类型的选择,字段类型需要选择单选按钮或者使用select下拉框,同时还要勾选“使字段可以在列表的底层模板中获得”选项,如下图所示:

第四步:列表页模板添加调用标签
下面就是列表页模板筛选标签的调用了,筛选标签的调用很简单,一句代码就可以搞定,标签代码如下:
{dede:php}AddFilter(4,1,'字段名1,字段名2,字段名3,字段名4');{/dede:php}
标签解释:
AddFilter函数里面的第一个数字4是内容模型的id号,各个内容模型的id请到后台内容模型管理里面查看;
第二个数字1是表示筛选的样式,1是使用超链接进行选择,2是使用select下拉框选择,具体可以自己设置了查看效果;
第三个部分'字段名1,字段名2,字段名3,字段名4'是要添加筛选功能的字段名,就是你添加字段时设置的用英文字母或数字表示的数据表的真实字段名称,这里有4个字段,注意需要用半角逗号隔开。
好了,到这里联动筛选的功能就大功告成了,你可以再编辑一下样式,让其变得好看些就可以了。
相关阅读
-
win10怎么快速关闭屏幕?win10快速关闭屏幕方法
估计很多用 Win10 的人都会想要快速锁屏来保护个人隐私,但是也有人不知道怎么快速关掉屏幕。其实很简单,你可以直接按 Win + L 快捷键,或者右键点击桌面上的空白地方,然后选择快捷方式就可以啦。下面我们就来详细说一下 Win10 快速
-
苹果iOS 17.4 Beta版开放侧载功能,但iPad不在列
1月27日消息,苹果公司近日针对欧盟《数字市场法》作出了响应,上线了iOS 17.4 Beta版,向欧盟用户开放了侧载功能。然而,尽管iPadOS与iOS在本质上并无太大差异,但iPad并不支持侧载功能。这意味着,安装第三方应用商店以及从第
-
极氪20万台新能源汽车里程碑达成
1月8日消息,国内新能源汽车市场再传捷报。极氪汽车今日欣喜公布,经过26个月的不懈努力,其累计交付汽车数量已突破20万台大关。这一成就不仅彰显了极氪在新能源领域的强劲实力,更使其持续刷新着新势力品牌的最快交付纪录,同时保持着全球唯一的新能源
-
Win11系统intel核显控制面板怎么打开-打开intel核显控制面板的方法
你晓得吗?有些小伙伴想开自己电脑的intel核显控制面板来看显卡驱动信息。里面可以检查更新驱动。但是,他们不知道怎么开这个面板。如果也想试试看的话,可以看看下面的操作方法哦!打开intel核显控制面板的方法1. 右键桌面空白处,就能打开英特
-
Windows10玩GTA5闪退怎么解决?Windows10玩GTA5闪退解决方法
Windows10玩GTA5闪退怎么解决?GTA5是一款非常知名的游戏,很多的玩家都在畅玩,但是很多的用户们在玩耍这一款游戏的时候,遇到了自己电脑玩GTA5会闪退,这个问题我们怎么解决呢?下面小编为大家带来详细的解决方法介绍,快来看看吧!
-
天岳先进在Semicon China展会亮相,展示8英寸碳化硅衬底最新技术进展
【本站】7月3日消息,天岳先进在最近举行的Semicon China展会上展示了其最新的技术成果。作为全球规模最大、最具影响力的半导体专业展,Semicon China覆盖了芯片设计、制造、封测、设备、材料、光伏和显示等产业。在这次展会上,

