Иногда бывает необходимо что бы при выводе материалов и комментариев размер (а возможно и вид) автарки отличался от размеров заданных в профиле пользователя.
Одно из решений — использовать модуль image с его пресетами.
Добавляем (или редактируем если он уже есть) файл theme-settings.php в каталоге вашей темы.
function Ваша_тема_form_system_theme_settings_alter(&$form, $form_state)
, то нижеприведенный код добавляем в данную функцию, иначе добавляем саму функцию.
/**
* file
* theme-settings.php
*/
function Ваша_тема_form_system_theme_settings_alter(&$form, $form_state){
if(module_exists('image')) {
$options = image_style_options();
$form['node_avatar_style'] = array(
'#type' => 'select',
'#title' => t('Node avatar style'),
'#default_value' => theme_get_setting('node_avatar_style'),
'#options' => $options,
);
$form['comment_avatar_style'] = array(
'#type' => 'select',
'#title' => t('Comment avatar style'),
'#default_value' => theme_get_setting('comment_avatar_style'),
'#options' => $options,
);
}
return $form;
}
?>
Далее идем в настройки темы (admin/appearance/settings/Ваша_тема)
И выбираем нужный пресет для нод и комментариев (предварительно можно создать нужные пресеты используя всю мощь модуля image (также советую дополнительно установить модуль imagecache_actions), хоть он и дев версии, но некоторые эффекты уже работают).
Следующий этап задействовать данные пресеты для вывода аватары в материалах и/или комментариях.
Для этого открываем файл template.php вашей темы (если его нет то создаем данный файл в корне вашей темы) и добавляем в него две препроцесс функции, которые и будут отвечать за вывод аватарки.
function Ваша_тема_preprocess_node(&$vars) {
$style = theme_get_setting('node_avatar_style');
$node = $vars['elements']['#node'];
$attributes = array();
$uri = (is_object($node->picture) && $node->picture)? $node->picture->uri : variable_get('user_picture_default', '');
if (module_exists('image') && $uri) {
$picture = theme_get_setting('toggle_node_user_picture') ? theme('image_style', array('style_name'=>$style,'path'=>$uri)) : '';
if ($picture) {
if(user_access('access user profiles') && !empty($node->uid)) {
$attributes = array(
'attributes' => array('title' => t('View user profile.')),
'html' => TRUE,
);
$vars['picture'] = l($picture,"user/$node->uid",$attributes);
}
else {
$vars['picture'] = $picture;
}
}
}
}
function Ваша_тема_preprocess_comment(&$vars) {
$style = theme_get_setting('comment_avatar_style');
$comment = $vars['elements']['#comment'];
$attributes = array();
$uri = (is_object($comment->picture) && $comment->picture)?$comment->picture->uri : variable_get('user_picture_default', '');
if (module_exists('image') && $uri) {
$picture = theme_get_setting('toggle_comment_user_picture') ? theme('image_style', array('style_name'=>$style,'path'=>$uri)) : '';
if ($picture) {
if(user_access('access user profiles') && !empty($comment->uid)) {
$attributes = array(
'attributes' => array('title' => t('View user profile.')),
'html' => TRUE,
);
$vars['picture'] = l($picture,"user/$comment->uid",$attributes);
}
else {
$vars['picture'] = $picture;
}
}
}
}
?>
Вот и все, сбрасываем кэш и смотрим результат.
Дополнение:
Если вы используете аватарку по умолчанию в настройках профиля пользователя, то указывайте путь как drupal uri, а не как path.
Т.е. например:
Общедоступный путь файловой системы: sites/default/files
Метод загрузки по умолчанию: Открытый — передачей файлов управляет веб-сервер
Вы закачали аватар по умолчанию в директорию sites/default/files/anonim.png
то в настройках профиля в качестве пути к аватару по умолчанию нужно указать
public://anonim.png
В таком случае будут корректно использоваться все установленные пресеты, как в профиле пользователя так и в нодах и комментариях.
Оригинал статьи на www.hotel-prog.ru
Комментарии
Использую для уменьшения размеров аватаров, вводимых через Views, модуль Imagecache profiles (использую для D6, но он есть и для D7).
Но в таком варианте заголовок (title) ссылки изображения аватар обрезается: вместо "Информация о пользователе ИмяПользователя", выводится просто "Информация о пользователе" (без его имени), что не хорошо.
Еще бы можно было добавлять к аватарам поле заголовка, как в imagedield, вообще было бы прекрасно.
Подскажите пожалуйста
Для профилей использую Content Profile
Фотки юзеры загружают с помощью CCK imagefield
Вопрос: как на форуме (использую адвансед форум), в комментах ну и вобщем кругом на сайте выводить вместо стандартного аватар выводить фото с профиля CCK imagefield
Спасибо большое за помощь!
Полезно, но все-таки, чем хуже просто прописать класс в стилях типа img {width:30px;}?
Есть же https://drupal.org/project/imagecache_profiles