
Нужно для для пользователей с определенной ролью показывать или наоборот спрятать какие-то отдельные пункты меню.
Например, ссылку на какой-либо и ссылку на профиль текущего пользователя нужно показывать в Primary links, но только для зарегистрированного пользователя. А все остальные пункты этого меню нужно показывать для всех пользователей.
Один из вариантов решения - модуль Menu per Role.
Но этот модуль требует вмешательства в ядро друпал, что не есть хорошо.
Мой вариант основан на использовании hook_menu().
Пишем свой модуль. В файле mymodule.module пишем функцию:
<?php
function mymodule_menu( $may_cache ) {
$items = array();
global $user;
if ( !$may_cache ) {
if ($user->uid !== 0) { // для всех зарегистрированных пользователей
$items[] = array(
'path' => 'mypage',
'title' => t('Моя страница'),
'type' => MENU_NORMAL_ITEM,
'pid' => 2, // это id меню Primary links
'access' => true
);
}
}
return $items;
}
?>Если ссылка, которую Вы патаетесь определить, ведет на страницу со списком, сформированным с помощью модуля views, то в меню Вы свою новую ссылку не увидите,
потому что механизм меню Drupal 5 основан на paths.
Т.е. если в системе уже есть список, Url которого mypage, то новый menu item с path 'mypage' не будет зарегистрирован в системе.
Как это обойти? Воспользоваться aliasом. Т.е. для меню указывает один путь, например,
'my-page', и создаем alias (псевдоним) с помощью функции path_set_alias.
<?php
function mymodule_menu( $may_cache ) {
$items = array();
global $user;
if ( !$may_cache ) {
if ($user->uid !== 0) { // для всех зарегистрированных пользователей
$items[] = array(
'path' => 'my-page',
'title' => t('Моя страница'),
'type' => MENU_NORMAL_ITEM,
'pid' => 2, // это id меню Primary links
'access' => true
);
}
}
return $items;
path_set_alias('mypage', 'my-page');
}
?>Ссылка на профиль пользователя создается аналогично.
Но для того чтобы ссылка работала правильно и вела на профиль именно текущего пользователя, ставим модуль 'me' aliases.
В результате получаем:
<?php
function mymodule_menu( $may_cache ) {
$items = array();
global $user;
if ( !$may_cache ) {
if ($user->uid !== 0) { // для всех зарегистрированных пользователей
$items[] = array(
'path' => 'my-page',
'title' => t('Моя страница'),
'type' => MENU_NORMAL_ITEM,
'pid' => 2, // это id меню Primary links
'access' => true
);
path_set_alias('mypage', 'my-page');
$items[] = array(
'path' => 'myprofile',
'title' => t('Профиль'),
'type' => MENU_NORMAL_ITEM,
'pid' => 2,
'access' => true,
'weight' => 10
);
path_set_alias('user/me', 'myprofile');
}
}
return $items;
}
?>
Отправить новый комментарий