永发信息网

ecshop怎么让分类页显示当前顶级分类的所有子分类?

答案:2  悬赏:10  手机版
解决时间 2021-03-15 06:15
ecshop怎么让分类页显示当前顶级分类的所有子分类?
最佳答案

{$cat.name|escape:html}


{$child.name|escape:html}


{$childer.name|escape:html}





全部回答

 ecshop的商品分类页面category.php 下的分类,默认是取得所有同级父分类以及父类别的子分类。比如,我点击进入是A商品分类的页面 category.php?id=1,事实上 我只需要取得父ID为1的子分类即可,但是ecshop也把B商品分类、C商品分类.....下的所有子分类也输出来了。这是没必要的。在ecshop下的category.php 334行  $smarty->assign('categories',       get_categories_tree($cat_id)); //    本身也是要起到这个作用,但是虽然有参数$cat_id,但是当$cat_id为顶级分类时候,该参数是无效的。为什么呢?我们来看一下 get_categories_tree( )这个函数(该函数在目录includes/lib_goods.php下)。如下:
function get_categories_tree($cat_id = 0)
{
    if ($cat_id > 0)
    {
        $sql = 'SELECt parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERe cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
    }
    else
    {
        $parent_id = 0;
    }
    
    $sql = 'SELECt count(*) FROM ' . $GLOBALS['ecs']->table('category') . " WHERe parent_id = '$parent_id' AND is_show = 1 ";
    if ($GLOBALS['db']->getOne($sql) || $parent_id == 0)
    {
        
        $sql = 'SELECt cat_id,cat_name ,parent_id,is_show ' .
                'FROM ' . $GLOBALS['ecs']->table('category') .
                "WHERe parent_id = '$parent_id' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC";
        $res = $GLOBALS['db']->getAll($sql);
        foreach ($res AS $row)
        {
            if ($row['is_show'])
            {
                $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 (isset($row['cat_id']) !=NULL
                {
                    $cat_arr[$row['cat_id']]['cat_id'] = get_child_tree($row['cat_id']);
                }
            }
        }
    }
    if(isset($cat_arr))
    {
        return $cat_arr;
    }
}
问题就在这一句   if ($cat_id > 0)
    {
        $sql = 'SELECt parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERe cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
    }
    else
    {
        $parent_id = 0;
    }
这一句是判断参数$cat_id是否有父类,若是有父类,就取出其父类的ID,否则视为参数为父类别ID为0,也即为顶级分类。事实上,当参数$cat_id大于0,并且为顶级分类的时候,这句话是无效的,我们假设$cat_id=1,且ID1为顶级ID,也即其parent_id 为0,这种情况下
     $sql = 'SELECt parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERe cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
运行得出的值还是0,也即$parent_id =0.虽然有参数,但还是取出所有顶级ID下的所有分类。实际上只需要这样修改即可,把
  if ($cat_id > 0)
    {
        $sql = 'SELECt parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERe cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
    }
    else
    {
        $parent_id = 0;
    }
修改为   if ($cat_id > 0)
    {
        $sql = 'SELECt parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERe cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
       if($parent_id==0)$parent_id=$cat_id;//添加上这句是关键。
    }
    else
    {
        $parent_id = 0;
    }
这时候 参数$cat_id是有效的! 
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
沪股交易手续费
河南石油勘探局中国石化集团社区服务中心在什
龙树菩萨为什么要创立大成佛教
求口袋妖怪2016电影
屈臣氏淮海路店地址在哪,我要去那里办事
皮衣在家怎么保养
披肩按摩器和头枕按摩器哪个更好
商丘到北京的火车
八一市场东门我想知道这个在什么地方
曲肱而枕之中枕的古义和今义
求告知升级到90送多少票
老盆寨地址在什么地方,想过去办事
格力空调 怎么调自动开机
九岁的男孩子现在玩什么玩具?女孩子呢
爱琴海岸这个地址在什么地方,我要处理点事
推荐资讯
吸客怎么去啊,有知道地址的么
佳林大酒店地址有知道的么?有点事想过去
脚板太大,怎么办
考试成绩的平均分怎么用百分数来计算?
布莱米尔和阿尔米隆哪个好
文星刻章复印这个地址在什么地方,我要处理点
桂林园博园怎么样
瓦厂梁地址在什么地方,想过去办事
为什么我对感情也会变成三分钟热度了 双鱼座
英语动词grow怎么加ing
杨幂的男朋友是李易峰
刚才距离几十千米外的梧州地震了,我这里感受
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?