function имя_вашей_темы_preprocess_user_profile(&$variables){ $items = array(); foreach($variables['account']->rolesas$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>'; }
}
В данном случае вывод будет осуществлен в конце. Можно вывести и в начале, например так:
Я понял что надо в template.php вставить. А куда именно?
Я пробывал в конец кода вставить-выдало ошибку: [a fatal error or timeout occurred while processing this directive]
А *название марки* хороший автомобиль?
У хостера кроме названия ещё куча видимых и невидимых характеристик
Вам Azerot в вашем топике объяснял природу вашей ошибки.
Ага!
Я попробывал поменять права доступа template.php с 0444 на 0755 - изменения теперь сохранились без этой ошибки!
Только нет ничего нового в профиле.(
Во первых у пользователя должна быть роль отличная от анонимуса и просто авторизованного пользователя,
Во вторых, кэш регистра тем желательно сбросить.
В третьих, я очень редко даю не проверенные решения
Вот, допустим, у меня в профиле ничего нового не появилось.
Я добавил ваш код в файл template.php в самый конец и сохранил. Поставил права доступа обратно на 0444.
Может что-то ещё надо было сделать?
Кодировка должна быть UTF8.
Корректнее код сделать так:
function имя_вашей_темы_preprocess_user_profile(&$variables){ $items = array(); foreach($variables['account']->rolesas$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>'; } }
Добавил в 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).
глаза уже красные, что делать - не знаю. Помогите, пожалуйста.
Ну дык, посмотрите содержимое $variables
А вообще, надо иногда заглядывать в исходники и/или читать документацию. По ней видно, что теперь вместо $variables['account'] - $variables['elements']['#account'].
Комментарии
написать запрос в базу, сделать сниппет и сунуть его в блок, блок показывать только на странице юзвера
Есть что-то попроще?
Попросить или подождать пока напишут
Я вот тоже захотел вывести роль пользователя в его профиле.
Неужеле нельзя как-нибудь сделать без самописных запросов к БД и сниппетов?
Как-то интересно, роли есть, а нигде на сайте не показываются... По крайней мере я не встречал кроме как в административном разделе...
В файле template.php вашей темы.
$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>';
}
}
В данном случае вывод будет осуществлен в конце. Можно вывести и в начале, например так:
Оригинал заметки здесь Как показать в профиле пользователя его роли
olk , спасибо!!!
А в какое место вставить этот код?
Но вы можете придумать более экзотические места
Я понял что надо в template.php вставить. А куда именно?
Я пробывал в конец кода вставить-выдало ошибку:
[a fatal error or timeout occurred while processing this directive]
Вы с этой ошибкой уже обращались за помощью
Да, но я её так сам и не решил. Она сама убралась.
Отсюда какой вывод?
Код не особо и виноват
Что же мне, получается, ждать чуда?
Нет, достаточно найти нормального хостера
Агава разве не нормальный хостер?
А *название марки* хороший автомобиль?
У хостера кроме названия ещё куча видимых и невидимых характеристик
Вам Azerot в вашем топике объяснял природу вашей ошибки.
RxB , спасибо за советы!!!
Будем думать.
Как вы думаете, может стоит задать вопрос хостеру?
Почему это происходит.
Получите ответ, что используете криво-написанный и неоптимизированный скрипт
Ага!
Я попробывал поменять права доступа template.php с 0444 на 0755 - изменения теперь сохранились без этой ошибки!
Только нет ничего нового в профиле.(
olk , ничего не выводится в профилях пользователей после вставки того кода.
Во первых у пользователя должна быть роль отличная от анонимуса и просто авторизованного пользователя,
Во вторых, кэш регистра тем желательно сбросить.
В третьих, я очень редко даю не проверенные решения
Вот, допустим, у меня в профиле ничего нового не появилось.
Я добавил ваш код в файл template.php в самый конец и сохранил. Поставил права доступа обратно на 0444.
Может что-то ещё надо было сделать?
olk , сбросил кэш-заработало.
Теперь проблема с кодировкой:
Как подправить можно?
У меня с кодировкой всегда чудеса творяться...
Кодировка должна быть UTF8.
Корректнее код сделать так:
$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>';
}
}
И переводить через админку.
Что-то не получается вверху вывести(
olk и Dan, спасибо за помощь!!!
не получается вывести. кэшь сбрасываю... все как надо вставил в файл...
Добавил в 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).
глаза уже красные, что делать - не знаю. Помогите, пожалуйста.
Рецепт для Drupal6, а у вас, судя по всему - 7-ка.
Точно, извините. Просто я тот пост olk'а нагуглил по запросу, содержащему "drupal 7"
Для семерки бывает что-нибудь подобное?
Ну дык, посмотрите содержимое $variables
А вообще, надо иногда заглядывать в исходники и/или читать документацию. По ней видно, что теперь вместо $variables['account'] - $variables['elements']['#account'].