Здравствуйте.
Пытаюсь изменить вид стандартного меню Друпала.
Вывод меню в нужной мне верстке я сделал. Для этого задал свою функцию в template.php. Я переделал под себя две функции: phptemplate_menu_tree и phptemplate_menu_item .
Осталась одна загвоздка: мне надо, чтобы активный элемент меню находился в DIV, т. к. к этому диву я применяю background-image (это изображение ввиде кнопки, которое визуально выделяет активный пункт). Я нашел, что элемент меню выводитья в теге
со стилем "active". Может есть способ выводить элемент в
?
P. S. Попытался реализовать это с помощью Ява-скрипта:
var menus = document.getElementsByClassName('el');
for(var i=0; i < menus.length; i++){
el = menus[i].childNodes[0];
if (el.className == 'active'){
el.parentNode.className = 'el_hover';
}
}
}
Этот скрипт, по идее, должен находит в коде сроку со стилем active, и применять к родительскому диву другой стиль. НО этот код не работает.
Комментарии
if ($active) {
return '<li class="active">'. menu_item_link($mid) ."</li>\n";
}
else {
return '<li>'. menu_item_link($mid) ."</li>\n";
}
}
Пишем так:
if ($active) {
return '<div><li class="active">'. menu_item_link($mid) ."</li></div>\n";
}
else {
return '<li>'. menu_item_link($mid) ."</li>\n";
}
}
Только надо посмотреть, может к актив добавить еще какое условие если важно чтоб на другие менюхи не влияло. В общем копайтесь в эту сторону должно помочь.
Так ведь menu_local_task - это горизонтальное меню в виде "закладочек". Или я ошибаюсь?
А кто мешает проверить? Я на 100% не уверен. Я как говорится лишь попробовал указать направление ).
Если это не то что надо, то надо дебажить и смотреть кто цепляет тегу класс "актив".
return l($item['title'], $link_item['path'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL);
}
может так попробовать:
if (проверка условия на active = TRUE /*я не дебажил в какой переменной что хранится, оставляю это Вам*/) {
return '<div>'.l($item['title'], $link_item['path'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL).'</div>';
} else {
return l($item['title'], $link_item['path'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL); }
Проблема частично решена.
Функция menu_in_active_trail(), если ей пердать идентификатор пункта меню (обычно $mid), возвращает TRUE, если этот пункт активный.
НО, Друпал считает активным не только тот пункт, на котором мы сейчас "стоим", но и родительский!
Я поправил функцию ,чтобы она выводила в другой div активный пункт, но получается как изображено на картинке:
Как видите, пришлось дорисовывать стрелочку для родительского пункта, чтобы хоть как-то логически отделить этот пункт.
Вот такой код у меня в template.php у функции phptemplate_menu_item()
{
return " <li>
<div><div class='el_ho' >". menu_item_link($mid) ."</div></div>
<div class='el_ch'>". $children ."</div>
</li>";
}
return " <li>
<div><div class='el' >". menu_item_link($mid) ."</div></div>
<div class='el_ch'>". $children ."</div>
</li>";