DGRAvatarHelper: Получаем глобальный аватар пользователя

Gravatar

Часто владельцы блогов устанавливают на свои сайты плагины для работы с сервисом Gravatar. Если кто не знает, то суть сервиса вот в чём: Любой человек может зарегистрироваться в сервисе, вписать свой email и привязать к нему аватарку. После привязки эта аватарка становится доступной всему миру с сервера Gravatar по идентификатору, легко высчитываемому по адресу электронной почты пользователя.

Что это даёт? Даёт то, что теперь все поддерживающие этот сервис сайты, на которых вы оставляете комментарии (указывая свой email) будут автоматически отображать в комментариях вашу аватарку.

Представляю небольшой класс-хэлпер для генерирования ссылки на изображение в сервисе gravatar.com:

/**
 * DGRavatarHelper.
 *
 * @author ElisDN <mail@elisdn.ru>
 * @link http://www.elisdn.ru
 */
class DGRavatarHelper
{
    const DEFAULT_GRAVATAR = '';
    const DEFAULT_404 = '404';
    const DEFAULT_MYSTERYMAN = 'mm';
    const DEFAULT_ABSTRACT = 'identicon';
    const DEFAULT_FACE = 'wavatar';
    const DEFAULT_MONSTER = 'monsterid';
    const DEFAULT_RETRO = 'retro';
    const DEFAULT_BLANK = 'blank';
 
    public static function get($email, $width=0, $default=self::DEFAULT_GRAVATAR)
    {
        $id = md5(strtolower(trim($email)));
        $default = '?d=' . urlencode($default);
        $width = $width ? '&amp;s=' . $width : '';
        return 'http://www.gravatar.com/avatar/' . $id . $default . $width;
    }
}

Обязательно при вызове функции нужно указать только email. Размер изображения указывается одним параметром, так как оно всегда возвращается квадратное. Изображение по умолчанию можно либо выбрать из имеющихся вариантов (заданы константами в классе), либо указать своё.

Примеры получения адреса аватарки по адресу электронной почты:

$email = 'mail@site.com'
 
// всё по умолчанию
$src = GRAvatarHelper::get($email);
 
// изображение 100x100 пикселей
$src = GRAvatarHelper::get($email, 100);
 
// получаем уникального монстрика, если сервис не найдёт такого пользователя
$src = GRAvatarHelper::get($email, 100, GRAvatarHelper::DEFAULT_MONSTER);
 
// указываем наше изображение по умолчанию
$src = GRAvatarHelper::get($email, 100, 'http://site.com/defaultavatar.png');
 
echo CHtml::image($src);

В модели Yii:

// Модель:
class User extends Model
{
    const FILE_PATH = 'upload/avatars';
 
    // ...
 
    public static function getAvatarUrl()
    {
        if ($this->avatar){
            return Yii::app()->request->baseUrl . '/' . self::FILE_PATH . '/' . $this->avatar;
        } else {
            return GRAvatarHelper::get($this->email);
        };
    }
}
 
// Представление:
<img src="<?php echo $user->avatarUrl; ?>" alt="<?php echo $user->name; ?>" />
Другие статьи

В одном из проектов потребовалось ввести в форму изменения профиля пользователя поле «Введите текущий пароль». Сначала был быстро сделан валидирующий метод в самой модели пользователя. В последующем для повторного использования в разных проектах было решено написать полноценный внешний валидатор.

Достаточно часто на тематических форумах по Yii встречаются вопросы новичков о организации хранения паролей пользователей в модели User. Вопрос звучит примерно так: «У меня в модели User есть поле password, в котором я храню хэш пароля. Как мне сделать так, чтобы пароль не перезаписывался при каждом сохранении модели?» Вопрос любопытный и для других фреймворков.

В Yii полезно использовать кеширование не только SQL-запросов, но и HTML-фрагментов страницы. Очень удобно то, что можно обрамить кеширующим блоком вызов любого более-менее статичного виджета в представлении или лэйауте чтобы он не пересобирался каждый раз заново. Но при этом возникает необходимость в придумывании для каждого фрагмента уникального ключа, по которому он будет записан в кэше.

В полудрёме на мягком диване, попивая свежевыжатый сок, вы зашли на нужный вам сайт. Окинули взглядом страницу, щелкнули по нужной ссылке, получили то, что желали и закрыли браузер. Вам кажется, что ничего особенного не произошло за эти несколько секунд, но, оказывается, это не так. Не всё так просто.

Комментарии

 

Dmitry

Спасибо то, что нужно! и на много удобнее екстеншина что есть на офф. сайте!

Ответить

 

Антон

Да, интересно. Одна из лучших реализаций, но пока не самая универсальная.

Ответить

Оставить комментарий

Войти | Завести аккаунт


(никто не увидит)



Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>