Як тематизувати блок меню?


11

Я створив користувальницьке меню (дозволить назвати його "mynav") і в своїй темі створив шаблон спеціально для нього ( block--menu--menu-mynav.tpl.php), який містить:

<div id="mynav" class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php print $content ?>
</div>

Це чудово працює.

Однак я вважаю за краще застосувати ідентифікатор до не упорядкованого списку, який генерується та міститься в $content. Я думаю, мені потрібно створити функцію на MYTHEME_links__system_mynav_menuзразок цієї:

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

але це, мабуть, не впливає.

Що я роблю неправильно?


Ймовірно, це дублікат drupal.stackexchange.com/questions/2258/…
tim.plunkett

1
Інше питання стосується додавання унікального ідентифікатора меню, тоді як це питання є більш загальним.
kiamlaluno

Точне запитання щодо stackoverflow: stackoverflow.com/questions/11935477/…
кігті

Відповіді:


25

Щоб тематизувати не упорядкований список, вам потрібно зателефонувати на topic_menu_tree (). Ви можете відредагувати template.php, щоб викликати це.

function THEMENAME_menu_tree__MENUNAME($variables){
  return '<ul class="your-custom-class" id="your-custom-id">' . $variables['tree'] . '</ul>';
}

Потім, якщо ви хочете тематизувати свої посилання, зателефонуйте topic_menu_link ().

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

  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";
}

Тепер проблема з Drupal 7 полягає в тому, що існує велика помилка, коли справа стосується відображення активного сліду користувацьких меню.

Див.
Випуск № 520106 - Ні в якому разі не можна динамічно встановлювати активний слід
Випуск № 942782 - Спеціальні меню ніколи не отримують активний слід

Ви в основному не пощастили, якщо хочете справжніх користувацьких меню. Ці питання дуже довго стоять у спільноті друпалів, тому я не впевнений, чи незабаром вони будуть вирішені. Я не знаю, чи є якийсь PHP, який може допомогти в цьому. Ви можете звернутися до деяких альтернативних модулів, щоб полегшити функціональність, наприклад, атрибути меню та блок меню . Вони обидва можуть допомогти обійти грубу систему меню в Drupal 7.


2

Всередині template.php вашої теми це був спосіб робити в Drupal 6

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

У Drupal 7 вам потрібно зателефонувати

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_linkздається, обробляє лише окремі посилання. Я не можу дістатися до ul.
RoToRa

Я розглядаю це, я не знаю, чи зможете ви більше. Я знаю, що з Drupal 7 у вас більше влади над посиланнями, але менша влада над меню.
iStryker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.