如果在导航栏同时设置了一级分类和相应的二级分类。
则点击二级分类下的商品后,导航栏上面的一级分类和二级分类同时成激活状态显示。
这个问题可以说是ECShop遗留的老问题了。
下午查看了下代码,进行了修正。

打开 includes/lib_main.php 查找 get_navigator 函数。

/**
* 取得自定义导航栏列表
* @param   string      $type    位置,如top、bottom、middle
* @return array         列表
*/

function get_navigator($ctype = ”, $catlist = array())
{
    $sql = ‘SELECT * FROM ‘. $GLOBALS[‘ecs’]->table(‘nav’) . ‘
            WHERE ifshow = ‘1’ ORDER BY type, vieworder’;
    $res = $GLOBALS[‘db’]->query($sql);
    $cur_url = substr(strrchr($_SERVER[‘REQUEST_URI’],’/’),1);

   if (intval($GLOBALS[‘_CFG’][‘rewrite’]))
    {
        if(strpos($cur_url, ‘-‘))    //如果开启了重写功能,且导航栏地址是重写后的地址,则将其匹配组合为php格式的。03/03修正
        {
            preg_match(‘/([a-z]*)-([0-9]*)/’,$cur_url,$matches);
            $cur_url = $matches[1].’.php?id=’.$matches[2];
        }
    }
    else
    {
        $cur_url = substr(strrchr($_SERVER[‘REQUEST_URI’],’/’),1);
    }

    $noindex = false;
    $active = 0;
    $navlist = array(
        ‘top’ => array(),
        ‘middle’ => array(),
        ‘bottom’ => array()
    );
    while ($row = $GLOBALS[‘db’]->fetchRow($res))
    {
        $navlist[$row[‘type’]][] = array(
            ‘name’      => $row[‘name’],
            ‘opennew’   => $row[‘opennew’],
            ‘url’       => $row[‘url’],
            ‘ctype’     => $row[‘ctype’],
            ‘cid’       => $row[‘cid’],
            );
    }

//首先判断导航栏里是否有当前页,如果有,则让其成激活状态。

    /*遍历自定义是否存在currentPage*/             
    foreach($navlist[‘middle’] as $k=>$v)
    {
       $condition = empty($ctype) ? (strpos($cur_url, $v[‘url’]) === 0) : (strpos($cur_url, $v[‘url’]) === 0 && strlen($cur_url) == strlen($v[‘url’]));
        if ($condition)
        {
            $navlist[‘middle’][$k][‘active’] = 1;
           $noindex = true;
            $active += 1;  
    
        }      

    }

// 如果当前页没有出现在导航栏上,则开始遍历所有的上级分类($catlist),并和导航栏信息进行匹配,如果存在,则使其成为激活状态。

    if(!empty($ctype) && $active < 1)
    {
        foreach($catlist as $key => $val)
        {
            foreach($navlist[‘middle’] as $k=>$v)
            {
                if(!empty($v[‘ctype’]) && $v[‘ctype’] == $ctype && $v[‘cid’] == $val && $active < 1)
                {
                    $navlist[‘middle’][$k][‘active’] = 1;
                    $noindex = true;
                    $active += 1;      //增加上面2处红色部分,就可以避免逻辑上面的错误。
                }
            }
        }
    }

    if ($noindex == false) {
        $navlist[‘config’][‘index’] = 1;
    }

    return $navlist;
}