织梦多条件筛选功能实现(dede联动搜索)
发布:smiling 来源: PHP粉丝网 添加日期:2014-11-08 10:20:47 浏览: 评论:0
我们现在已经在栏目列表里面添加了“仿京东”这个栏目了,这个栏目模型就是使用我们在第一篇中讲到的新建的模型。这个栏目的ID为“1”。然后把这个栏目的列表模板设置为我们刚刚添加的那个filter.htm。现在我们可以去更新下“仿京东”这个栏目的文档了。更新成功,浏览下,嗯,可以访问了。但是怎么跟我们刚刚制作的那个filter.htm一模一样啊,那是因为我们还没有在里面添加织梦的模板标签。现在就可以随便添加模板标签了。
我们实际是想直接调用出来我们添加的那些字段。那应该如何操作呢?
这就得看看我们添加的自定义字段在数据库中的位置了,然后把他们给“弄”出来。嗯,这里我弄出来的方式是采用自定义函数弄出来的。函数代码如下,有需要的可以直接拿去了,但是记住是放到织梦的/include/extend.func.php里面啊.
- //获得所有自定义模型中的option类型可以取得的值
- function GetAllOption($option_name,$table="dede_jingdong")
- {
- global $dsql;
- $sql="show columns from ".$table." like '".$option_name."'";
- $dsql->SetQuery($sql);
- $dsql->Execute();
- while($row=$dsql->GetArray())
- { //开源软件:phpfensi.com
- $enum=$row['Type'];
- }
- $enum_arr=explode("','",$enum);
- $enum_arr[0]=str_replace("enum('","",$enum_arr[0]);//去掉分割后第一个元素的enum('
- $enum_arr[count($enum_arr)-1]=str_replace("')","",$enum_arr[count($enum_arr)-1]);//去掉分割后最后一个元素的')
- return $enum_arr;
- }
好了,有这个函数就可以将本来的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>
- {dede:php}
- $arr=GetAllOption("pinpai");
- foreach($arr as $v)
- {
- echo "
- <dd>
- <div><a>$v</a></div>
- </dd>
- ";
- }
- {/dede:php}
- </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>
- {dede:php}
- $arr=GetAllOption("pingtai");
- foreach($arr as $v)
- {
- echo "
- <dd>
- <div><a>$v</a></div>
- </dd>
- ";
- }
- {/dede:php}
- </dl>
- <dl>
- <dt>显卡:</dt>
- <dd>
- <div><a>全部</a></div>
- </dd>
- {dede:php}
- $arr=GetAllOption("xianka");
- foreach($arr as $v)
- {
- echo "
- <dd>
- <div><a>$v</a></div>
- </dd>
- ";
- }
- {/dede:php}
- </dl>
- </div>
- </body>
- </html>
我们已经在前台实现了筛选的功能了,虽然价格、尺寸两个类型没有添加,这是因为我是要把他们固定做好,因为他们在模型中使用的类型是数字类型,并非其他三个(品牌、平台以及显卡)是option类型。
既然前台已经做好了,那我们就开始后台的功能了。
具体的后台我使用的是advancesearch.php这个搜索的功能来实现的。
我们复制一个advancesearch.php的模板出来,默认的advanceserach.php的模板是/templets/default/advancesearch.htm,我们把这个模板,复制到我们的自定义的模板文件夹/templets/jingdong里面,名字就叫做filter_tmp.htm。
然后进入后台,在“内容模型管理”里面选择你所需要搜索的模型,然后点击这个模型后面的放大镜图标,在“附件表可供自定义搜索的字段”中,勾选上你需要搜索的字段,自定义搜索结果模板页,写上我们刚刚复制的模板名称,叫做filter_tmp.htm,确定。
这里可以测试一下,能否正常使用搜索。
不过好像是织梦系统自带的不可以的,我试了好多次都不行,追踪了一下,好像并没有查询附加表,于是在advancesearch.php的218行,原来的代码是:
- $query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*
- FROM $maintable main
- LEFT JOIN cms_arctype type ON type.id = main.typeid
- LEFT JOIN $addontable addon ON addon.aid = main.id
- $where $orderby";
在type.*的后面添加行一个addon.*,也就是变成如下的代码:
- $query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*,addon.*
- FROM $maintable main
- LEFT JOIN cms_arctype type ON type.id = main.typeid
- LEFT JOIN $addontable addon ON addon.aid = main.id
- $where $orderby";
然后还有124行添加 ${$var}=iconv(“utf-8″,”gb2312″,${$var}); 否则会导致中文乱码。
还有一个就是如果使用()英文括号的话,要小心了,因为会被安全sql过滤掉。
下面,是我简单的制作了下filter_tmp.htm,大家可以参考使用。
- {dede:datalist}
- <div style="border: 1px solid #CCC;margin:20px 0;">
- <strong>标题:</strong>{dede:field.title/}<br />
- <strong>品牌:</strong>{dede:field.pinpai/}<br />
- <strong>价格:</strong>{dede:field.jiage/}<br />
- <strong>尺寸:</strong>{dede:field.chicun/}<br />
- <strong>平台:</strong>{dede:field.pingtai/}<br />
- <strong>显卡:</strong>{dede:field.xianka/}<br />
- </div>
- {/dede:datalist}
- {dede:pagelist listsize='5'/}
但是我们最终是要把这个页面“嵌”到filter.htm中,也就是最终的列表页里面。
现在我们打开filter这个模板文件,在最下面加一个div,id设置为result,这个是用来存放最后筛选出来的结果的地方。
然后打开filter.js,下面重点都是在这个js里面写的。
Tags: 织梦条件筛选 dede联动搜索
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)