Проблема с отображением элемента MENU_LOCAL_TASK

Главные вкладки

Аватар пользователя Ignotus Ignotus 6 августа 2010 в 9:36
<?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;
}
?>

Первый вариант не работает. Объясните пожалуйста почему

Комментарии

Аватар пользователя Ignotus Ignotus 6 августа 2010 в 9:47

"G.A. Vinogradov" wrote:
Потому что hook_menu вызывается лишь один раз - при подключении модуля.

А как сделать чтобы на своей странице это меню не появлялся, а на других появлялся?

Вот тут видел чтобы люди так советовали Smile

Аватар пользователя Ignotus Ignotus 6 августа 2010 в 10:03

"G.A. Vinogradov" wrote:
Попробуйте использовать 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;
}
?>
Аватар пользователя G.A. Vinogradov G.A. Vinogradov 6 августа 2010 в 10:46

А я бы обошелся одной строчкой, и при этом не показал бы ссылки незарегистрированным/незалогиненным пользователям

<?php
function add_to_friendlist_access() {
    return 
user_is_logged_in() && ($GLOBALS['user']->uid != arg(1));
}
?>
Аватар пользователя Ignotus Ignotus 7 августа 2010 в 20:19

Еще одна проблема с отображением контента

<?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/% показывает), а второй вариант показывает. В чем проблема?