Magento顶部导航:使用PHP将CSS类添加到第一个类别


Magento Top Nav: Add CSS class to first category using PHP

我需要帮助在Magento中自定义Navigation.php。我正在使用Superfish创建一个顶部导航栏,如果没有选择其他选项卡,它将始终打开第一个选项卡(此Superfish导航栏示例的默认选项卡为第二个选项卡:http://users.tpg.com.au/j_birch/plugins/superfish/#sample4)

然而,由于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中的代码集成…

我会尝试以下操作。更改

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

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

这应该将类first和sfHover都插入到菜单数组的第一个元素中。另一种方法是从主题中删除自动创建的菜单,并将其替换为内容块以提供菜单项。它没有那么优雅,但能完成任务。