织梦全网*新联动筛选功能的实现(单选和多选)可显示分类的文章数量_织梦CMS教程


之前写过这篇文章《织梦DEDECMS5.7实现联动筛选(支持多条件多级选项)》下面二次开发织梦联动筛选是之前升级版,修复手机端无法加载_m.htm列表模板BUG:


首先需要说明的是这个功能需要在模板里面用到php标签,所以需要在后台模板引擎禁用标签里面解除这个标签的禁用,具体方法:
登录后台 >> 系统 >> 系统基本参数 >> 其它选项 >> 模板引擎禁用标签:php
将这个php删除后保存就可以了!


联动筛选功能分为两种,单选和多选,好了,下面开始正题。

一、联动功能 单选

首先需要修改2个PHP文件,用编辑器打开include目录下的 arc.listview.class.php 和 extend.func.php

1、修改arc.listview.class.php,这个文件改动的地方较多,建议大家直接下载附件压缩包里面的文件,直接替换。
注意:如果你曾经对arc.listview.class.php这个文件进行过改动的话,请先备份原文件,再对比“参照表”逐一手动替换!
附件下载

arc.listview.class.v2.zip

2、修改extend.func.php文件,这个文件改动很简单,直接在*后面添加如下代码:
特别注意:以下代码中有4处“【分隔符】”字样,请自行删除。

// 字符过滤函数  
function wwwcms_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);
  } else if ($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 |\r\n|link |meta|\?|\%)([^>]*?)>/isU",
        "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
        );
   $tarr = array(" ",
                 "",
        "\\1\\2",
        );
   $str = preg_replace($farr, $tarr, $str);
   $str = str_replace(
          array( "<", ">", "'", "\"", ";", "/*", "*", "../", "./"),
       array("&lt;","&gt;","","","","","","",""),
       $str);
  }
  return $str;
 }
//   
//  载入自定义表单(用于发布)
//  @access    public
//  @param     string  $fieldset  字段列表
//  @param     string  $loadtype  载入类型
//  @return    string
 function AddFilter($channelid, $type=1, $fieldsnamef, $defaulttid, $loadtype='autofield')
 {
  global $tid,$dsql,$id;
  $tid = $defaulttid ? $defaulttid : $tid;
  if ($id!="")
  {
   $tidsq = $dsql->GetOne(" Select typeid From `#【分隔符】@__archives` where id='$id' ");
   $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  `#【分隔符】@__channeltype` where id='$channelid' ");
  $fieldset=$cInfos['fieldset'];
  $dtp = new DedeTagParse();
     $dtp->SetNameSpace('field','<','>');
     $dtp->LoadSource($fieldset);
     $dede_addonfields = '';
     if(is_array($dtp->CTags))
     {
         foreach($dtp->CTags as $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 .= '<div class="scv-shaixuan"><b>'.$ctag->GetAtt('itemname').':</b>';
     switch ($type) {
      case 1:
  $lola = $ctag->GetName();
  $dederow = $dsql->GetOne("SELECT count($lola) FROM #【分隔符】@__addonarticle WHERE $lola");
  $dederowz = $dederow["count($lola)"];
       $dede_addonfields .= (preg_match("/&".$ctag->GetName()."=/is",$filterarr,$regm) ? '<a title="全部" href="'.str_replace("&".$ctag->GetName()."=".$fields_value,"",$filterarr).'">全部('.$dederowz.')</a>' : '<span>全部('.$dederowz.')</span>').'&nbsp;';
       $addonfields_items = explode(",",$ctag->GetAtt('default')); 
       for ($i=0; $i<count($addonfields_items); $i++)
       {
   $lola = $ctag->GetName();
   $lolb = $addonfields_items[$i];
   $dederow = $dsql->GetOne("SELECT count(*) FROM #【分隔符】@__addonarticle WHERE $lola='$lolb'");
   $dederows = $dederow["count(*)"];
        $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]) ? '<a title="'.$addonfields_items[$i].'" href="'.$href.'">'.$addonfields_items[$i].'(<span>'.$dederows.'</span>)</a>' : '<span>'.$addonfields_items[$i].'('.$dederows.')</span>')."&nbsp;";
       }
       $dede_addonfields .= '</div>';
      break;     
      case 2:
       $dede_addonfields .= '<select name="filter"'.$ctag->GetName().' onchange="window.location=this.options[this.selectedIndex].value">
        '.'<option value="'.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 .= '<option value="'.$href.'"'.($fields_value==urlencode($addonfields_items[$i]) ? ' selected="selected"' : '').'>'.$addonfields_items[$i].'</option>
        ';
       }
       $dede_addonfields .= '</select><br/>
       ';
      break;
     }
             }
         }
     }
  echo $dede_addonfields;
}

好,到这里PHP文件修改的部分就完成了!接下来就需要给指定的模型添加字段了,添加步骤:登录后台 >> 核心 >> 内容模型管理 >> (选择频道名称) >> 字段管理 >> 添加新字段

这里需要注意的就是字段类型的选择,字段类型需要选择“使用option下拉框”或者“使用radio选项卡”,如下图所示:

下面就是在列表页模板调用筛选标签了,很简单,一句代码就可以搞定,标签代码如下:

{dede:php}AddFilter(1,1,'color,left,top');{/dede:php}

标签解释:
AddFilter函数里面的*个数字1是内容模型的id号,各个内容模型的id请到后台内容模型管理里面查看;
第二个数字1是表示筛选的样式,1是使用超链接进行选择,2是使用select下拉框选择,具体可以自己设置了查看效果;
第三个部分'color,left,top'是要添加筛选功能的字段名,这里演示有3个字段,注意需要用英文输入法状态下的逗号隔开。

到这里联动筛选单选的功能就弄完了,如果只需要单选功能的朋友可以直接用了,但是如果需要多选功能的朋友请继续往下面看。

二、联动功能 多选

联动多选每个自定义字段值都能选择多个值(但是网址的全部长度不能超过255个字符)

打开之前修改过的arc.listview.class.php文件,分别在大概第117行和第809行,找到如下代码:

$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".wwwcms_filter($key)." = ".wwwcms_filter(iconv("UTF-8", "gb2312", $value))."" : ";

修改为

if($key=="goodstype" || $key=="goodscolor" ){ //你的自定义字段名
$count=0;
$nowsql ='';
$var=explode(",",wwwcms_filter(iconv("UTF-8", "gb2312", $value))); //iconv是转码的意思,如果你url传进来的参数是中文,就需要转码
if(!empty($var)){
foreach($var as $value){ 
  if($count==0){
     $filtersql.="and ($addtable.".wwwcms_filter($key)." like '%".$value."%'";
     $count++;
  }else{
    $filtersql.="or $addtable.".wwwcms_filter($key)." like '%".$value."%'";
}
    }
$filtersql.=")";
}
}else{
$filtersql .= ($key!="tid" && $key!="TotalResult" && $key!="PageNo") ? " AND $addtable.".wwwcms_filter($key)." = ".wwwcms_filter(iconv("UTF-8", "gb2312", $value))."" : ''; //如果传递的值是中文,则需要转码
}

然后在前台调用的时候,比如参数是http://xxx.com/plus/list.php?tid=4&goodstype=类型1,类型2&goodscolor=灰色,红色,蓝色

记住,一定要以英文半角逗号隔开,如果你编码是gbk的,传值的时候如果url显示的是中文,就可以直接使用上面的代码,否则的话在转码那可能要稍微修改下。

到这里联动筛选的多选功能的开发也就全部做完了。


# 织梦CMS教程  # 织梦全网*新联动筛选功能的实现(单选和多选)可显示分类的文章数量  # 半角  # 好了  # 下拉框  # 字段名  # 很简单  # 英文  # 就可以  # 的是  # 单选  # 分隔符  # 如果你  # 多选  # 文章数量  # 联动筛选  # 织梦联动筛选  # 自定义  # 潍坊*seo厂家  # 网站建设的步骤  # 定西市网站建设技术指导  # 冠县外贸网站优化  # 常德图文营销推广招聘信息  # 网站内部外部优化建议  # 许昌短视频搜索关键词排名  # 沧州网站建设方案及报价  # 湖州网站建设技术指导  # 网站推广制度  # 辉县专业网站建设  # 网络推广营销的四大禁忌  # 中山seo网站推广  # 产业链解析网站推广案例  # 房山外贸网站优化推广  # 嘉兴*营销推广招商  # 遂平网站推广制作公司  # 广安全网营销推广收费  # 从化企业网站推广价格  # 开发区seo软件推广  # 请先  # 中有  # 两种  # 都能  # 多个  # 也就  # 一句 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 织梦显示英文日期时间的方法_织梦CMS教程  如何在IIS服务器上快速部署高效网站?  织梦DedeCms如何做淘宝客链接跳转_织梦CMS教程  如何快速上传建站程序避免常见错误?  如何在云指建站中生成FTP站点?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  香港服务器部署网站为何提示未备案?  织梦新手十分钟学会织梦网站建设*教程_织梦CMS教程  织梦建站Apache服务器实现301重定向方法_织梦CMS教程  织梦会员使用支付宝支付成功后接收邮件通知教程_织梦CMS教程  建站助手启动失败:域名解析错误还是端口冲突?  织梦自定义表单用js代替联动地区解决联动地区选择问题_织梦CMS教程  怎么快速去除帝国CMS底部的版本信息?_帝国CMS教程  PHPCMS v9会员登录支持Email登录的实现方法_PHPCMS教程  如何设置并定期更换建站之星安全管理员密码?  织梦去除推荐文章标题加粗标签的方法_织梦CMS教程  dedecms织梦tag+keyword调用相关文章_织梦CMS教程  建站之星设计师:智能建站+自助系统+模板优化核心指南  织梦修改会员中心目录名称的方法_织梦CMS教程  网站*自定义分享代码,可以自定义分享图片标题描述(支持https)_织梦CMS教程  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何构建满足综合性能需求的优质建站方案?  织梦二次开发调用指定模型自定义字段值的文章列表_织梦CMS教程  织梦数据库实现调用*二级栏目及下三级栏目方法_织梦CMS教程  建站助手开启FTP配置教程:服务器管理与站点搭建步骤解析  织梦dedecms搜索页不显示广告解决方法_织梦CMS教程  dedecms织梦jquery+ajax方式提交自定义表单_织梦CMS教程  织梦二次开发常用新建php页面读取标签模板教程_织梦CMS教程  如何续费美橙建站之星域名及服务?  织梦dedecms默认作者和默认来源修改方法_织梦CMS教程  织梦dedecms留言板注入漏洞edit.inc.php修复方法_织梦CMS教程  帝国CMS会员中心每日签到,可领取全勤奖励_帝国CMS教程  帝国cms网站不同地方生成不同的缩略图_帝国CMS教程  如何确保FTP站点访问权限与数据传输安全?  织梦专题页面如何优化海量关键词_SEO优化教程  建站之星收费吗?具体费用包含哪些项目?  织梦会员中心member表face字段类型及长度如何修改?_织梦CMS教程  如何通过VPS建站实现广告与增值服务盈利?  织梦后台更新了广告而前台没有变化的彻底解决办法_织梦CMS教程  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  dedecms织梦*幻灯片插件下载_织梦插件  如何高效搭建专业期货交易平台网站?  建站之星技术支持如何修改模板?  如何用美橙互联一键搭建多站合一网站?  建站之星模板如何自定义颜色与字体样式?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  织梦文章标题调用文章分类名称的方法_织梦CMS教程  建站之星服务器如何实现独立IP配置?  织梦DedeCMS5.7文章页实现阅读全文功能的教程_织梦CMS教程  如何解决VPS建站LNMP环境配置常见问题? 

 2018-04-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.