В профиле пользователя нужно вывести его роль на сайте

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

Комментарии

Аватар пользователя UHSF UHSF 21 апреля 2010 в 18:58

Я вот тоже захотел вывести роль пользователя в его профиле.
Неужеле нельзя как-нибудь сделать без самописных запросов к БД и сниппетов?

Как-то интересно, роли есть, а нигде на сайте не показываются... По крайней мере я не встречал кроме как в административном разделе...

Аватар пользователя olk olk 22 апреля 2010 в 12:04

В файле template.php вашей темы.

function имя_вашей_темы_preprocess_user_profile(&$variables){
  $items = array();
  foreach($variables['account']->roles as $key => $value) {
  // получаем в массив список ролей пользователя
  // (кроме стандартных анонимуса и авторизованного пользователя)
   if ($key > 2) {
    $items[] = $value;
   }
  }
  // если роли присутствуют, то добавляем их в вывод
  if (count($items)) {
  $variables['user_profile'] .= '<h3>Роли пользователя</h3><dl class="user-roles"><dd>' . theme('item_list',$items) .'</dd></dl>';
  }

}

В данном случае вывод будет осуществлен в конце. Можно вывести и в начале, например так:

  $variables['user_profile'] = '<h3>Роли пользователя</h3><dl class="user-roles"><dd>' . theme('item_list',$items) .'</dd></dl>' .   $variables['user_profile'];

Оригинал заметки здесь Как показать в профиле пользователя его роли

Аватар пользователя UHSF UHSF 22 апреля 2010 в 19:22

Я понял что надо в template.php вставить. А куда именно?
Я пробывал в конец кода вставить-выдало ошибку:
[a fatal error or timeout occurred while processing this directive]

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 22 апреля 2010 в 19:40

А *название марки* хороший автомобиль?
У хостера кроме названия ещё куча видимых и невидимых характеристик
Вам Azerot в вашем топике объяснял природу вашей ошибки.

Аватар пользователя UHSF UHSF 23 апреля 2010 в 20:05

Ага!
Я попробывал поменять права доступа template.php с 0444 на 0755 - изменения теперь сохранились без этой ошибки!
Только нет ничего нового в профиле.(

Аватар пользователя olk olk 10 ноября 2015 в 11:46

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

Аватар пользователя UHSF UHSF 24 апреля 2010 в 18:34

Вот, допустим, у меня в профиле ничего нового не появилось.
Я добавил ваш код в файл template.php в самый конец и сохранил. Поставил права доступа обратно на 0444.
Может что-то ещё надо было сделать?

Аватар пользователя UHSF UHSF 24 апреля 2010 в 19:19

olk , сбросил кэш-заработало.
Теперь проблема с кодировкой:

Как подправить можно?
У меня с кодировкой всегда чудеса творяться...

Аватар пользователя Dan Dan 24 апреля 2010 в 20:45

Кодировка должна быть UTF8.
Корректнее код сделать так:

function имя_вашей_темы_preprocess_user_profile(&$variables){
  $items = array();
  foreach($variables['account']->roles as $key => $value) {
  // получаем в массив список ролей пользователя
  // (кроме стандартных анонимуса и авторизованного пользователя)
   if ($key > 2) {
    $items[] = $value;
   }
  }
  // если роли присутствуют, то добавляем их в вывод
  if (count($items)) {
    $variables['user_profile'] .= '<h3>'.t('User roles').'</h3><dl class="user-roles"><dd>' . theme('item_list',$items) .'</dd></dl>';
  }
}

И переводить через админку.

Аватар пользователя kakawajazz kakawajazz 23 декабря 2011 в 3:21

Добавил в template.tpl функцию, сбросил кэш и кэш регистра тем, но всё равно получаю

Notice: Undefined index: account в функции bartik_preprocess_user_profile() (строка 156 в файле /home/xxx/www/site.ru/dev/themes/bartik/template.php).
Notice: Trying to get property of non-object в функции bartik_preprocess_user_profile() (строка 156 в файле /home/xxx/www/site.ru/dev/themes/bartik/template.php).
Warning: Invalid argument supplied for foreach() в функции bartik_preprocess_user_profile() (строка 156 в файле /home/xxx/www/site.ru/dev/themes/bartik/template.php).

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

Аватар пользователя Dan Dan 23 декабря 2011 в 18:57

"kakawajazz" wrote:
Добавил в template.tpl функцию, сбросил кэш и кэш регистра тем, но всё равно получаю

Рецепт для Drupal6, а у вас, судя по всему - 7-ка.

Аватар пользователя kakawajazz kakawajazz 23 декабря 2011 в 19:25

Точно, извините. Просто я тот пост olk'а нагуглил по запросу, содержащему "drupal 7"
Для семерки бывает что-нибудь подобное?

Аватар пользователя Dan Dan 25 декабря 2011 в 23:55

Ну дык, посмотрите содержимое $variables
А вообще, надо иногда заглядывать в исходники и/или читать документацию. По ней видно, что теперь вместо $variables['account'] - $variables['elements']['#account'].