Добавление классов в пункты меню для обозначения того, на каком уровне они находятся

Как добавить классы в <a> или <li> основного меню, чтобы указать, какой уровень они находятся в иерархии меню (например, «уровень-1», «уровень-2» и т. д.)? В приведенном ниже коде показано, что первая ссылка имеет 3 подзадачи (выпадающее меню):

<ul class="menu">
  <li class="first expanded">
    <a class="level-1" href="#" title="">Top link</a>
    <ul class="menu">
      <li class="first leaf"><a class="level-2" href="#">Dropdown 1</a></li>
      <li class="leaf"><a class="level-2" href="#">Dropdown 2</a></li>
      <li class="last leaf"><a class="level-2" href="#">Dropdown 3</a></li>
    </ul>
  </li>
  <li class="last leaf">
    <a class="level-1" href="#" title="">Another top link</a>
  </li>
</ul>
6 голосов | спросил enchance 8 PM00000060000000431 2011, 18:19:04

2 ответа


7

Вы можете использовать theme_menu_link() в Drupal 7.

function MYTHEME_menu_link(array $variables) {
  $element = $variables['element'];
  $sub_menu = ''; 

  $element['#attributes']['class'][] = 'depth-' . $element['#original_link']['depth'];

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

Здесь я добавил:

$element['#attributes']['class'][] = 'depth-' . $element['#original_link']['depth'];

Что обеспечит класс в элементе списка с глубиной меню.

ответил acouch 8 PM00000070000005031 2011, 19:28:50
3

Изменение классов и разметки в структуре меню не очень просто (по крайней мере, не в Drupal 6, и я думаю, что Drupal 7 - это то же самое). Проблема в том, что для того, чтобы знать, какой рычаг вы печатаете, вам нужно самому обрабатывать создание меню самостоятельно.

При правильном CSS вам не нужно такое указание, поскольку вместо этого вы используете вложение:

  • ul.menu li a Уровень 1
  • ul.menu ul li a Уровень 2
  • ul.menu ul ul li a Уровень 3

Это не изящно и может сделать материал более сложным, чем нужно, но это более простое решение, чем иметь дело с системой меню Drupal.

ответил googletorp 8 PM00000070000002231 2011, 19:06:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132