web-dev-qa-db-ja.com

表示からメニュー項目を削除

メニューが表示されているときに、メニュー項目をプログラムで削除/非表示にするにはどうすればよいですか?

1
Codium

あなたの質問をよく理解していれば、テーマのtemplate.phpにtheme_menu_item_link()関数を使用できます。

これは私がテストした例です(この例ではGarlandが使用されているテーマなので、関数の名前をそれぞれの名前に置き換える必要があります)。

メニューの例を次に示します。

screenshot

これはアイテムを削除する関数です:

_function garland_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }
  if ($link['title'] != 'item 1') {
    $link['localized_options'] += array('html' => TRUE);
    return l('<span>' . $link['title'] . '</span>', $link['href'], $link['localized_options']);
  }
  else {
    unset($link);
  }
}
_

screenshot

メニュー項目を検出するためにif($link['title'] != 'item 1'){..を追加し、それを削除したことに注意してください(unset($link)を使用)。

これはテキストを変更するためのコードです:

_function garland_menu_item_link($link) {
  if (empty($link['localized_options'])) {
    $link['localized_options'] = array();
  }
  if ($link['title'] == 'item 1') {
    $link['title'] = 'new text';
  }

  $link['localized_options'] += array('html' => TRUE);
  return l('<span>' . $link['title'] . '</span>', $link['href'], $link['localized_options']);
}
_

screenshot

変更を確認するには、必ずキャッシュをクリアしてください。

theme_menu_item_link() に関連する他のリソースを見つけました: http://drupal.org/node/245156http://drupal.org/node/249864http://drupal.org/node/417482

2
cigotete

ここに私の実装があります。最後のelseにreturn行を追加し、特定の役割を確認しました。

function batuka_menu_item_link($link) {
  global $user;
  if (in_array("club member", $user->roles)) {
    if (empty($link['localized_options'])) {
      $link['localized_options'] = array();
    }
    if ($link['title'] != 'Instructor Profile') {
      $link['localized_options'] += array('html'=>true);
      return l('<span>'.$link['title'].'</span>', $link['href'], $link['localized_options']);
    }
    else {
      unset($link);
      return;
    }
  }
}
1
Luis