Активный пункт меню

Главные вкладки

Аватар пользователя J. Bravo J. Bravo 8 апреля 2008 в 16:25

Мне понадобилось для активного пункта вертикального меню изменить изображение. Нашел такое решение. Вдруг кому пригодится.

1. Переопределяем в теме функцию theme_menu_item следующим образом:

<?php
function zen_menu_item($mid, $children = '', $leaf = TRUE) {
return '

  • '. menu_item_link($mid) . $children ."
  • \n";
    }
    ?>

    2. Прописываем в css темы нужное нам отображение:

            li.active {
              list-style-image: url(/img/arrow_bold.gif);
            }

    Буду рад, если кто-то поделится другими способами достичь того же результата.

    Комментарии

    Аватар пользователя J. Bravo J. Bravo 8 апреля 2008 в 19:00

    У нас есть 3 пункта меню, каждый из которых представляет собой конструкцию <li class="leaf">
    Как при выводе "по умолчанию" определить, для какого из них нужно отобразить особенную картинку, как показано на рисунке:

    Аватар пользователя J. Bravo J. Bravo 9 апреля 2008 в 8:42

    Приведите, пожалуйста, фрагмент css при помощи которого при стандартном выводе для элемента меню, который выделен (независимо от того, есть или нет у него дочерние элементы), можно отобразить свою картинку (для темы Garland).

    Аватар пользователя Kalian Kalian 9 апреля 2008 в 15:19

    В гарланде в ксс этого фрагмента нет. Но т.к. активный пункт меню выглядит следующим образом:

    <li class="leaf"><a href="урл" title="титл" class="active">пункт_меню</a></li>

    , т.е. добавляется class="active", то вы можете в ксс добавить следующий код:

    ul li.leaf a.active, ul li.expanded a.active, ul li.collapsed a.active {
      color: #000;
    }

    и изменять вид активного пункта под ваши нужды.

    з.ы.: а чтобы поставить картинку, надо будет прописать для li

      list-style-type: none;
      list-style-image: none;

    а бэкграунды прописывать не для классов .leaf, .expanded, .collapsed, а для ссылок, т.е. для "ul li.leaf a" и "ul li.leaf a.active"

    Аватар пользователя J. Bravo J. Bravo 10 апреля 2008 в 1:49

    так о чем и речь - изображение необходимо прописывать для элемента li (что и показано в примере). Но для нескольких абсолютно одинаковых элементов li в моем случае понадобилось вывести разные изображения, для чего и была переопределена функция генерации меню (чтобы как-то выделить тот элемент li, который содержит активную в настоящий момент ссылку).

    Аватар пользователя Kalian Kalian 10 апреля 2008 в 8:46

    А чем вам не разные элементы "ul li.leaf a" и "ul li.leaf a.active" или "ul li.expanded a" и "ul li.expanded a.active", для которых можно вывести разные картинки?
    Дело конечно вкуса для какого элемента (li или a) делать бэкграунд, но в примеденном мной варианте не нужно дописывать доп.функцию, а только поправить только ксс.

    Аватар пользователя Kalian Kalian 10 апреля 2008 в 15:45

    Хотя бы так:

    .ul li.leaf {
      list-style: none;
    }
    .ul li.leaf a {
      background: url(одна_картинка.жпг) left no-repeat;
      padding-left: 15px;
    }
    .ul li.leaf a.active {
      background: url(вторая_картинка.жпг) left no-repeat;
      padding-left: 15px;
    }
    Аватар пользователя ruslik ruslik 4 сентября 2008 в 0:43

    Подскажите как быть в случае если мне необходимо назначить фоновое изображение как на тэг li так и на тэг a класса active.

    Продемонстрирую на изображении для наглядности.

    Буду очень признателен любым предложениям.

    Аватар пользователя InvDeath InvDeath 16 октября 2010 в 20:54

    тоже нужно к li (активному) картинку приделать. Уже несколько часов ковыряюсь - результата нету.
    Уже думаю все тексты в спан кинуть на худой конец