Magento Top Nav:使用PHP将CSS类添加到第一个类别

Magento Top Nav:使用PHP将CSS类添加到第一个类别,php,magento,Php,Magento,我需要在Magento中定制Navigation.php的帮助。我正在使用Superfish创建一个顶部导航栏,如果没有选择其他选项卡,该导航栏将始终打开第一个选项卡。此Superfish导航栏示例将第二个选项卡作为默认选项卡: 但是,由于Magento使用PHP生成顶部菜单,因此我还需要使用PHP插入CSS类sfHover 这是Magento用于将CSS类插入顶部导航链接的代码: $classes = array(); $classes[] = 'level' . $level;

我需要在Magento中定制Navigation.php的帮助。我正在使用Superfish创建一个顶部导航栏,如果没有选择其他选项卡,该导航栏将始终打开第一个选项卡。此Superfish导航栏示例将第二个选项卡作为默认选项卡:

但是,由于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);
}

但它们都不起作用,要么用三个等号===要么用单引号

有没有比我更了解Magento/PHP的人知道我能做什么?提前谢谢

更新:Superfish脚本去掉了sfHover类。需要将活动类改为添加到Navigation.php

我可以在top.phtml中使用以下代码在手动编码的nav上执行此操作:

    <?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';
}


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

一,。该导航被大量缓存,因此请确保在进行更改后清除缓存。2.当你放弃美元头寸时会发生什么;1.每次更改文件时,我都会清除缓存。2.我要试试var_垃圾场。我以前从未做过。谢谢更新:尝试进行var_转储,但返回的结果为空。我不确定我是否正确地使用了它,但尝试了两种不同的方法,仍然不起作用。这确实将sfHover输入到了每个nav ul的第一项中,但出于某种原因,Superfish脚本去掉了sfHover,因为源HTML中有sfHover,但Firebug显示了未应用类的元素。我需要弄清楚,只有在没有其他项目处于活动状态时,如何将活动类应用于第一个导航项目。请参见编辑后的问题。谢谢你的意见!
    <?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' : '' ?>">
if ($isFirst) {
    $classes[] = 'first';
}
if ($isFirst) {
    $classes[] = 'first sfHover';
}