Как вы понимаете, сегодня будем решать довольно тривиальную задачу, которая в последнее время становится все более актуальной, а именно будем выводить аватар пользователя (поле из профиля пользователя) на страницу сайта (шаблон page.tpl.php). По умолчанию, drupal предоставляет при регистрации загружать аватар и выбрать для него «стиль изображения», но на этом все его настройки и заканчиваются, а что делать если нам необходимо в профиле пользователя показать допустим изображение с размерами 200px на 200px, а на странице сайта допустим 30px на 30px? Естественно есть ряд решений:
- Воспользоваться средствами CSS – решение имеет место быть, но зачем нагружать сайт загрузкой изображения с размерами 200px на 200px, да еще и к тому же, что великий и могучий IE в любой его версии очень криво сжимает изображение до указанных значений.
- Воспользовать модулем views – как бы я не любил этот модуль, но и у него есть свой недостаток на мой взгляд. Да он может изменить выводимое изображение самостоятельно и пропустить его через любой стиль изображения, но под него, как правило, необходимо вывести дополнительный регион в шаблоне, хотя на самом деле это и не такое плохое решение, особенно если просто воспользоваться сниппетом для вывода:
<?php views_embed_view();?>
то можно обойтись и без региона, но данное средство не является универсальным, хотя бы потому, что вдруг вы решите выложить свой шаблон на drupal.org – то всё ваше решение с views сойдёт на нет.
Всё хватит рассуждений, теперь расскажу какое решение я использую в своих проектах для решения этой задачи. Сначала определимся с исходными данными, у нас загружен аватар и пропускается по умолчанию через указанный стиль изображения (medium). В моём случае это выглядит вот так:

Так же у меня уже загружен аватар,

И есть стиль изображения, который мы будем использовать при выводе аватара пользователя на страницу:

Как вы можете заметить, название нашего стиля – ava_user_page.
С исходными данными определились, теперь займёмся выводом. В качестве подопытного шаблона я использую стандартный шаблон Bartik. Открываем файл
page.tpl.php
И используем следующий код, в том месте где вам необходимо вывести аватар, я его выведу в шапке сайта:
<?php $filepath = $user->picture->uri; $user_picture = theme('image_style', array('style_name' => 'ava_user_page', 'path' => $filepath, 'alt' => 'аватар пользователя ' .$user->name, 'title' => 'пользователь ' .$user->name)); //не забудьте поменять на свой стиль изображения print '<div class="user-picture">' .$user_picture .'</div>'; ?>
В результате чего мы получим вот такую картину:

Всё бы хорошо, но есть костыль, для анонимов мы получим ошибку, исправим эту проблему, просто допишем проверку на залогиность пользователя:
<?php if($logged_in == TRUE){ $filepath = $user->picture->uri; $user_picture = theme('image_style', array('style_name' => 'ava_user_page', 'path' => $filepath, 'alt' => 'аватар пользователя ' .$user->name, 'title' => 'пользователь ' .$user->name)); print '<div class="user-picture">' .$user_picture .'</div>'; };?>
В результате для зарегистрированного пользователя у нас будет выводится его аватар, а для анонимного ничего. Теперь возникает другая проблема, ели аватар для зарегистрированного пользователя не загружен, то появится ошибка, давайте теперь и ее исправим. Для каждого загруженного изображения есть свой числовой id, соответственно если id нет (т.е возвращает FALSE), это значит и изображения нет, допишем и эту проверку
<?php if($logged_in == TRUE){ $filepath = $user->picture->uri; $user_picture = theme('image_style', array('style_name' => 'ava_user_page', 'path' => $filepath, 'alt' => 'аватар пользователя ' .$user->name, 'title' => 'пользователь ' .$user->name)); print '<div class="user-picture">' .$user_picture .'</div>'; } };?>
В результате такого небольшого сниппета, мы получили именно ту функциональность, которая была нам необходимо. Теперь для зарегистрированного пользователя который загрузил аватар у нас будет выводится его аватар на страницу с пропуском через указанный стиль изображения, а для пользователей которые зарегистрированы и не загрузили свой аватар, а так же для анонимных пользователей мы показывать ничего не будем. На этом думаю всё.
Комментарии (8)
Здравствуй, а как подобным способом вывести аватар не текушего пользователя, а автора (в моем случае автора комментария)
Это зависит от того, в каком файле вы собираетесь это делать. В comment.tpl.php ? То для комментариев и так можно без снипетов пропускать изображение через стиль, через админку сайта.
Да в comment.tpl.php, но и не только(также в нодах, для вывода аватара автора), на данный момент для этого использую модуль ImageCache Profiles
З.Ы. а где можно задать через админку?
А какую роль выполняет код:
?
пропускает аватар пользователя, через указанный image style, но здесь он действительно лишний.
Павел, этот код нужный. Без него не работает. Без него в свойстве $user->picture будет только id картинки, а нужный путь до картинки будет отсутствовать. Сейчас проверил опытным путём.
точно, дальше не посмотрел код
Благодарю