#244 Gravatar
- Download:
- source codeProject Files in Zip (93.9 KB)
- mp4Full Size H.264 Video (14.2 MB)
- m4vSmaller H.264 Video (7.48 MB)
- webmFull Size VP8 Video (14.9 MB)
- ogvFull Size Theora Video (17.7 MB)
Аватарки играют большую роль для современных сайтов, особенно для социальных. Если вы хотите добавить картинки аватаров в один из ваших проектов, вы можете использовать Gravatar, который предоставляет удобный способ это сделать. Все что вам нужно - это знать email адрес каждого пользователя. И никаких загрузок картинок, подгонки, обрезания до нужного размера и так далее. Просто передаем email адрес и получаем аватар.
В этом эпизоде мы добавим Gravatar в простое Rails приложение и свяжем с моделью User
.
У нас есть 3 пользователя, у каждого разный email. Страница index
показывает колонку avatar
в которой на месте "TODO" мы будем выводить Gravatar для каждого пользователя.
Есть множество плагинов для добавления Gravatar, но это на столько просто, что мы не будем их использовать. Начнем с того, что изменим код view, который выводит таблицу, на такой:
<% for user in @users %> <tr> <td>TODO</td> <td><%= user.email %></td> <td><%= link_to "Show", user %></td> <td><%= link_to "Edit", edit_user_path(user) %></td> <td><%= link_to "Destroy", user, :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %>
Мы должны заменить TODO в первой ячейке на image_tag
.
URL картинок мы получим с помошью хелпера, в котором мы вызовем avatar_url
и передадим аргумент user.
<% for user in @users %> <tr> <td><%= image_tag avatar_url(user) %></td> <td><%= user.email %></td> <td><%= link_to "Show", user %></td> <td><%= link_to "Edit", edit_user_path(user) %></td> <td><%= link_to "Destroy", user, :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %>
Далее мы напишим хелпер avatar_url
в классе ApplicationHelper
.
Самая сложная часть в нем генерирует id, который нужен gravatar.
Это MD5 хэш в нижнем регистре от email пользователя, так что это довольно просто.
module ApplicationHelper def avatar_url(user) gravatar_id = Digest::MD5::hexdigest(user.email).downcase "http://gravatar.com/avatar/#{gravatar_id}.png" end end
Когда мы перезагрузим страницу, мы увидем картинки аватаров для двух аккаунтов, которые отдал Gravatar. Для одного, выводится аватар по-умолчанию.
Настройка картинок Gravatar
Есть несколько параметров, которые мы можем передать в строке URL, чтобы настроить отдаваемые Gravatar'ом изображения. Дополнительную информацию можно почитать на сайте Gravatar. Например, передадим параметр, который изменит размер картинки аватара:
http://gravatar.com/avatar/9a295994737a47683a4da4ed47aef7dd.png?s=200
Опция d
может использоваться для замены аватара по-умолчанию, если не найден пользователь:
http://gravatar.com/avatar/84ce1adb94b67014236a909fa4c1269d.png?d=http%3A%2F%2Fasciicasts.com%2Fimages%2Frails.png
Мы так же можем передать опцию r
, для смены рейтинга и если наш сайт использует HTTPS,
тогда мы должны получать изображения безопасно, используя https://secure.gravatar.com/
в начале URL. Мы будем использовать пару из этих опций, чтобы изменить размер аватарки до 48 пикселей.
Это стандартный размер аватарок в Twitter.
module ApplicationHelper def avatar_url(user) default_url = "#{root_url}images/guest.png" gravatar_id = Digest::MD5::hexdigest(user.email).downcase "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}" end end
Когда мы снова перезагрузим страницу, изображения будут меньше и изменится аватар по-умолчанию для тех пользоватетей, у кого нет аватарки Gravatar.
Использование изображений с других сайтов с OmniAuth
Это решение для аватарок хорошо работает в паре с OmniAuth.
Если вы пропустили эпизод о OmniAuth [смотреть,
читать], в нем рассказывалось как начать использовать
OmniAuth в своем приложении. Если на вашем сайте пользователи могут входить через Facebook или Twitter,
то у них не будет аватаров от этих сервисов, но мы это можем исправить, изменив свойство image
в хэше user_info
,
который возвращает OmniAuth.
Если пользователь зашел не через эти сервисы, тогда мы можем использовать Gravatar, чтобы у всех всегда был свой аватар.
Мы хотим добавить OmniAuth для своего приложения, вместо этого мы добавили avatar_url
в свою модель User
, чтобы заменить данные OmniAuth.
Для начала давайте изменим одного из пользователей, чтобы добавить ему аватар от Twitter.
Потом нам нужно изменить наш метод avatar_url
в ApplicationHelper
,
чтобы можно было использовать сохраненные аватары, если они заданы.
module ApplicationHelper def avatar_url(user) if user.avatar_url.present? user.avatar_url else default_url = "#{root_url}images/guest.png" gravatar_id = Digest::MD5::hexdigest(user.email).downcase "http://gravatar.com/avatar/#{gravatar_id}.png?s=48&d=#{CGI.escape(default_url)}" end end end
Когда обновим страницу, первая аватарка будет взята по ссылке, которую мы указали, а остальные выдаст Gravatar.
Вот и все для этого эпизода. Он получился коротким, но полезным тем, кто хочет использовать аватарки у себя Rails в приложении.