织梦CMS实现多条件筛选功能
用织梦实现筛选的功能,其实主要就是运用到了织梦的高级搜索功能,然后用ajax去post替换掉本来的结果就可以了。
其实筛选的话,主要有两个问题需要解决,一个是前台的筛选实现,一个是后台根据前台的点击,反馈出相应的结果。
于是在网上搜索了N多的资料了之后,先实现前台的功能,就是你点了之后会有一个筛选的效果出来,当然,也只是一个效果。具体可以参照:jquery仿京东筛选效果。下面就一步一步用织梦来实现这样的功能。
首先我们先在后台自定义模型(自定义模型都不会的同学,可以直接去面壁思过了)
看到参照网站的图片,可以发现商品的话,主要有下面的几个字段:品牌,价格,尺寸,平台,显卡这五个字段。
其中品牌、平台、显卡为option类型,价格为整数类型,尺寸为小数类型,添加模型的时候,记得勾上“使字段可以在列表的底层模板中获得(自定义字段默认仅能在文档模板显示,启用此选项将使列表查询变慢,如无必要请不要选择)”
下面根据我们设置的这些字段,开始直接调用。假如我们的模板目录为/templets/jingdong,那么我们开始在这个文件夹里面新建三个文件,名称分别为filter.htm、filter.js、以及filter.css。
filter.htm代码
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="/templets/jingdong/filter.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script src="/templets/jingdong/filter.js" type="text/javascript"></script>
<title>织梦仿京东筛选</title>
</head>
<body>
<div id="filter">
<dl>
<dt>品牌:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>惠普(hp)</a></div>
</dd>
<dd>
<div><a>联想(Lenovo)</a></div>
</dd>
<dd>
<div><a>联想(ThinkPad)</a></div>
</dd>
<dd>
<div><a>宏基(acer)</a></div>
</dd>
<dd>
<div><a>华硕</a></div>
</dd>
<dd>
<div><a>戴尔</a></div>
</dd>
<dd>
<div><a>三星</a></div>
</dd>
<dd>
<div><a>索尼</a></div>
</dd>
<dd>
<div><a>东芝</a></div>
</dd>
<dd>
<div><a>Gateway</a></div>
</dd>
<dd>
<div><a>微星</a></div>
</dd>
<dd>
<div><a>海尔</a></div>
</dd>
<dd>
<div><a>清华同方</a></div>
</dd>
<dd>
<div><a>富士通</a></div>
</dd>
<dd>
<div><a>苹果(Apple)</a></div>
</dd>
<dd>
<div><a>神舟</a></div>
</dd>
<dd>
<div><a>方正</a></div>
</dd>
<dd>
<div><a>优雅</a></div>
</dd>
</dl>
<dl>
<dt>价格:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>1000-2999</a></div>
</dd>
<dd>
<div><a>3000-3499</a></div>
</dd>
<dd>
<div><a>3500-3999</a></div>
</dd>
<dd>
<div><a>4000-4499</a></div>
</dd>
<dd>
<div><a>4500-4999</a></div>
</dd>
<dd>
<div><a>5000-5999</a></div>
</dd>
<dd>
<div><a>6000-6999</a></div>
</dd>
<dd>
<div><a>7000-9999</a></div>
</dd>
<dd>
<div><a>10000以上</a></div>
</dd>
</dl>
<dl>
<dt>尺寸:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>8.9英寸及以下</a></div>
</dd>
<dd>
<div><a>11英寸</a></div>
</dd>
<dd>
<div><a>12英寸</a></div>
</dd>
<dd>
<div><a>13英寸</a></div>
</dd>
<dd>
<div><a>14英寸</a></div>
</dd>
<dd>
<div><a>15英寸</a></div>
</dd>
<dd>
<div><a>16英寸-17英寸</a></div>
</dd>
</dl>
<dl>
<dt>平台:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>AMD Brazos APU平台</a></div>
</dd>
<dd>
<div><a>Intel Sandy Bridge平台</a></div>
</dd>
<dd>
<div><a>Intel平台</a></div>
</dd>
<dd>
<div><a>AMD平台</a></div>
</dd>
</dl>
<dl>
<dt>显卡:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>独立显卡</a></div>
</dd>
<dd>
<div><a>集成显卡</a></div>
</dd>
<dd>
<div><a>核芯显卡</a></div>
</dd>
</dl>
</div>
</body>
</html>
|
接着昨天晚上的写,昨天晚上说到了新建一个filter.htm,然后把上个文章的代码复制进去,现在把filter.css以及flter.js也分别复制好。
filter.css代码
JS代码
如果步骤按照织梦多条件筛选功能实现(一)和织梦多条件筛选功能实现(二)来操作的话这时候直接打开filter.htm已经可以看到效果了,那么下面要做的就是在织梦里面,用织梦的东西往里面去套。
我们现在已经在栏目列表里面添加了“仿京东”这个栏目了,这个栏目模型就是使用我们在第一篇中讲到的新建的模型。这个栏目的ID为“1”。然后把这个栏目的列表模板设置为我们刚刚添加的那个filter.htm。现在我们可以去更新下“仿京东”这个栏目的文档了。更新成功,浏览下,嗯,可以访问了。但是怎么跟我们刚刚制作的那个filter.htm一模一样啊,那是因为我们还没有在里面添加织梦的模板标签。现在就可以随便添加模板标签了。
我们实际是想直接调用出来我们添加的那些字段。那应该如何操作呢?
这就得看看我们添加的自定义字段在数据库中的位置了,然后把他们给“弄”出来。嗯,这里我弄出来的方式是采用自定义函数弄出来的。函数代码如下,有需要的可以直接拿去了,但是记住是放到织梦的/include/extend.func.php里面啊,放其它位置出问题概不负责…
获得option类型数据的可取值
好了,有这个函数就可以将本来的filter.htm给简化啦!
下面是简化后的代码
织梦多条件筛选功能实现(四)
我们已经在前台实现了筛选的功能了,虽然价格、尺寸两个类型没有添加,这是因为我是要把他们固定做好,因为他们在模型中使用的类型是数字类型,并非其他三个(品牌、平台以及显卡)是option类型。
既然前台已经做好了,那我们就开始后台的功能了。
具体的后台我使用的是advancesearch.php这个搜索的功能来实现的。
我们复制一个advancesearch.php的模板出来,默认的advanceserach.php的模板是/templets/default/advancesearch.htm,我们把这个模板,复制到我们的自定义的模板文件夹/templets/jingdong里面,名字就叫做filter_tmp.htm。
然后进入后台,在“内容模型管理”里面选择你所需要搜索的模型,然后点击这个模型后面的放大镜图标,在“附件表可供自定义搜索的字段”中,勾选上你需要搜索的字段,自定义搜索结果模板页,写上我们刚刚复制的模板名称,叫做filter_tmp.htm,确定。
这里可以测试一下,能否正常使用搜索。
不过好像是织梦系统自带的不可以的,我试了好多次都不行,追踪了一下,好像并没有查询附加表,于是在advancesearch.php的218行,原来的代码是
在type.*的后面添加行一个addon.*,也就是变成如下的代码
然后还有124行添加 ${$var}=iconv(“utf-8″,”gb2312″,${$var}); 否则会导致中文乱码。
还有一个就是如果使用()英文括号的话,要小心了,因为会被安全sql过滤掉。
下面,是我简单的制作了下filter_tmp.htm,大家可以参考使用。
但是我们最终是要把这个页面“嵌”到filter.htm中,也就是最终的列表页里面。
现在我们打开filter这个模板文件,在最下面加一个div,id设置为result,这个是用来存放最后筛选出来的结果的地方。
然后打开filter.js,下面重点都是在这个js里面写的。下面把几个文件打包了一下,有需要的同学可以下载了。
当然了,下载了出问题概不负责。。
看懂的总归可以看懂,看不懂的,说的在清楚也看不懂。。
织梦CMS实现多条件筛选功能的更多相关文章
- 织梦CMS增加复制文档功能
打开后台目录(/dede)下archives_do.php约430行下添加: /*----------------------------- //复制文档 ---------------------- ...
- 织梦cms PHPcms 帝国cms比较
现在建网站不需要请程序员从基础的程序开发做起了,有专业的建站工具,CMS是使用最广泛的建站工具.CMS是Content Management System 现在建网站不需要请程序员从基础的程序开发做起 ...
- 织梦cms、帝国cms、PHPcms优缺点解析
php才是建站的主流,cms这类程序又是用的最多的,占据主流的cms主要就是织梦,帝国,phpcms这三种的,这三个程序都是开源程序.国内用户众多. 一.从美观性来说(以官方默认模版为准 ph ...
- 织梦cms网上复制图片不可用的解决方法
背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...
- 记一次织梦cms渗透测试
记一次织梦cms渗透测试 0x01 前言 本次测试的整个流程:枚举用户名-针对性暴破-登录后台-后台编辑php文件getshell. 0x02 过程 1.登录功能模块存在用户名枚举缺陷,利用此权限先枚 ...
- 求解:php商品条件筛选功能你是怎么做出来的?
求解:php商品条件筛选功能你是怎么做出来的? 2013-09-25 13:43 chenhang607 | 浏览 2756 次 资源共享 求思路或者方法,最好能有些代码 2013-09-25 14: ...
- 织梦CMS(dedecms)栏目属性及系统封面模板、列表模板、文章模板区别和路径设置解答
问题一:(织梦"栏目管理"的"常规选项"中3个栏目属性分析?) 织梦CMS的栏目属性分成三种, -->最终列表栏目 -->频道封面 -->外部 ...
- 让织梦CMS的后台编辑器支持优酷视频
最近做了一些视频教程传到优酷网站上,但我想引入这些视频教程到我的网站,在发表时我发现织梦CMS自带的编辑器又不直接支持优酷等视频网站的引用.所以为了方便教程的发布,特意在网站搜索到本篇教程,详细讲解如 ...
- “织梦”CMS注入高危漏洞情况
"织梦"CMS注入高危漏洞情况 作者: 时间:2014-04-17 "织梦"CMS是由上海卓卓网络科技有限公司研发的一款网站建站系统软件,又称&quo ...
随机推荐
- python 识别图片验证码报IOError
说一下困扰了我一周的问题:识别图片验证码 本来我按照安装步骤(http://www.cnblogs.com/yeayee/p/4955506.html?utm_source=tuicool&u ...
- Session过期、失效时间
Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下! 1.session其实就是一个Map,键=值对,通过session.getAttribute("name& ...
- Android Studio线下版和线上版都使用正式签名脚本(保证keysore签名文件和项目在同级目录),不用再因为繁琐的发正式版而烦恼
场景:调用微信等第三方应用时如果生成的版本不是正式签名的可能会调用失败,使用如下脚本不用再为繁琐的发正式签名版而烦恼 app项目中的build.gradle追加如下代码: //使用正式签名脚本(保证k ...
- Redis与Memcached的区别
传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量 ...
- RPM包的制作
RPM包的制作 前言 按照其软件包的格式来划分,常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列,这两类系统分别提供了自己的软件包管理系统和相应的工具. 类RedHat ...
- python自我输出源程序
1.参考相应c程序 s='s=%s%s%s;print s%s(chr(39),s,chr(39),chr(37))';print s%(chr(39),s,chr(39),chr(37)) http ...
- (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
- 十分钟使用github pages +hexo拥有个人博客
最近想自己搭建自己的个人博客,毕竟这样觉得比较geek,但是搜了资料,感觉良莠不齐,好多东西说的含糊不清,于是自己记录下自己的搭建过程. 1, 安装nodejs 2, 安装git 3, 申请githu ...
- ASP数组全集,多维数组和一维数组[转]
ASP数组是比较好用的装载大量数据的容器.1 定义数组 有两种方式:DIM和REDIM. DIM定义的是固定个数.数据类型的数组:而REDIM则不同,它可以定义不同类型的数据,也可以定义个数并非固定的 ...
- bind原理 附带上自己的一些理解 (引自javascript设计模式和与看法实践)
Function.prototype.bind = function(){ //this指向的是所有由Function构造器产生的函数 var self = this, // 保存原函数 //[] ...