web-dev-qa-db-ja.com

メニューに一意のメニューIDを追加するにはどうすればよいですか?

Drupal 7を使用していて、特定のメニューに一意のIDを追加したい。それを行う方法はありますか?

2
mohamad salama

迅速かつ汚い方法:

テーマディレクトリに移動し、page.tpl.phpを開きます。 Zenベースのテーマを使用していて、セカンダリメニューを印刷する次のコードがあります。

     <?php print theme('links__system_secondary_menu', array(
       'links' => $secondary_menu,
       'attributes' => array(
       'id' => 'secondary-menu',
       'class' => array('links', 'clearfix'),
      ),
      'heading' => array(
        'text' => $secondary_menu_heading,
        'level' => 'h2',
        'class' => array('element-invisible'),
      ),
    )); ?>

これは単に次のように編集できます(変更された行にはアスタリスクがあります)。

     <?php print theme('links__system_secondary_menu', array(
       'links' => $secondary_menu,
       'attributes' => array(
       ***'id' => array('secondary-menu', 'my-new-id'),***
       'class' => array('links', 'clearfix'),
      ),
      'heading' => array(
        'text' => $secondary_menu_heading,
        'level' => 'h2',
        'class' => array('element-invisible'),
      ),
    )); ?>

編集:

多次元のメニューと言語に問題があると言ったとき、私は本当にあなたを理解していませんが、さらに制御が必要な場合は、theme_menu_treeを使用しないのはなぜですか?テーマのtemplate.tpl.phpで次のようにオーバーライドします。

function my_theme_name_menu_tree($variables) {
  if ($variables['some_condition_you_care_about'])
    return '<ul class="menu" id="my_custom_id">' . $variables['tree'] . '</ul>';
  else
    return '<ul class="menu">' . $variables['tree'] . '</ul>';
}
0
Frederik

別の解決策として、多分あなたは Menu block module の使用を検討するでしょう。これを使用して、特定のメニューのブロックを作成し、カスタムの深度範囲、開始項目などを指定します。

私は自分のサイトのすべてのメニューにこれを使用していると思います。これは、そのコントロールを使用するのが好きであり、追加のボーナスとして、各メニューに一意のIDを追加します

1
electblake

メニュー attributes module を使用して、カスタムクラス、ID、名前などをDrupalの任意のメニュー項目に追加できます。 Drupalのメニューシステムを変更してカスタムの外観を作成する場合に非常に便利なモジュール。

1
Jepedo

順序付けられていないリストのテーマを設定するには、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。

0
Steven