Могу ли я изменить theme_menu_link для определенного меню? - PullRequest
6 голосов
/ 23 августа 2011

Я хотел бы добавить каналы ("|") между пунктами меню для одного из меню на моем сайте Drupal 7 (название темы "thompson").Я решил, что лучший способ сделать это - создать функцию в моем файле template.php с именем thompson_menu_link.Я сделал это, и он успешно изменяет меню, но он меняет все меню.Есть ли способ сделать это только для одного меню на моем сайте?

В настоящее время я использовал страницы администратора, чтобы добавить меню нижнего колонтитула (url path: menu-footer-menu) в блок нижнего колонтитула.Должен ли я назвать это по-другому?

Ответы [ 3 ]

5 голосов
/ 06 сентября 2016

Судя по всему, ядро ​​Drupal предоставляет возможность ссылок меню темы по названию меню . Для главного меню должна работать следующая функция темы

THEMENAME_menu_link__main_menu()

В качестве альтернативы вы можете использовать модуль Menu Block для создания блоков меню. Помимо прочего модуль создает дополнительные тематические предложения. С README модуля:

Блок меню использует функции темы меню ядра Drupal. Тем не менее, это также предоставляет подсказки тем, которые могут быть использованы для переопределения любого из вызываемые им функции темы. ...

  • theme_menu_link () может быть переопределено путем создания одного из:
    • [тема] _menu_link __ [название меню] ()
    • [тема] _menu_link__menu_block ()
    • [тема] _menu_link__menu_block __ [название меню] ()
    • [тема] _menu_link__menu_block __ [номер идентификатора блока] ()
2 голосов
/ 29 августа 2011

Я немного перепутал с функцией thompson_menu_link().Мне не нравится, как я это сделал, но он сделал свою работу.По сути, он читает имя меню и использует условное выражение для возврата элемента <li> с каналом впоследствии.Вот весь блок:

function thompson_menu_link(array $variables) {
  $element  = $variables['element'];
  $menuName = $variables['element']["#original_link"]["menu_name"];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);

  if ($menuName == "menu-footer-menu" && !in_array("last",$element['#attributes']['class']) {
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>|\n";
  }
  else {
    $finalString = '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
  }

  return $finalString;
}
0 голосов
/ 23 августа 2011

лучший способ сделать это - установить следующий модуль:

http://drupal.org/project/menu_attributes

Этот модуль позволяет добавлять специальные классы к некоторым пунктам меню, поэтому вам просто нужно добавить класс rightpipe и определить этот класс следующим образом:

.rightpipe { border-right: 1px solid black }

или

.rightpipe { background: url(1pixel_line_separator.png) no-repeat center right }
...