我需要帮助在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都插入到菜单数组的第一个元素中。另一种方法是从主题中删除自动创建的菜单,并将其替换为内容块以提供菜单项。它没有那么优雅,但能完成任务。