当前位置:首页 > 行业动态 > 正文

如何实现DedeCMS二次开发中的联动筛选功能,包括单选和多选?

DedeCMS二次开发联动筛选功能通过编写自定义标签和JavaScript脚本来实现单选和多选的级联过滤。

DedeCMS二次开发联动筛选功能的实现(含单选和多选功能)

DedeCMS默认的列表页没有筛选功能,但有时候我们做产品列表页的时候,产品的字段比较多,很多人都需要用到筛选功能,这样可以让用户更方便地找到自己所需要的东西,实现这一联动筛选功能,需要对DedeCMS进行二次开发,下面将详细介绍如何实现这一功能。

准备工作

在开始之前,需要备份以下两个文件:

1、includearc.listview.class.php

2、includeextend.func.php

修改PHP文件

修改arc.listview.class.php文件

这个文件改动较大,建议直接下载压缩包里的文件替换,如果你之前对这个文件进行过改动,请先备份原文件,再对比“参照表”逐一手动替换。

修改extend.func.php文件

在文件最后添加如下代码:

// dedecms联动筛选功能 By 织梦技术研究中心 技术支持群:217479292 字符过滤函数
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
|link |meta|?)>/isU",
                     "/(<[^>]*)on[azAZ]+s*=([^>]*>)/isU",
                     );
        $tarr = array(" ",
                     "",
                     "\1\2",
                     );
        $str = preg_replace($farr, $tarr, $str);
        $str = str_replace(
            array("<", ">", "'", """, ";", "/*", "*", "../", "./"),
            array("&lt;","&gt;","","","","","","",""),
            $str);
    }
    return $str;
}
/**
 * @param string $fieldset 字段列表
 * @param string $loadtype 载入类型
 */
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[0]);
                $href3 = explode('=', $href2[1]);
                $href3[1] = urlencode($href3[1]);
                if(count($href3)==2) {
                    $href2[1] = implode('=', $href3);
                    $href1[0] = implode('&', $href2);
                    $href = implode('=', $href1);
                } else {
                    $href = $href1[0];
                }
                $dede_addonfields .= '<a href="'.$href.'" target="_blank">'.$ctag>GetAtt('name').'</a> ';
            }
        }
    }
    return $dede_addonfields;
}}

解除模板引擎禁用标签

由于该功能需要在模板里面使用PHP标签,因此需要在后台模板引擎禁用标签中解除PHP标签的禁用:

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

将这里的“php”删除后保存即可。

注意事项与FAQs

注意事项

1、备份文件:在进行任何修改之前,务必备份相关文件,以防出现意外情况。

2、兼容性检查:确保你的DedeCMS版本支持这些修改,如果不确定,可以查阅官方文档或社区论坛。

3、安全性:在处理用户输入时,注意防范SQL注入等安全风险,上述代码中的wwwcms_filter函数已经包含了一些基本的防范措施。

4、测试环境:在生产环境中部署之前,建议在测试环境中充分测试新功能。

5、更新与维护:随着DedeCMS版本的更新,可能需要调整代码以保持兼容性,定期检查并维护代码是必要的。

6、性能考量:虽然联动筛选功能提高了用户体验,但也要注意它可能对数据库查询性能产生的影响,特别是在处理大量数据时,应优化查询语句和索引以提高性能。

7、文档记录:记录下你对系统的修改,包括修改的原因、步骤、遇到的问题及解决方案等,这有助于未来的维护工作。

8、错误处理:在代码中添加适当的错误处理机制,以便在出现问题时能够及时定位并解决,使用trycatch块来捕获潜在的异常。

9、权限管理:确保只有具有适当权限的用户才能访问和使用联动筛选功能,以防止未授权的操作。

10、国际化支持:如果你的网站面向多语言用户,考虑为联动筛选功能添加多语言支持,这可以通过语言文件来实现。

11、响应式设计:确保联动筛选功能在不同设备上都能正常工作,包括桌面电脑、平板和手机等,可以使用响应式设计技术来实现这一点。

12、用户体验优化:除了实现基本的筛选功能外,还可以考虑添加一些额外的用户体验优化措施,如自动补全、搜索建议等。

13、监控与分析:通过日志记录或分析工具来监控联动筛选功能的使用情况,以便了解用户的使用习惯并根据反馈进行改进。

14、版本控制:使用版本控制系统(如Git)来管理你的代码更改,这样可以轻松回滚到之前的版本,并在多人协作时保持代码的一致性。

15、持续学习:DedeCMS是一个不断发展的平台,新的版本可能会引入新的特性和API,保持对最新动态的关注,并不断学习新技术,可以帮助你更好地利用平台的能力。

16、社区参与:加入DedeCMS的开发者社区,与其他开发者交流经验,分享你的成果,同时也能从社区中获得帮助和支持。

17、备份与恢复:在进行重大更改之前,除了备份文件外,还应该考虑备份整个网站的数据和结构,以便在发生灾难性事件时能够快速恢复。

18、性能基准测试:在实施联动筛选功能前后,进行性能基准测试,比较加载时间、资源消耗等指标的变化,确保新功能不会对网站性能造成负面影响。

19、缓存策略:合理利用缓存可以提高网站的响应速度和用户体验,考虑为联动筛选的结果设置缓存规则,减少数据库查询次数。

20、安全性审计:定期进行安全性审计,检查是否存在潜在的安全破绽,特别是针对用户输入的处理和数据库交互部分。

21、模块化设计:将联动筛选功能设计成模块化的形式,便于在未来的版本更新中轻松替换或升级。

22、错误报告机制:为用户提供一个简单的方式来报告问题或提出建议,这对于收集用户反馈和持续改进功能非常重要。

23、适应性布局:根据筛选条件的数量和复杂性,动态调整布局和样式,确保界面整洁且易于操作。

24、辅助功能:考虑添加一些辅助功能,如清除筛选条件、重置筛选结果等,提高用户体验。

25、无障碍访问:确保联动筛选功能符合无障碍访问标准,让所有用户都能平等地使用网站。

26、本地化支持:如果你的网站面向特定地区,考虑添加本地化支持,如货币单位转换、日期格式等。

27、性能优化技巧:熟悉并应用一些性能优化的技巧,比如懒加载、按需加载等,减少不必要的资源消耗。

28、安全性加固:除了基本的防范措施外,还可以考虑使用更高级的安全技术,如HTTPS、内容安全策略(CSP)等,增强网站的安全性。

229、持续集成/持续部署(CI/CD):如果条件允许,可以设置CI/CD流程自动化测试和部署过程,提高开发效率和质量。

30、云服务集成:考虑将网站托管在云服务平台上,利用其弹性伸缩、负载均衡等特性来应对可能的高并发访问需求。

31、第三方库和框架:评估是否有合适的第三方库或框架可以帮助实现联动筛选功能,这可能会简化开发过程并提高代码质量。

32、前端框架集成:如果网站使用了前端框架(如React、Vue等),考虑如何将这些框架与联动筛选功能无缝集成,提供更加流畅的用户体验。

33、后端服务化:考虑将筛选逻辑作为一项服务提供给前端调用,这样做的好处是前后端分离,便于维护和扩展,这也有助于减轻服务器负担,提高响应速度。

34、微服务架构:对于大型项目,可以考虑采用微服务架构来构建联动筛选功能,每个筛选条件对应一个微服务,这样可以更容易地进行横向扩展和维护。

35、容器化部署:使用Docker等容器化技术来部署网站和应用,这样可以在不同的环境中保持一致性,并且便于迁移和扩展。

36、Kubernetes集群管理:对于需要高可用性和可伸缩性的项目,可以考虑使用Kubernetes等集群管理工具来管理多个容器实例,确保服务的稳定运行。

37、Service Mesh:通过Service Mesh来实现服务之间的智能路由和流量控制,提高系统的灵活性和可靠性。

38、Prometheus监控:集成Prometheus等监控系统来跟踪应用的性能指标和健康状况,及时发现并解决问题。

39、Grafana数据可视化:使用Grafana等工具来可视化监控数据,帮助团队更好地理解系统的运行状况并进行决策。

40、日志聚合:使用ELK Stack(Elasticsearch, Logstash, Kibana)或其他日志聚合工具来集中管理和分析日志数据,便于故障排查和性能优化。

41、AB测试:通过AB测试来评估不同实现方案的效果,找出最优解,并据此进行调整和优化。

42、用户行为分析:集成Google Analytics或其他分析工具来追踪用户的行为模式,了解他们如何使用联动筛选功能,从而做出相应的改进。

43、热图分析:使用热图工具来分析用户在页面上的点击行为,识别出最受欢迎的筛选选项和区域,进一步优化UI/UX设计。

44、会话录制:通过会话录制工具来观察用户实际操作的过程,发现潜在的问题点和改进空间。

45、表单分析:分析表单提交的数据,了解哪些筛选条件最常被使用,以及是否存在无效或错误的输入,据此优化筛选逻辑和提示信息。

46、用户访谈:直接与用户进行访谈,收集他们的意见和建议,这是获取定性反馈的有效方式。

47、问卷调查:设计问卷调查来收集大量用户的反馈信息,适用于快速了解广泛用户群体的需求和偏好。

48、数据分析报告:定期生成数据分析报告,归纳联动筛选功能的使用情况、用户满意度等关键指标,为管理层提供决策支持。

49、KPI设定:根据业务目标设定关键绩效指标(KPIs),比如筛选功能的转化率、用户留存率等,用于衡量功能的成功与否。

50、ROI计算:计算投资回报率(ROI),评估开发和维护联动筛选功能的成本与其带来的收益之间的关系,确保项目的可持续性。

0