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





Комментарии