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 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'");
}

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

170442hlrpo5jp2oh8gqgp

1704425y3nuqjp3nj3t6tq

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

写在结尾的话:

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

仅有一条评论
  1. cloudy
    cloudy :

    太需要这个程序了