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


11

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

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

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

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

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

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

私は何を間違えていますか?



1
もう1つの質問は、固有のメニューIDを追加することですが、この質問はより一般的です。
kiamlaluno

stackoverflowに関する正確な質問:stackoverflow.com/questions/11935477/…– 14

回答:


25

順序付けられていないリストのテーマを設定するには、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を参照-アクティブな証跡を動的に設定する方法がない
問題#942782-カスタムメニューがアクティブな証跡を受信しない

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

調査中ですが、もうできるかわかりません。Drupal 7を使用すると、リンクの処理能力は向上しますが、メニューの処理能力は低下します。
iStryker、2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.