<?php
function social_menu() {
global $user;
//Не появляется
if ((arg(0) == 'user') && is_numeric(arg(1)) && (arg(1) != $user->uid)) {
$items['user/%/add_to_friendlist'] = array(
'title' => 'Добавить в друзья',
'page callback' => 'social_add_to_friendlist',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_LOCAL_TASK,
'weight' => 20,
);
}
//Появляется
$items['user/%/add_to_friendlist'] = array(
'title' => 'Добавить в друзья',
'page callback' => 'social_add_to_friendlist',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_LOCAL_TASK,
'weight' => 20,
);
return $items;
}
?>
Первый вариант не работает. Объясните пожалуйста почему
Комментарии
Потому что hook_menu вызывается лишь один раз - при подключении модуля.
А как сделать чтобы на своей странице это меню не появлялся, а на других появлялся?
Вот тут видел чтобы люди так советовали
Попробуйте использовать access_callback, access_arguments
спасибо, решено
<?php
/* ....... */
$items['user/%/add_to_friendlist'] = array(
'title' => 'Добавить в друзья',
'page callback' => 'social_add_to_friendlist',
'page arguments' => array(1),
'access callback' => 'add_to_friendlist_access',
'type' => MENU_LOCAL_TASK,
'weight' => 20,
);
/* ......*/
function add_to_friendlist_access() {
global $user;
if (arg(1) != $user->uid)
return TRUE;
else
return FALSE;
}
?>
А я бы обошелся одной строчкой, и при этом не показал бы ссылки незарегистрированным/незалогиненным пользователям
<?php
function add_to_friendlist_access() {
return user_is_logged_in() && ($GLOBALS['user']->uid != arg(1));
}
?>
Еще одна проблема с отображением контента
<?php
function friendlist_menu() {
//Не появляется
$items['user/%uid/delete_friend/%fuid'] = array(
'title' => 'Удалить друга',
'page callback' => 'delete_friend',
'access callback' => 'friendlist_access',
'type' => MENU_CALLBACK,
);
//Появляется
$items['friends'] = array(
'title' => 'Удалить друга',
'page callback' => 'delete_friend',
'access callback' => 'friendlist_access',
'type' => MENU_CALLBACK,
);
return $items;
}
function delete_friend() {
return 'hello';
}
?>
Первый вариант не показывает нужный контент ( данные страницы user/% показывает), а второй вариант показывает. В чем проблема?