Уменьшить аватару в сообщениях

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

Аватар пользователя gestapo gestapo 24 апреля 2008 в 0:37

Доброй ночи товарищи разработчики.
Сталкнулся со следующей проблемой:
На модулях Диг все ок, сейчас не работаю с дигом но реализую что-то на подобии без этого модуля.
Проблема в следующем:
У меня в темплейте опция добовлять пользовательские аватакрки в сообщения, выглядит это так:

А мне требуеться чтобы моя аватара была вот такой, тоесть при просмотре сообщения аватара с нормального размера в моем случаи 100 на 100 пикселей сжималась и неторчала на пол экрана оброзно говоря.

Подскажите как реализовать??

Через CSS прописывал классом
.picture {
width:10px;
hight:10px;
}

зжатия нет..

Зарание спасибо и низкий поклон ребятам которые помогут! Я надеюсь на содействие.

Хочу добавить в node.tpl.php это

<?php print $picture?>

Комментарии

Аватар пользователя neochief neochief 24 апреля 2008 в 2:19

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

Первое - переопределение вывода самой картинки:

// mytheme - название вашей темы
//(phptemplate_* не катит, потому что уже был определен в движке)

function mytheme_user_picture($account,$iconsize = FALSE) {
    // загружаем данные юзера
    $user = user_load(array('uid' => $account->uid));
    if ($iconsize)
    {
      // если у юзера есть аватарка
      if ($user->picture && file_exists($user->picture)) {
        $picture = '<span class="border">'.theme('imagecache', 'avatar-'.$iconsize, $user->picture).'</span>';
      }
      else
      {
        // если - нет, и это женщина, показывать женский-аватар-по-умолчанию
        if ($user->profile_personal=='женский')
          $picture = '<span class="border">'.theme('imagecache', 'avatar-'.$iconsize, 'files/pictures/user_female.gif').'</span>';
        // во всех остальных случаях - мужской
        else
          $picture = '<span class="border">'.theme('imagecache', 'avatar-'.$iconsize, 'files/pictures/user_male.gif').'</span>';
      }
      return $picture;
    }
    else return "";
}

Второе, переопределение вывода имени юзера.
Функция почти что стандартная за исключением параметра $iconsize (который также есть и в функции сверху). Так как у этого параметра есть значение по-умолчанию, функция не будет вылетать от стандартных вызовов, и приобретет большую гибкость при вызовах с этим параметром.

// Темизация имени юзера
function phptemplate_username($object, $iconsize = 'mini') {
  $presets = array();
  if (module_exists('imagecache'))
    $presets = _imagecache_get_presets();
  if (!in_array('avatar-'.$iconsize,$presets))
    $iconsize = FALSE;

  if ($object->uid && $object->name) {
    // Shorten the name when it is too long or it will break many tables.
    if (drupal_strlen($object->name) > 20)
      $name = drupal_substr($object->name, 0, 15) .'...';
    else
      $name = $object->name;

    if (user_access('access user profiles')) {
      $output = l($name, 'user/'. $object->uid, array('class'=>'aname'.$user_class,'title' => t('View user profile.')));
      if ($iconsize) {
        $picture = theme('user_picture',$object,$iconsize);
        $output  = '<div class="avatar'.$iconsize.'">'.l($picture, 'user/'. $object->uid, array('class'=>'apicture'.$user_class,'title' => t('View user profile.')), NULL, NULL, FALSE, TRUE).$output.'</div>';
      }
    }
    else
        $output = check_plain($name);
  }
  else if ($object->name) {
    // Sometimes modules display content composed by people who are
    // not registered members of the site (e.g. mailing list or news
    // aggregator modules). This clause enables modules to display
    // the true author of the content.
    if ($object->homepage) {
      $output = l($object->name, $object->homepage, array('class'=>'authorlink', 'rel' => t('nofollow')));
    }
    else
      $output = '<span class="authorlink">'.check_plain($object->name).'</span>';
  }
  else
    $output = '<span class="authorlink">'.variable_get('anonymous', t('Anonymous')).'</span>';
  return $output;
}

Теперь, по всему сайту, имена юзеров будут с мелкой картинкой ($iconsize = 'mini'), примерно вот так:

Но! Это еще не все, впереди самое интересное. Теперь, в нужном месте шалона, когда нам надо выводить юзернейм с картинкой другого размера, мы пишем такое:

и оно выведет примерно такое:

А дальше все зависит от вашей фантазии - можно пихать юзернеймы под аватарки, или делать в комментах аватарки огромных размеров и т.д.

P.S. В данном примере, в админке, в настройках Imagecache должны быть созданы пресеты с названиями 'avatar-medium' и 'avatar-mini', которые обрезают рисунки в 32*32 и 16*16 соотвественно. Конечно же, вы можете менять размеры рисунков по своему усмотрению, но пресеты должны называться avatar-*, где * - это название, которое вы пихаете в theme('user_picture',$user,...сюда....)

Аватар пользователя Empiric Empiric 24 апреля 2008 в 2:18

А косательно кода
.picture {
width:10px;
hight:10px;
}

зжатия нет..

Во-первых не hight, a height, а во вторых - это вы задаете размер блоку вокруг картнки, а не самой картинке. Обращайтесь к картинке -
.picture img{} - и будет все у вас работать.