织梦全网*新联动筛选功能的实现(单选和多选)可显示分类的文章数量_织梦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


相关推荐: 建站之星配置系统详解与新手快速建站指南  如何在橙子建站上传落地页?操作指南详解  PHPCMS调用多个分类栏目的*新文章方法_PHPCMS教程  建站之星登入步骤与常见问题解析?  织梦自定义表单带内容验证的js代码分享_织梦CMS教程  织梦*loop循环标签可以调用任意数据_织梦CMS教程  如何在Windows服务器上快速搭建网站?  建站之星设计师计划:智能建站系统如何实现多端适配模板?  建站之星备案是否影响网站上线时间?  建站之星各版本价格是多少?  织梦ckplayer视频播放器插件V1.8.0无水印版下载_织梦插件  织梦默认搜索框修改为自己多功能搜索框_织梦CMS教程  PHPCMS v9安全设置防止网站被黑_PHPCMS教程  香港服务器租用每月最低只需15元?  织梦当前位置(面包屑)各种写法汇总_织梦CMS教程  dedecms织梦为每个页面生成二维码 _织梦CMS教程  网站内链优化的几个重要方法_SEO优化教程  织梦实现任意页面调用当前会员信息的方法_织梦CMS教程  高防服务器租用如何选择配置与防御等级?  建站主机如何选?性能与价格怎样平衡?  如何挑选高效建站主机与优质域名?  如何快速生成可下载的建站源码工具?  dedecms织梦搜索页有缩略图调用缩略图,无缩图则不显示缩略图_织梦CMS教程  建站之星管理中心如何调整网站配色方案?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  织梦自定义表单用js控制必填选项_织梦CMS教程  怎么快速去除帝国CMS底部的版本信息?_帝国CMS教程  建站助手软件包:智能网站模板生成与SEO优化工具一键整合  织梦dedecms做到这几条安全设置,网站安全达到99%_织梦CMS教程  织梦实现三级多级栏目嵌套调用教程_织梦CMS教程  如何快速生成专业多端适配建站电话?  如何快速查询网址的建站时间与历史轨迹?  如何通过商城自助建站源码实现零基础高效建站?  如何获取上海专业网站定制建站电话?  织梦dedecms的自定义表单带上当前页面的url地址_织梦CMS教程  网站*自定义分享代码,可以自定义分享图片标题描述(支持https)_织梦CMS教程  帝国CMS商城系统使用常见问题_帝国CMS教程  dedecms织梦短信接口插件代码(微米短信平台)_织梦CMS教程  如何正确下载安装西数主机建站助手?  织梦修改下载地址{dede:field name='softlinks'/}只显示链接方法_织梦CMS教程  织梦dedecms5.7SP2手机版上一页下一页链接错误404问题 _织梦CMS教程  如何通过远程VPS快速搭建个人网站?  如何在西部数码注册域名并快速搭建网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站之星代理平台如何选择最佳方案?  织梦让channelartlist标签支持currentstyle高亮属性方法_织梦CMS教程  织梦专题页文章列表默认样式修改_织梦CMS教程  如何通过宝塔面板实现本地网站访问?  dedecms织梦根据特定需要调用文章的标签代码_织梦CMS教程  织梦cms开启二级域名手机站(多站点)内容页图片无法显示_织梦CMS教程 

 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.