Кастомизация пунктов меню

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

Аватар пользователя Oboggy Oboggy 27 февраля 2008 в 17:31

Изменение внешнего вида отдельных пунктов меню возможно следущим способом:
Для начала каждому пункту меню требуется присвоить уникальный ID. Для этого добавьте функцию в template.php

<?php
function phptemplate_menu_item($mid, $children = '', $leaf = TRUE) {
  $link = menu_item_link($mid);
  $css_id = strtolower(str_replace(' ', '_', strip_tags($link)));
  return '<li id="' . $css_id . '" class="' . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. $link . $children ."</li>\n";
}
?>

Функция присваивает каждому пункту каждого меню текстовый идентификатор по имени ссылки. Т.е. пункту меню Administer будет присвоен id="administer"
Теперь необходимо задать стиль идентификатора в файле style.css:

li#my_account a{   // идентификатор пункта меню Navigation "My account"
font-weight: bold;  //здесь может быть любое свойство CSS для ссылки
}

меню).
Теперь пункт My account станет жирным. Закономерный вопрос, как изменить стиль для пункта, написанного на русском? Ответ: идентификатор русского пункта будет таким же, как при просмотре UTF-8 в кодировке Windows-1251. (самый простой способ - посмотреть сайт в Windows-1251)

Комментарии

Аватар пользователя PVasili PVasili 27 февраля 2008 в 17:44

жуткая каша - содержимое мешать с разметкой. дикость полная ... несколько проблем, на вскидку:
1) Что делать, если кто-то сменит ссылки при перемещении материала?
2) Как быть при дублировании ссылок?
3) Что будет при ссылке с именем, которым нельзя называть ID? URL и ID не совпадают по запрещенным словам...

Аватар пользователя Oboggy Oboggy 27 февраля 2008 в 17:56

1)Если речь о title ссылки - то опять менять код в CSS
2)При дублировании title свойство СSS применится ко всем
3)Каким именм нельзя называть ID?

Аватар пользователя Geldora Geldora 28 февраля 2008 в 11:19

А можно переделать код так, чтобы присваивался не текстовый id, а цифровой, типа второй пункт сверху - id 2 или дата создания меню? Тогда будет проще меня если что.

Аватар пользователя PVasili PVasili 28 февраля 2008 в 11:48

2 Oboggy,
1) У вас все редакторы имеют доступ к CSS и умеют его править? (каждый гасконец с детства...(с)Боярский)
2) ID дублировать?
3) Geldora вам показал... сложность с &, пробелами, цифрами и - в начале... да много чего...

2 Geldora, ID 2 - нельзя

Аватар пользователя Гость Гость (не проверено) 28 февраля 2008 в 16:18

function phptemplate_menu_item_link($item, $link_item) {
return l($item['title'], $link_item['path'],
!empty($item['description']) ? array('title' => $item['description'],'id'=>$item["pid"]) : array('id'=>$item["pid"]),
isset($item['query']) ? $item['query'] : NULL);

}

установка id тэгу линка

Аватар пользователя Oboggy Oboggy 28 февраля 2008 в 18:21

2 PVasili
Вам не нравится решение? Мне тоже) Его можно использовать только для статичных ссылок. В конце-концов, Вы можете предложить свое.
2)Еще раз: если у Вас есть 2 пункта меню с одинаковыми названиями, то выглядеть они будут одинаково (это просто констатация факта)

2 Гость
id дублируются

Аватар пользователя chup chup 29 февраля 2008 в 16:54

решение не универсальное, но интересное и если приложить голову то можно сделать как надо. Спасибо.