关于属性值混乱的问题,看过源码的都知道,ecshop默认是按商品调用属性的时间来提取,所以会造成与写入数据库的属性序列相冲突的问题。先上图,给大家看一下效果:
修改前:
修改后:
下面来说一下修改思路,需要说明的是,目前这种思路,只是用来解决以整数为主体的属性值。
下面是解决的代码,非常简单,就几行而已。
$temp_arrt_url_arr[$key] = 0; //“全部”的信息生成
$temp_arrt_url = implode('.', $temp_arrt_url_arr);
$all_attr_list[$key]['attr_list'][0]['attr_value'] = $_LANG['all_attribute'];
$all_attr_list[$key]['attr_list'][0]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']);
$all_attr_list[$key]['attr_list'][0]['selected'] = empty($filter_attr[$key]) ? 1 : 0;
/* 以下为修改属性开始,请大家在ecshop的category.php中搜索以上的代码确定位置 */
/* 属性为枝数,则重新排序,原来的ecshop排序是错乱的 */
if($all_attr_list[$key]['filter_attr_name']=='枝数')
{
foreach ($attr_list as $k=>$v)
{
$attr_value[$k] = intval($v['attr_value'])>0 ? intval($v['attr_value']): 10000 ;
}
array_multisort($attr_value, $attr_list);
}
/* 属性为价格,则重新排序,原来的ecshop排序是错乱的 */
if($all_attr_list[$key]['filter_attr_name']=='价格')
{
foreach ($attr_list as $k=>$v)
{
$attr_value[$k] = intval($v['attr_value']) ;
}
array_multisort($attr_value, $attr_list);
}
/* 修改属性结束,若有多个属性需要排序,请照上面的方法解决 */
foreach ($attr_list as $k => $v)
{
$temp_key = $k + 1;
$temp_arrt_url_arr[$key] = $v['goods_id']; //为url中代表当前筛选属性的位置变量赋值,并生成以‘.’分隔的筛选属性字符串
$temp_arrt_url = implode('.', $temp_arrt_url_arr);
$all_attr_list[$key]['attr_list'][$temp_key]['attr_value'] = $v['attr_value'];
$all_attr_list[$key]['attr_list'][$temp_key]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']);
if (!empty($filter_attr[$key]) AND $filter_attr[$key] == $v['goods_id'])
{
$all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 1;
}
else
{
$all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 0;
}
}