ECSHOP的分类列表页有一个“商品筛选”功能,可以对不同品牌不同价格不同属性的商品进行筛选过滤。但是这个筛选区有一个很蹩脚的地方,那就是品牌项或属性值的排序是杂乱无章的,不能按照站长的意志自定义排序。为了让这个“商品筛选”的排序更人性化,本站开发了这个插件供大家使用。
下面就来具体说一下是用这个插件都能做些什么:
1)、
不仅可以自定义每个属性项中属性值的排序,
还可以自定义品牌列表的顺序,
还有价格范围的自定义排序。
2)、
后台管理超级简单,
只需要在分类编辑页面输入一组属性值即可,
按照你想要的先后顺序输入即可,例如“颜色:白色,黑色,金色,灰色”。
后台按什么顺序输入的,前台就按什么顺序排列,如下图所示:
教程开始:
一、后台文件的修改
1、首先在后台模板文件中找到category_info.htm
找到代码:大概位置:121行——122行
1
2
|
<tr>
<td class=“label”><a href=“javascript:showNotice(‘noticeGrade’);” title=“{$lang.form_notice}”>
|
在代码:<tr>的上面添加如下的代码:
1
2
3
4
5
6
|
<tr>
<td class=“label”>属性排序:</td>
<td>
<textarea name=‘shuxing_paixu’ rows=“6” cols=“70”>{$cat_info.shuxing_paixu}</textarea>
</td>
</tr>
|
2、在数据库ecs_category表中加入字段:shuxing_paixu,如下图:
1
|
alter table `ecs_goods` ADD `shuxing_paixu` varchar(500) NOT NULL,;
|
3、在后台category.php中分别对加入和修改的地方if ($_REQUEST[‘act’] == ‘insert’)和if ($_REQUEST[‘act’] == ‘edit’) 里面加入
1).找到代码:
1
|
$cat[‘cat_recommend’] = !empty($_POST[‘cat_recommend’]) ? $_POST[‘cat_recommend’] : array();
|
在此行代码的后面添加代码:
1
2
|
//ECSHOP分类页筛选属性自定义排序插件新增代码
$cat[‘shuxing_paixu’] = trim($_POST[‘shuxing_paixu’]);
|
2).找到代码:
1
|
$cat[‘cat_recommend’] = !empty($_POST[‘cat_recommend’]) ? $_POST[‘cat_recommend’] : array();
|
在此行代码的后面添加代码:
1
2
|
//ECSHOP分类页筛选属性自定义排序插件新增代码
$cat[‘shuxing_paixu’] = trim($_POST[‘shuxing_paixu’]);
|
就是分别对后台增加插入和修改这两个字段的功能,这个简单就不具体细说
二、前台文件的修改
1、找到前台category.php
1).找到代码:大概位置:309行
$smarty->assign(‘filter_attr_list’, $all_attr_list);
在这行的代码的上面添加以下的代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
//ECSHOP分类页筛选属性自定义排序插件新增代码 By:飘云 2013年11月24日17:05:17 代码开始
//print_r($all_attr_list);
$shuxing_paixu = trim($cat[‘shuxing_paixu’]);
//echo “$shuxing_paixu”;
$shuxing_paixuArr = array();
$temparr = preg_split (“/\r\n/”,$shuxing_paixu);
//print_r($temparr);
foreach($temparr as $k=>$v){
$temparrList = explode(“:”,$v);
$arr_a[$k][‘filter_attr_name’] = trim($temparrList[0]);
$arr_a[$k][‘attr_list’] = explode(“,”, trim($temparrList[1]));
}
//print_r($arr_a);
//print_r($arr_a);
//print_r($all_attr_list);
foreach($all_attr_list as $key=>$val){
foreach($arr_a as $k=>$v){
if(trim($val[‘filter_attr_name’]) == trim($v[‘filter_attr_name’])){
$temp_b = $all_attr_list[$k][‘attr_list’];//无序数组
$temp_c = $v[‘attr_list’];//自定义排序数组
//取消自定义排序数组的左右空白 一便于比较
foreach($temp_c as $key2 => $val2){
$temp_c[$key2] = trim($val2);
}
//去掉自定义排序数组中不需要的字段
$temp_d = array();
foreach($temp_b as $key1 => $val1){
$temp_d[$key1] = $val1[‘attr_value’];
}
//print_r($temp_b);
//print_r(array_intersect($temp_c,$temp_d));
$temp_e = array_intersect($temp_c,$temp_d);//自定义排序数组交集 去掉了不需要的字段
$newattrlist = array();
$i = 1;
foreach($temp_e as $val4){
foreach($temp_b as $key3 => $val3){
$newattrlist[0] = $temp_b[0];
if($val4 == trim($val3[‘attr_value’])){
$newattrlist[$i] = $temp_b[$key3];
$i++;
}
}
}
unset($all_attr_list[$key][‘attr_list’]);
$all_attr_list[$key][‘attr_list’] = $newattrlist;
//print_r($all_attr_list);
}
}
}
//ECSHOP分类页筛选属性自定义排序插件新增代码
|
2).找到代码:大概位置:502行——513行之间
1
2
3
4
5
6
7
8
9
10
11
12
|
/**
* 获得分类的信息
*
* @param integer $cat_id
*
* @return void
*/
function get_cat_info($cat_id)
{
return $GLOBALS[‘db’]->getRow(‘SELECT cat_name, keywords, cat_desc, style, grade, filter_attr, parent_id FROM ‘ . $GLOBALS[‘ecs’]->table(‘category’) .
” WHERE cat_id = ‘$cat_id'”);
}
|
在代码parent_id后面添加:,shuxing_paixu ,修改为如下的代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
/**
* 获得分类的信息
*
* @param integer $cat_id
*
* @return void
*/
function get_cat_info($cat_id)
{
return $GLOBALS[‘db’]->getRow(‘SELECT cat_name, keywords, cat_desc, style, grade, filter_attr, parent_id,shuxing_paixu FROM ‘ . $GLOBALS[‘ecs’]->table(‘category’) .
” WHERE cat_id = ‘$cat_id'”);
}
|
三、后台怎么填写的顺序,前台就怎么显示!
经过以上步骤,基本大工搞成!代码虽然写的很乱,但是基本功能是实现了!
写在结尾的话:
在这里十分感谢来自:自学IT网的:sunlonghb 也就是此教程的原创作者的帮助,我是精简了他之前的代码,他之前发布的代码还有品牌的排序,但是我使用了之后连接的地址有问题呢,所以联系到了原作者,在他的帮助下解决了属性筛选的排序问题呢!很热心的一个朋友!