ECSHOP的分类列表页有一个“商品筛选”功能,可以对不同品牌不同价格不同属性的商品进行筛选过滤。但是这个筛选区有一个很蹩脚的地方,那就是品牌项或属性值的排序是杂乱无章的,不能按照站长的意志自定义排序。为了让这个“商品筛选”的排序更人性化,本站开发了这个插件供大家使用。 下面就来具体说一下是用这个插件都能做些什么: 1)、 不仅可以自定义每个属性项中属性值的排序, 还可以自定义品牌列表的顺序, 还有价格范围的自定义排序。 2)、 后台管理超级简单, 只需要在分类编辑页面输入一组属性值即可, 按照你想要的先后顺序输入即可,例如“颜色:白色,黑色,金色,灰色”。 后台按什么顺序输入的,前台就按什么顺序排列,如下图所示: 没有此排序功能之前 有了排序功能之后
教程开始:
一、后台文件的修改
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,如下图:
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、如下图往数据库加入如下数据:
二、前台文件的修改
1、找到前台category.php1).找到代码:大概位置: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 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行之间
/** * 获得分类的信息 * * @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'"); }