2012-03-07 32 views
0

我需要在Magento中自定义Navigation.php的帮助。我正在使用Superfish创建顶级导航栏,如果没有选择其他选项卡,则始终打开第一个选项卡(此Superfish导航栏示例具有第二个选项卡作为默认设置:http://users.tpg.com.au/j_birch/plugins/superfish/#sample4Magento Top Nav:使用PHP向第一类添加CSS类

但是,由于Magento使用PHP生成顶级菜单,我需要使用PHP插入CSS类sfHover。

这是Magento的使用的CSS类插入顶部导航链接代码:

$classes = array(); 
    $classes[] = 'level' . $level; 
    $classes[] = 'nav-' . $this->_getItemPosition($level); 
    if ($this->isCategoryActive($category)) { 
     $classes[] = 'active'; 
    } 
    $linkClass = ''; 
    if ($isOutermost && $outermostItemClass) { 
     $classes[] = $outermostItemClass; 
     $linkClass = ' class="'.$outermostItemClass.'"'; 
    } 
    if ($isFirst) { 
     $classes[] = 'first'; 
    } 
    if ($isLast) { 
     $classes[] = 'last'; 
    } 
    if ($hasActiveChildren) { 
     $classes[] = 'parent'; 
    } 

这是Magento的使用,以确定在顶部导航每个类别的职位代码:

protected function _getItemPosition($level) 
{ 
    if ($level == 0) { 
     $zeroLevelPosition = isset($this->_itemLevelPositions[$level]) ? $this->_itemLevelPositions[$level] + 1 : 1; 
     $this->_itemLevelPositions = array(); 
     $this->_itemLevelPositions[$level] = $zeroLevelPosition; 
    } elseif (isset($this->_itemLevelPositions[$level])) { 
     $this->_itemLevelPositions[$level]++; 
    } else { 
     $this->_itemLevelPositions[$level] = 1; 
    } 

    $position = array(); 
    for($i = 0; $i <= $level; $i++) { 
     if (isset($this->_itemLevelPositions[$i])) { 
      $position[] = $this->_itemLevelPositions[$i]; 
     } 
    } 
    return implode('-', $position); 
} 

我试过以下添加我的CSS类:

if ($this->_getItemPosition($level) == "1") { 
     $classes[] = 'sfHover'; 
    } 

if ($position == "1") { 
      $classes[] = 'sfHover'; 
     } 

但他们都没有工作,无论是与三个等号===或单引号。

有没有人比我有更多的Magento/PHP知识知道我能做什么?提前致谢!

更新:Superfish脚本去掉sfHover类。需要将“主动”类添加到Navigation.php中。

我可以在手动编码导航下面的代码做在top.phtml:

<?php $_anyActive = false; foreach ($this->getStoreCategories() as $_category) { $_anyActive = $_anyActive || $this->isCategoryActive($_category); } ?> 
<li class="level0 nav-1 level-top first parent <?php echo !$_anyActive ? 'active' : '' ?>"> 

但我不知道如何集成了从Navigation.php ...

代码
+0

1.该导航高度缓存,因此请确保在进行更改后清除缓存。 2.当你var_dump($ position)时会发生什么; – 2012-03-07 18:45:45

+0

1.每次我对文件进行更改时,我一直在清除缓存。 2.我会尝试var_dump。我以前从来没有做过。谢谢! – mercyt 2012-03-07 19:11:24

+0

更新:尝试做一个var_dump,它返回的是“null”。我不确定我是否正确使用它,但尝试了两种不同的方法,但仍然无法正常工作。 – mercyt 2012-03-07 19:26:40

回答

0

我会尝试以下操作。改变

if ($isFirst) { 
    $classes[] = 'first'; 
} 

if ($isFirst) { 
    $classes[] = 'first sfHover'; 
} 

这应该插入两个第一类和sfHover进入菜单阵列中的第一个元素。另一种方法是从主题中移除自动创建的菜单,并将其替换为内容块以提供菜单项。它不是很优雅,但完成了工作。

+0

这确实在每个导航栏的第一项中输入了“sfHover”,但由于某些原因,Superfish脚本剥离了sfHover(我可以说因为源HTML中有sfHover,但Firebug显示的是没有该类的元素施加)。 我将需要弄清楚如何仅在没有其他项目处于活动状态时才将“活动”类应用于第一个导航项。请参阅编辑的问题。谢谢您的意见! – mercyt 2012-03-07 23:15:08