Изменяем размер аватар в нодах и комментариях

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

Аватар пользователя olk olk 4 апреля 2012 в 14:24


Иногда бывает необходимо что бы при выводе материалов и комментариев размер (а возможно и вид) автарки отличался от размеров заданных в профиле пользователя.
Одно из решений — использовать модуль 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;
}
}
}
}

?>
Вот и все, сбрасываем кэш и смотрим результат.
Если функции с данными именами существуют, то надо в них добавить код из тела функции, обращая внимание на то, как называется параметр функции $vars в вашей функции.

Дополнение:
Если вы используете аватарку по умолчанию в настройках профиля пользователя, то указывайте путь как drupal uri, а не как path.
Т.е. например:
Общедоступный путь файловой системы: sites/default/files
Метод загрузки по умолчанию: Открытый — передачей файлов управляет веб-сервер
Вы закачали аватар по умолчанию в директорию sites/default/files/anonim.png
то в настройках профиля в качестве пути к аватару по умолчанию нужно указать
public://anonim.png
В таком случае будут корректно использоваться все установленные пресеты, как в профиле пользователя так и в нодах и комментариях.

Оригинал статьи на www.hotel-prog.ru

Комментарии

Аватар пользователя Antoniy Antoniy 28 апреля 2012 в 8:27

Использую для уменьшения размеров аватаров, вводимых через Views, модуль Imagecache profiles (использую для D6, но он есть и для D7).

Но в таком варианте заголовок (title) ссылки изображения аватар обрезается: вместо "Информация о пользователе ИмяПользователя", выводится просто "Информация о пользователе" (без его имени), что не хорошо.

Еще бы можно было добавлять к аватарам поле заголовка, как в imagedield, вообще было бы прекрасно.

Аватар пользователя Супрун Иван Супрун Иван 21 июля 2012 в 20:51

Подскажите пожалуйста
Для профилей использую Content Profile
Фотки юзеры загружают с помощью CCK imagefield

Вопрос: как на форуме (использую адвансед форум), в комментах ну и вобщем кругом на сайте выводить вместо стандартного аватар выводить фото с профиля CCK imagefield
Спасибо большое за помощь!