ECSHOP商品分类显示三级商品分类菜单方法

2016-06-13 13:05 来源:www.chinab4c.com 作者:ecshop专家

ecshop商品分类页面获得当前分类的子分类和三级分类教程:第一步:修改/include/lib_goods.php,在第24行加入以下代码:/*** 获得指定分类下的子分类** @access  public* @param   integer     $cat_id     分类编号* @return  array *www.ecshop119.com */function get_children_tree($cat_id){     if ($cat_id >0 )    {        $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERE parent_id = '$cat_id'";        //$cot = $GLOBALS['db']->getOne($sql);                if ($GLOBALS['db']->getOne($sql))        {            // 获取当前分类名及其子类            $sql = 'SELECT a.cat_id, a.cat_name, a.sort_order AS parent_order, a.cat_id, ' .                    'b.cat_id AS child_id, b.cat_name AS child_name, b.sort_order AS child_order ' .                'FROM ' . $GLOBALS['ecs']->table('category') . ' AS a ' .                'LEFT JOIN ' . $GLOBALS['ecs']->table('category') . ' AS b ON b.parent_id = a.cat_id ' .                "WHERE a.cat_id = '$cat_id' ORDER BY parent_order ASC, a.cat_id ASC, child_order ASC";        }                else        {            $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";            $parent_id = $GLOBALS['db']->getOne($sql);            if ($parent_id > 0)            {                //获取当前分类、兄弟及其父类                $sql = 'SELECT a.cat_id, a.cat_name, b.cat_id AS child_id, b.cat_name AS child_name, b.sort_order ' .                    'FROM ' . $GLOBALS['ecs']->table('category') . ' AS a ' .                    'LEFT JOIN ' . $GLOBALS['ecs']->table('category') . ' AS b ON b.parent_id = a.cat_id ' .                    "WHERE b.parent_id = '$parent_id' ORDER BY sort_order ASC";            }            else            {                //获取当前分类                $sql = 'SELECT a.cat_id, a.cat_name FROM '                        . $GLOBALS['ecs']->table('category') . ' AS a ' .                        "WHERE a.cat_id = '$cat_id'";            }        }                        $res = $GLOBALS['db']->getAll($sql);    $cat_arr = array();    foreach ($res AS $row)    {        $cat_arr[$row['cat_id']]['id']   = $row['cat_id'];        $cat_arr[$row['cat_id']]['name'] = $row['cat_name'];        $cat_arr[$row['cat_id']]['url']  = build_uri('category', array('cid' => $row['cat_id']), $row['cat_name']);        if ($row['child_id'] !NULLbr />         {            $cat_arr[$row['cat_id']]['children'][$row['child_id']]['id']   = $row['child_id'];            $cat_arr[$row['cat_id']]['children'][$row['child_id']]['name'] = $row['child_name'];            $cat_arr[$row['cat_id']]['children'][$row['child_id']]['url']  = build_uri('category', array('cid' => $row['child_id']), $row['child_name']);        }    }    return $cat_arr;    }    }这其实就是一个get_children_tree函数,更具$cat_id来得到当前分类所有的分类第二步,修改/category.php,找到122行,原先的代码是: $smarty->assign('categories',       get_categories_tree($cat_id)); // 分类树这其实是模板技术,如果你想彻底抛弃原来的分类样式,那么把get_categories_tree($cat_id)换成刚才我们自定义的函数get_children_tree($cat_id)如果你想保留原先的分类功能,再新增自定义的分类功能,那么在122行下面再新增一行:$smarty->assign('categories2',       get_children_tree($cat_id));如果想用不同的颜色表示出当前点击的分类和其他分类,那么还要保留当前点击的分类id。再加一行:$smarty->assign('current_cat_id',    $cat_id);    //当前的id最后一步修改category.dwt。你要根据第二部定义的模板变量来写:到底是categories还是categories2,更具你实际情况来定。我这里是categories2: {$cat.name|escape:html}            · {$child.name|escape:html}            · 没有分类了!