Bagaimana cara tema blok menu?

11

Saya telah membuat menu khusus (sebut saja "mynav") dan dalam tema saya, saya telah membuat templat khusus untuk itu ( block--menu--menu-mynav.tpl.php) yang berisi:

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

Ini berfungsi dengan baik.

Namun saya lebih suka menerapkan id ke daftar unordered yang dihasilkan dan terkandung di dalamnya $content. Saya kira saya perlu membuat fungsi MYTHEME_links__system_mynav_menuseperti ini:

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

tetapi tampaknya tidak memiliki pengaruh.

Apa yang saya lakukan salah?

RoToRa
sumber
Ini kemungkinan merupakan duplikat drupal.stackexchange.com/questions/2258/…
tim.plunkett
1
Pertanyaan lainnya adalah tentang menambahkan ID menu yang unik, sementara pertanyaan ini lebih umum.
kiamlaluno
Pertanyaan tepatnya tentang stackoverflow: stackoverflow.com/questions/11935477/…
claws

Jawaban:

25

Untuk memilih tema dari daftar yang tidak diurutkan, Anda perlu memanggil theme_menu_tree (). Anda dapat mengedit template.php Anda untuk memanggil ini.

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

Lalu, jika Anda ingin menentukan tema tautan Anda, panggil theme_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";
}

Sekarang, masalah dengan Drupal 7 adalah bahwa ada bug besar ketika datang untuk menampilkan jejak aktif menu kustom.

Lihat masalah
Masalah # 520106 - Tidak ada cara untuk secara dinamis menetapkan jejak aktif.
Masalah # 942782 - Menu khusus tidak pernah menerima jejak yang aktif

Anda pada dasarnya kurang beruntung jika Anda ingin beberapa menu kustom yang benar. Masalah-masalah ini sudah lama berdiri di komunitas drupal jadi saya tidak yakin apakah mereka akan diperbaiki dalam waktu dekat. Saya tidak tahu apakah ada beberapa PHP yang bisa membantu. Anda dapat beralih ke beberapa modul alternatif untuk membantu memudahkan fungsionalitas, seperti Menu Attributes dan Menu Block . Mereka berdua dapat membantu menyiasati sistem menu kasar di Drupal 7.

Steven
sumber
2

Di dalam template.php tema Anda, ini adalah cara untuk melakukan sesuatu di Drupal 6

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

Di Drupal 7 Anda perlu menelepon

  function MYTHME_menu_link(array $variables) {

  }
iStryker
sumber
MYTHEME_menu_linktampaknya hanya menangani tautan individual. Saya tidak dapat mencapai ul.
RoToRa
Saya melihat ke dalamnya, saya tidak tahu apakah Anda bisa lagi. Saya tahu dengan Drupal 7 Anda memiliki lebih banyak kekuatan atas tautan, tetapi lebih sedikit daya atas menu.
iStryker