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

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

Аватар пользователя lopata24 lopata24 11 декабря 2009 в 15: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 graker 11 декабря 2009 в 17:12

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

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

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

Аватар пользователя lopata24 lopata24 24 декабря 2009 в 1:06

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

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


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

Аватар пользователя lopata24 lopata24 11 декабря 2009 в 17:50

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

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

Аватар пользователя graker graker 11 декабря 2009 в 18:56

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

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

Аватар пользователя lopata24 lopata24 11 декабря 2009 в 22:06

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

Аватар пользователя wargan wargan 20 марта 2010 в 2:26

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

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

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

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

Аватар пользователя graker graker 11 декабря 2009 в 22:55

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

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

Аватар пользователя lopata24 lopata24 24 декабря 2009 в 11: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 graker 24 декабря 2009 в 11:49

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

Аватар пользователя lopata24 lopata24 24 декабря 2009 в 11:51

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

Аватар пользователя lopata24 lopata24 24 декабря 2009 в 12:38

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

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

Аватар пользователя lopata24 lopata24 25 декабря 2009 в 11: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 lopata24 25 декабря 2009 в 12: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 Dan 25 декабря 2009 в 13:22

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

Аватар пользователя Dan Dan 5 августа 2010 в 8:34

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

"RxB" wrote:
hook_menu_alter() надо использовать