メニューが表示されているときに、メニュー項目をプログラムで削除/非表示にするにはどうすればよいですか?
あなたの質問をよく理解していれば、テーマのtemplate.phpにtheme_menu_item_link()
関数を使用できます。
これは私がテストした例です(この例ではGarlandが使用されているテーマなので、関数の名前をそれぞれの名前に置き換える必要があります)。
メニューの例を次に示します。
これはアイテムを削除する関数です:
_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);
}
}
_
メニュー項目を検出するために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']);
}
_
変更を確認するには、必ずキャッシュをクリアしてください。
theme_menu_item_link() に関連する他のリソースを見つけました: http://drupal.org/node/245156 、 http://drupal.org/node/249864 、 http://drupal.org/node/417482 。
ここに私の実装があります。最後の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;
}
}
}