欢迎光临
我们一直在努力

ECshop商品分类页筛选属性自定义排序插件及其修改方法[2013年末最新有效版本]

ECSHOP的分类列表页有一个“商品筛选”功能,可以对不同品牌不同价格不同属性的商品进行筛选过滤。但是这个筛选区有一个很蹩脚的地方,那就是品牌项或属性值的排序是杂乱无章的,不能按照站长的意志自定义排序。为了让这个“商品筛选”的排序更人性化,本站开发了这个插件供大家使用。

下面就来具体说一下是用这个插件都能做些什么:

1)、
不仅可以自定义每个属性项中属性值的排序,
还可以自定义品牌列表的顺序,
还有价格范围的自定义排序。
2)、
后台管理超级简单,
只需要在分类编辑页面输入一组属性值即可,
按照你想要的先后顺序输入即可,例如“颜色:白色,黑色,金色,灰色”。
后台按什么顺序输入的,前台就按什么顺序排列,如下图所示:

没有此排序功能之前
no_paixu
有了排序功能之后
yes_paixu

教程开始:

一、后台文件的修改

1、首先在后台模板文件中找到category_info.htm
找到代码:大概位置:121行——122行

<tr>
<td class="label"><a href="javascript:showNotice('noticeGrade');" title="{$lang.form_notice}">

在代码:<tr>的上面添加如下的代码:

<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,如下图:
shuxing_paixu_mysql

alter table `ecs_goods` ADD `shuxing_paixu` varchar(500) NOT NULL,;

3、在后台category.php中分别对加入和修改的地方if (_REQUEST['act'] == 'insert')和if (_REQUEST['act'] == 'edit') 里面加入
1).找到代码:

$cat['cat_recommend'] = !empty($_POST['cat_recommend']) ? $_POST['cat_recommend'] : array();

在此行代码的后面添加代码:

//ECSHOP分类页筛选属性自定义排序插件新增代码
cat['shuxing_paixu'] = trim(_POST['shuxing_paixu']);

2).找到代码:

$cat['cat_recommend'] = !empty($_POST['cat_recommend']) ? $_POST['cat_recommend'] : array();

在此行代码的后面添加代码:

//ECSHOP分类页筛选属性自定义排序插件新增代码
cat['shuxing_paixu'] = trim(_POST['shuxing_paixu']);

就是分别对后台增加插入和修改这两个字段的功能,这个简单就不具体细说

4、如下图往数据库加入如下数据:
155729ch791cocq9do139d

二、前台文件的修改

1、找到前台category.php

1).找到代码:大概位置:309行
smarty->assign('filter_attr_list',all_attr_list);

在这行的代码的上面添加以下的代码。

//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 ask=>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 askey=>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 askey1 => 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 asval4){
		foreach(temp_b askey3 => 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行之间

/**
 * 获得分类的信息
 *
 * @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 ,修改为如下的代码:

/**
 * 获得分类的信息
 *
 * @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'");
}

三、后台怎么填写的顺序,前台就怎么显示!

170442hlrpo5jp2oh8gqgp

1704425y3nuqjp3nj3t6tq

经过以上步骤,基本大工搞成!代码虽然写的很乱,但是基本功能是实现了!

写在结尾的话:

在这里十分感谢来自:自学IT网的:sunlonghb 也就是此教程的原创作者的帮助,我是精简了他之前的代码,他之前发布的代码还有品牌的排序,但是我使用了之后连接的地址有问题呢,所以联系到了原作者,在他的帮助下解决了属性筛选的排序问题呢!很热心的一个朋友!

赞(0)
未经允许不得转载:飘云 » ECshop商品分类页筛选属性自定义排序插件及其修改方法[2013年末最新有效版本]
分享到: 更多 (0)