网络建站知识发布于分享网站

当前位置:首页>>新闻中心>>CMS教程>>dedecms教程

Dedecms实现全网最新联动筛选功能(支持单选与多选,并显示分类文章数量)

时间:2025-03-31 14:39:24    来源:    人气:0

如今,DedecmsCMS作为一款强大的内容管理系统,其功能的扩展性和灵活性备受开发者青睐。今天我们将深入探讨如何在DedecmsCMS中实现联动筛选功能(支持单选和多选),并修复手机端无法加载_m.htm列表模板的问题。


首先需要明确的是,这个功能需要在模板中使用PHP标签,因此需要解除后台模板引擎对PHP标签的禁用。具体操作步骤如下:


登录后台 >> 系统 >> 系统基本参数 >> 其它选项 >> 模板引擎禁用标签:php


将“php”从禁用标签中删除后保存即可。如下图所示:


dedecmsCMS全网最新联动筛选功能的实现(单选和多选)可显示分类的文章数量

接下来,我们分为两个部分来实现联动筛选功能:单选和多选。


一、联动功能 单选


要实现单选功能,首先需要修改两个PHP文件:include目录下的arc.listview.class.phpextend.func.php


1. 修改arc.listview.class.php文件。由于该文件改动较多,建议直接下载附件压缩包中的文件进行替换。如果之前对该文件有过修改,请先备份原文件,并根据“参照表”逐一手动替换。


2. 修改extend.func.php文件。在文件末尾添加以下代码:


// 字符过滤函数  
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;
 }

// 载入自定义表单(用于发布)
function AddFilter($channelid, $type=1, $fieldsnamef, $defaulttid, $loadtype='autofield')
{
 // ... (完整代码见上文)
}

完成PHP文件的修改后,需要给指定模型添加字段。操作步骤如下:登录后台 >> 核心 >> 内容模型管理 >> (选择频道名称) >> 字段管理 >> 添加新字段。


注意:字段类型应选择“使用option下拉框”或“使用radio选项卡”,如下图所示:


dedecmsCMS全网最新联动筛选功能的实现(单选和多选)可显示分类的文章数量

最后,在列表页模板中调用筛选标签。代码如下:


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


解释:第一个数字1表示内容模型的ID号;第二个数字1表示筛选样式(1为超链接选择,2为下拉框选择);第三个部分“color,left,top”为字段名,需用英文逗号隔开。


二、联动功能 多选


多选功能允许每个自定义字段值选择多个值(但网址长度不能超过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)));
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))."" : '';
}

至此,DedecmsCMS的联动筛选功能(单选和多选)已全部实现。

相关文章

  • Dedecms 删除文档时同时清除文章中图片的方法

    Dedecms 删除文档时同时清除文章中图片的方法

    在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。首先, 在 `/include` 目录下创建一个名为 `extend.func.php` 的文件...
    2025-03-31
  • Dedecms上传图片提示302错误ERROR的解决方法

    Dedecms上传图片提示302错误ERROR的解决方法

    在进行图片上传操作时,用户可能会遇到302错误以及带有ERROR提示的图片上传失败问题。这些问题可能由多种原因引发,因此本文将对这些情况进行整理,以帮助大家更有效地定位并解决问题。 第一种情况:图片文件本身损坏。 这种情况会导致系统返回ERROR错误提示,不过发生概率较低。如果怀疑是图片损坏导致的...
    2025-03-31
  • DEDECMS模板使用教程

    DEDECMS模板使用教程

    如果您正在寻找一种高效的方法来使用Dedecms模板搭建网站或论坛,那么本文将为您提供详尽的指导。从模板解压到最终完成配置,每一步都将清晰呈现,帮助您快速掌握整个流程。 第一步:解压Dedecms模板 将下载的Dedecms模板文件解压出来,确保所有文件完整无误。如下图所示: 第二步:获取D...
    2025-03-31
  • Dedecms Dede 附加表自定义字段与主表文章关联方法

    Dedecms Dede 附加表自定义字段与主表文章关联方法

    在使用DedeCMS开发装修网站时,设计师和设计作品之间的关联是一个重要的功能需求。通常情况下,文章(作品)的内容部分存储在主表dede_addonarticle中,而自定义字段则存储在附加表dede_archives中。为了实现这一功能,可以采用以下两种方法。 ① 根据发布人调用相关文章; ...
    2025-03-31

公众号