A-A+

ecshop商品属性按照ID进行排列

2015年09月08日 PHP开源系统 暂无评论 阅读 14 views 次

客户在添加商品属性时,发现其属性不是按照最新添加的来排序,也就是最新 ID 来排序的,实际是在 ecshop 默认的排序列表中没有指定(属性ID)来排序所导致的问题了,下面夏日博客就给解决一下这个问题,这里参照的是 ecshop 的默认模板了。

首先打开 /includes/lib_goods.php,修改如下的代码,注意红色添加的 order by 代码部分.

  1. /* 获得商品的规格 */  
  2.    $sql = "SELECT a.attr_id, a.attr_name, a.attr_group, a.is_linked, a.attr_type, ".  
  3.                "g.goods_attr_id, g.attr_value, g.attr_price " .  
  4.            'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .  
  5.            'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .  
  6.            "WHERE g.goods_id = '$goods_id' " .  
  7.            'ORDER BY g.goods_attr_id, a.sort_order, g.attr_price'; //红色排序部分  
  8.    $res = $GLOBALS['db']->getAll($sql);  

另外还有一种情况就是我们在复制商品属性的时候,商品属性会跟原商品相反。

修改/inclues/lib_goods.php

  1. /** 
  2. * 取得商品属性 
  3. * @param   int     $goods_id   商品id 
  4. * @return  array 
  5. */  
  6. function get_goods_attr($goods_id)  
  7. {  
  8.     $attr_list = array();  
  9.     $sql = "SELECT a.attr_id, a.attr_name " .  
  10.             "FROM " . $GLOBALS['ecs']->table('goods') . " AS g, " . $GLOBALS['ecs']->table('attribute') . " AS a " .  
  11.             "WHERE g.goods_id = '$goods_id' " .  
  12.             "AND g.goods_type = a.cat_id " .  
  13.             "AND a.attr_type = 1".' ORDER BY a.attr_id';  
  14.     $attr_id_list = $GLOBALS['db']->getCol($sql);  
  15.     $res = $GLOBALS['db']->query($sql);  
  16.     while ($attr = $GLOBALS['db']->fetchRow($res))  
  17.     {  
  18.         if (defined('ECS_ADMIN'))  
  19.         {  
  20.             $attr['goods_attr_list'] = array(0 => $GLOBALS['_LANG']['select_please']);  
  21.         }  
  22.         else  
  23.         {  
  24.             $attr['goods_attr_list'] = array();  
  25.         }  
  26.         $attr_list[$attr['attr_id']] = $attr;  
  27.     }  
  28.     $sql = "SELECT attr_id, goods_attr_id, attr_value " .  
  29.             "FROM " . $GLOBALS['ecs']->table('goods_attr') .  
  30.             " WHERE goods_id = '$goods_id' " .  
  31.             "AND attr_id " . db_create_in($attr_id_list).' ORDER BY goods_attr_id';  
  32.     $res = $GLOBALS['db']->query($sql);  
  33.     while ($goods_attr = $GLOBALS['db']->fetchRow($res))  
  34.     {  
  35.         $attr_list[$goods_attr['attr_id']]['goods_attr_list'][$goods_attr['goods_attr_id']] = $goods_attr['attr_value'];  
  36.     }  
  37.     return $attr_list;  
  38. }  

同样注意 .' ORDER BY goods_attr_id' 这一句,是把排序进行了固定。

标签:

给我留言