Собственно задача такая, вместо стандартных кнопок управления, которые есть в профиле у пользователя (просмотр, изменить и т.п.) сделать свои.
пытался решить это 2умя путями. Везде наткнулся на определенные проблемы
1) Пытался поредактировать, поковыряться в исходном коде, чтобы добавить свои кнопки и убрать стандартные, но абсолютно ничего не понял, в какие моменты как и почему выводятся те или иные TASK_MENU
2) Создал блок и вывожу его на странице с профилем, но в этом случае он почему-то отображается не только в собственном профиле, но и в профиле другого юзера/ А надоЮ, чтобы выводился только у залогиненого пользователя.
Вот этот код блока. В чем я не прав? подскажите...
global $user;
$message .= t('<a href="view">кнопка1</a><a href="edit">кнопка2</a>', array('view' => url('user/' . $user->uid), 'user' => $user->name, 'edit' => url('user/' . $user->uid . '/edit')));
echo '<center>' .$message, '</center>'; }
else
{
echo '';
} ?>
Комментарии
Насчет блоков: попробуйте выводить прямо в блок $account->uid и $user->uid.
А вообще в настройке блока есть вариант "показывать если PHP-код возвращает TRUE", попробуйте туда вставить примерно это:
global $user;
return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>
Что касается MENU_LOCAL_TASK, не совсем ясно, в чем ваш вопрос.
На странице регистрации эти кнопки тоже отображаются? Есть ли возможность апгрейда вышеупомянтуго кода, чтобы при регистрации кнопок видно не было?
Ну это совсем просто
return (((arg() == 'user') && ($user->uid != 0)) || ((arg(0) == 'user') && (arg(1) == $user->uid)));
Отлично, все работает ))
теперь вторая загвоздка. Как убрать обычное меню, которое выводится на странице пользователя?
заранее спасибо!
Если речь все еще про локалтаски, то лучше всего наверное просто запретить пользователям доступ к тем действиям, которые отражают локалтаски.
речь идет о них, но там при запрете всего лишнего все равно остается кнопка просмотра и редактирования своего профиля. Вот их бы как-то убрать...
в user-profile.tpl.php в самом начале вставил
.tabs ul {
display:none;
}
</style>
Таб исчез на странице профиля.
Ну да, покопался чуть-чуть в коде, так и есть. Там этот момент немного через задницу сделан. Уж не знаю, есть ли спец. модули для таких вещей, мне они неизвестны.
Таб "Просмотр" исчезнет, как вы понимаете, если скрыть все остальные табы, из которых остается только "Редактировать". Конечно, менять исходный код друпала - плохое решение (хотя прятать редактирование профиля тоже не очень хорошо). Но в общем - попробуйте найти в user.module access-функцию user_edit_access и заставьте ее возвращать FALSE всегда кроме админского аккаунта. Должно помочь.
Хорошо, там и ковырялся. Теперь продолжу с Вашим напутствием
Обязательно отпишусь! )
да, все здорово! Еще раз спасибо
Это переменная $tabs (в page.tpl.php). Просто не отображайте её в теме на странице юзера.
не получается, где не прав?
в теле блока висит
global $user;
$message2 .= t('мой код');
echo '<center>' .$message2, '</center>'; }
else {
echo '';
} ?>
а в установке видимости страниц ввожу
global $user;
return (((arg() == 'user') && ($user->uid != 0)) || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>
users/*
profile/*
в итоге на странице регистрации все равно видно поле с кнопками
Странно.
Сейчас проверять нет времени. Попробуйте добавить проверку, чтобы arg(1) не равнялся 'register' или как-то так.
языка не знаю, поэтому как на php такую проверку сделать не представляю.. сейчас погуглю, может что получится
(( чего-то никак
Надо учить, иначе никак
с помощью сообщества и так подтягиваю кой-какие навыки и знания, но не все сразу выходит...
в данном случае проще было бы поставить галочку отображать конкретным ролям, но так не хочется к этому прибегать. Вот и рассчитываю на помощь.
попробовал так
global $user;
if ((arg(0) == 'user') && (arg(1) == 'register')) {
return FALSE;
}
return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>
users/*
profile/*
в этом случае на странице регистрации блока нет, но он есть на странице входа и "забыли пароль".
ух!
не знаю, через правильную ли Ж сделал, но в итоге вот так:
в теле блока висит
global $user;
if ($user->uid) {
$message2 .= t('мой код');
echo '<center>' .$message2, '</center>'; }
else {
echo '';
} }
?>
а в установке видимости страниц ввожу
global $user;
if ((arg(0) == 'user') && (arg(1) == 'register')) {
return FALSE;
}
return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>
users/*
profile/*
все вроде пока заработало как надо!
Странный код:
...
if ($account->uid == $user->uid) {
global $user;
...
Вы используете $user до его определения глобальным. То есть либо первая строчка не работает, либо вторая не нужна
Метод проб и ошибок...
Спасибо!
Ага, исчез он из вашего браузера.
hook_menu_alter() надо использовать
Если не нужны все ссылки профиля, можно воспользоваться hook_preprocess_page и удалить табы оттуда.
А как можно перенести эти кнопки в меню обычное?
проблему решил модуль "ме"