создаю в дополнительную вкладку в профиле пользователя
<?php
$items['user/%user/view_teacher'] = array(
'title' => 'Название',
'page callback' => 'view_teacher_function',//имя функции для страницы
'access arguments' => array('????'),
'type' => MENU_LOCAL_TASK,
'weight' => 11,
);
?>
Подскажите пожалуйста как выставить 'access arguments' так, чтобы эта вкладка была только у одной роли пользователей.. а просматривать ее могут все. или даже лучше просмотр разрешен всем авторизованным.
Комментарии
объявите хук_пермишн и потом его укажите вместо ????. на странице настройки прав укажите кому можно показывать.
добавьте проверку в пэйдж_коллбэк на роль.
Не, не так... вам нужен свой 'access callback', что-то вроде
<?php
$items['user/%user/view_teacher'] = array(
'title' => 'Название',
'page callback' => 'view_teacher_function',//имя функции для страницы
'access callback' => 'view_teacher_access_callback',
'access arguments' => array(1),
'type' => MENU_LOCAL_TASK,
'weight' => 11,
);
?>
И потом
<?php
function view_teacher_access_callback($account) {
if (in_array('teacher', $user->roles) && user_is_logged_in()) {
return TRUE;
}
return FALSE;
}
?>
q2_faith, duozersk Спасибо за помощь!
но чтото я запутался совсем...((
с хуком_хук_пермишн чето не получается..
сделал как сказал duozersk, так:
<?php
$items['user/%user/my_zakaz'] = array(
'title' => 'Мои заявки',
'page callback' => 'my_zakaz_function',
'access callback' => 'view_student_access_callback', //
'access arguments' => array(1),
'type' => MENU_LOCAL_TASK,
'weight' => 12,
);
?>
<?php
function view_teacher_access_callback($account) {
global $user;
if (array_key_exists('5', $user->roles) && user_is_logged_in()) {
return TRUE;
}
return FALSE;
}
?>
получилось этим сделать вкладку только для профиля с айди 5 (студент). Но при этом никто из другой роли не может видеть в профиле студента эту вкладку... а нужно чтобы видели..
потом сделал так:
<?php
$items['user/%user/my_zakaz'] = array(
'title' => 'Мои заявки',
'page callback' => 'my_zakaz_function', //имя функции для страницы
'access callback' => 'view_student_access_callback', //
//'access arguments' => array(1),
'access arguments' => array('view page my_zakaz'),
'type' => MENU_LOCAL_TASK,
'weight' => 12,
);
?>
<?php
function repetitor_permission(){
return array('view page my_zakaz' => array(
'title' => t('View page my_zakaz'),
'description' => t('View page my_zakaz'),
),
);
}
?>
на странице настройки прав появились галочки.. но их установка (для роли преподавателя к примеру) ничего не меняет.. преподаватель не видит эту вкладку в профиле студента..
если ты хочешь устанавливать права из админки access callback вообще не нужен , он берется по умолчанию user_access
'title' => 'Мои заявки',
'page callback' => 'my_zakaz_function', //имя функции для страницы
'page arguments' => array(1),
'access arguments' => array('view page my_zakaz'),
'type' => MENU_LOCAL_TASK,
'weight' => 12,
);
и функцию тогда view_teacher_access_callback убери
Не, я всё тебе правильно писал, но опечатался в одном месте... а ты туда ещё и глобал юзера вставил.
Вот правильный вариант:
<?php
function view_teacher_access_callback($account) {
if (in_array('teacher', $account->roles) && user_is_logged_in()) {
return TRUE;
}
return FALSE;
}
?>
Объясняю - тебе нужно контролировать появление вкладки не в зависимости от пользователя, который в данный момент просматривает сайт, а в зависимости от того, на чей профиль этот пользователь смотрит. Чей профиль определяется 1-м параметром в пути меню (%user), отсюда появляется "'access arguments' => array(1)," - в переменной $account аксесс колбека будет сидеть нужный тебе объект (того, чей профиль смотрят). Далее, уже в самой функции, ты должен проверить, что у этого $account есть определённая роль + что пользователь, смотрящий аккаунт, залогинен. Понятно?
Если нужно регулировать появление вкладки не по наличию роли у просматриваемого профиля, а по пермишену - то "in_array('teacher', $account->roles)" заменится на "user_access('permission name', $account)" - опять же, проверить наличие пермишена у объекта юзера просматриваемого профиля, а не у юзера, смотрящего на профиль.
duozersk, Спасибо большое!!) получилось)
а вот
...заменится на "user_access('permission name', $account)"...
permission name - это где брать?..
'view page my_zakaz'
drupby,
аа, ок, спасибо!))