如果在导航栏同时设置了一级分类和相应的二级分类。
则点击二级分类下的商品后,导航栏上面的一级分类和二级分类同时成激活状态显示。
这个问题可以说是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;
}
评论