官方微博: 腾讯  
首页 > ECSHOP教程 > ECSHOP模板教程 > ECSHOP商品列表页修改 > ECSHOP商品分类显示三级商品分类菜单方法

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

ECSHOP教程 / ecshop 教程网(www.ecshop119.com) 2015-06-19

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: 


<!--{foreach from=$categories item=cat}-->
{$cat.name|escape:html} <!--这个就是你点击的分类,下面都是他的子类-->
     <!--{foreach from=$cat.children item=child}-->
      <a href="{$child.url}">
<!--{if $current_cat_id eq $child.id} 显示当前点击的分类为橙色--><span style="color:#ff6600"><!--{/if}-->· {$child.name|escape:html}<!--{if $current_cat_id eq $child.id}--></span><!--{/if}--></a>
      <!--{foreachelse}-->
      · 没有分类了!
      <!--{/foreach}--> 
<!--{/foreach}-->

转载请注明:ECshop119模板屋-ECshop教程网(全国最专业的ECSHOP插件制作商-专业ECSHOP二次开发)

帮助目录

在线反馈

可以将问题或建议反馈给我们。

提交在线反馈

与网友交流ECSHOP开发修改。

加入QQ群交流