Magento Top Nav: добавьте CSS класс в первую категорию, используя PHP - PullRequest
0 голосов
/ 07 марта 2012

Мне нужна помощь с настройкой Navigation.php в Magento. Я использую Superfish для создания верхней навигационной панели, в которой всегда будет открыта первая вкладка, если никакая другая вкладка не была выбрана (этот пример навигационной панели Superfish имеет вторую вкладку по умолчанию: http://users.tpg.com.au/j_birch/plugins/superfish/#sample4)

Однако, поскольку Magento генерирует верхнее меню с использованием PHP, мне нужно также вставить CSS-класс sfHover с использованием PHP.

Это код, который 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 ...

1 Ответ

0 голосов
/ 08 марта 2012

Я бы попробовал следующее.Измените

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

на

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

. Это позволит вставить сначала класс и sfHover в первый элемент в массиве меню.Другой способ сделать это - удалить автоматически созданное меню из вашей темы и заменить его на блоки содержимого для доставки элементов меню.Это не так элегантно, но выполняет свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...