[Решено] Кнопки в профиле пользователя

Прислано: 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 '';
} ?>

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано graker в пт, 11/12/2009 - 14:12.

Насчет блоков: попробуйте выводить прямо в блок $account->uid и $user->uid.
А вообще в настройке блока есть вариант "показывать если PHP-код возвращает TRUE", попробуйте туда вставить примерно это:

<?php
  global $user;
  return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>

Что касается MENU_LOCAL_TASK, не совсем ясно, в чем ваш вопрос.


Опубликовано lopata24 в пт, 11/12/2009 - 14:50.

Отлично, все работает ))
теперь вторая загвоздка. Как убрать обычное меню, которое выводится на странице пользователя?

заранее спасибо!


Опубликовано graker в пт, 11/12/2009 - 15:56.

lopata24 написал(а):

Как убрать обычное меню, которое выводится на странице пользователя?

Если речь все еще про локалтаски, то лучше всего наверное просто запретить пользователям доступ к тем действиям, которые отражают локалтаски.


Опубликовано lopata24 в пт, 11/12/2009 - 19:06.

речь идет о них, но там при запрете всего лишнего все равно остается кнопка просмотра и редактирования своего профиля. Вот их бы как-то убрать...


Опубликовано graker в пт, 11/12/2009 - 19:55.

Ну да, покопался чуть-чуть в коде, так и есть. Там этот момент немного через задницу сделан. Уж не знаю, есть ли спец. модули для таких вещей, мне они неизвестны.

Таб "Просмотр" исчезнет, как вы понимаете, если скрыть все остальные табы, из которых остается только "Редактировать". Конечно, менять исходный код друпала - плохое решение (хотя прятать редактирование профиля тоже не очень хорошо). Но в общем - попробуйте найти в user.module access-функцию user_edit_access и заставьте ее возвращать FALSE всегда кроме админского аккаунта. Должно помочь.


Опубликовано lopata24 в пт, 11/12/2009 - 20:17.

Хорошо, там и ковырялся. Теперь продолжу с Вашим напутствием ;-)
Обязательно отпишусь! )


Опубликовано lopata24 в пт, 11/12/2009 - 21:50.

да, все здорово! Еще раз спасибо ;-)


Опубликовано Dan в сб, 12/12/2009 - 16:20.

Это переменная $tabs (в page.tpl.php). Просто не отображайте её в теме на странице юзера.


Опубликовано lopata24 в ср, 23/12/2009 - 22:06.

graker написал(а):

Насчет блоков: попробуйте выводить прямо в блок $account->uid и $user->uid.
А вообще в настройке блока есть вариант "показывать если PHP-код возвращает TRUE", попробуйте туда вставить примерно это:

<?php
  global $user;
  return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
?>

На странице регистрации эти кнопки тоже отображаются? Есть ли возможность апгрейда вышеупомянтуго кода, чтобы при регистрации кнопок видно не было?


Опубликовано graker в чт, 24/12/2009 - 05:21.

Ну это совсем просто :)

  global $user;
  return (((arg() == 'user') && ($user->uid != 0)) || ((arg(0) == 'user') && (arg(1) == $user->uid)));


Опубликовано lopata24 в чт, 24/12/2009 - 08:17.

не получается, где не прав?
в теле блока висит

<?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/*

в итоге на странице регистрации все равно видно поле с кнопками


Опубликовано graker в чт, 24/12/2009 - 08:49.

Странно.
Сейчас проверять нет времени. Попробуйте добавить проверку, чтобы arg(1) не равнялся 'register' или как-то так.


Опубликовано lopata24 в чт, 24/12/2009 - 08:51.

языка не знаю, поэтому как на php такую проверку сделать не представляю.. сейчас погуглю, может что получится


Опубликовано lopata24 в чт, 24/12/2009 - 09:06.

(( чего-то никак


Опубликовано graker в чт, 24/12/2009 - 09:30.

Надо учить, иначе никак :)


Опубликовано lopata24 в чт, 24/12/2009 - 09:38.

с помощью сообщества и так подтягиваю кой-какие навыки и знания, но не все сразу выходит...

в данном случае проще было бы поставить галочку отображать конкретным ролям, но так не хочется к этому прибегать. Вот и рассчитываю на помощь.


Опубликовано lopata24 в пт, 25/12/2009 - 08:52.

попробовал так

<?php
  global $user;
if ((arg(0) == 'user') && (arg(1) == 'register')) {
  return FALSE;
}
  return ((arg() == 'user') || ((arg(0) == 'user') && (arg(1) == $user->uid)));
 
?>
users/*
profile/*

в этом случае на странице регистрации блока нет, но он есть на странице входа и "забыли пароль".


Опубликовано lopata24 в пт, 25/12/2009 - 09:49.

ух!
не знаю, через правильную ли Ж сделал, но в итоге вот так:
в теле блока висит

<?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/*

все вроде пока заработало как надо!


Опубликовано Dan в пт, 25/12/2009 - 10:22.

Странный код:
...
if ($account->uid == $user->uid) {
global $user;
...
Вы используете $user до его определения глобальным. То есть либо первая строчка не работает, либо вторая не нужна :)


Опубликовано lopata24 в пт, 25/12/2009 - 10:51.

Метод проб и ошибок...

Спасибо! ;-)


Опубликовано wargan в пт, 19/03/2010 - 23:26.

lopata24 написал(а):

речь идет о них, но там при запрете всего лишнего все равно остается кнопка просмотра и редактирования своего профиля. Вот их бы как-то убрать...

в user-profile.tpl.php в самом начале вставил

<style type="text/css">
.tabs ul {
display:none;
}
</style>

Таб исчез на странице профиля.


Опубликовано RxB в пт, 19/03/2010 - 23:31.

"wargan" написал(а):

Таб исчез на странице профиля.

Ага, исчез он из вашего браузера.
hook_menu_alter() надо использовать


Опубликовано Dan в пт, 19/03/2010 - 23:33.

Если не нужны все ссылки профиля, можно воспользоваться hook_preprocess_page и удалить табы оттуда.


Опубликовано Enemy в ср, 04/08/2010 - 18:38.

А как можно перенести эти кнопки в меню обычное?


Опубликовано Dan в чт, 05/08/2010 - 04:34.

"Enemy" написал(а):

А как можно перенести эти кнопки в меню обычное?

"RxB" написал(а):

hook_menu_alter() надо использовать


Опубликовано Enemy в чт, 05/08/2010 - 08:57.

проблему решил модуль "ме"


Новое на сайте

Ссылки партнёров