web-dev-qa-db-ja.com

メニューブロックのテーマを設定する方法は?

私はカスタムメニューを作成し(「mynav」と呼ぶことにします)、私のテーマに次のものを含むテンプレート(block--menu--menu-mynav.tpl.php)を作成しました。

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

これは正常に動作します。

ただし、生成され、$contentに含まれる順序付けられていないリストにIDを適用することをお勧めします。次のように関数MYTHEME_links__system_mynav_menuを作成する必要があると思います。

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

しかし、影響がないようです。

何が悪いのですか?

11
RoToRa

順序付けられていないリストのテーマを設定するには、theme_menu_tree()を呼び出す必要があります。これを呼び出すために、template.phpを編集できます。

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

次に、リンクのテーマを設定する場合は、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";
}

Drupal 7の問題は、カスタムメニューのアクティブなトレイルを表示する際に大きなバグがあることです。

問題を見る
問題#520106-アクティブな証跡を動的に設定する方法がない
Issue#942782-カスタムメニューがアクティブなトレイルを受信しない

真のカスタムメニューが必要な場合は、基本的に運が悪いです。これらの問題はdrupalコミュニティで非常に長く続いているため、すぐに修正されるかどうかはわかりません。PHPがあるかどうかわかりません=それはそれを助けることができます。 Menu AttributesMenu Block のように、機能を簡単にするためにいくつかの代替モジュールを利用できます。どちらもがらくたを回避するのに役立ちますメニューシステムDrupal 7。

25
Steven

あなたのテーマの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) {

  }
2
iStryker