Как в InstantCMS v2.4.0 сделать Случайный аватар для пользователей без главного фото?

#16 5 апреля 2016 в 17:57
WebMan
да вы правы, можно выбрать универсальные аватарки
#17 6 апреля 2016 в 09:49

Val, внедрил ваше решение в релиз, хоть и с небольшими корректировками.

Fuze
shockОчень неожиданно, думал что это реализуется не ранее как в следующей версии.
Дело в том что немного обдумав функционал и реализацию хотел чуть переделать текущий код (в некоторых местах с чуть большей интеграцией в систему). О чем я:
В текущем виде есть 2 недостатка (один из них довольно существенный).
1) Фоновый цвет аватарки генерируется из никнейма пользователя и он не всегда получается "красивый", т.е. может получиться грязный цвет, который к тому же не гармонирует с общим дизайном сайта. Этот недостаток я сгладил небольшой прозрачностью фона, что сделало его более мягким и нативным к окружающим цветам. Но это своего рода костыль.
2) Самое главное — если у пользователя нет своей аватарки, система генерирует ему дефолтную. Но эта генерация происходит каждый раз при просмотре и обновлении страницы! Что неэффективно. Гораздо логичнее сгенерировать аватарку один раз при регистрации пользователя и занести в БД ее данные, которые в последующем будут подставляться в шаблон без постоянной генерации.

Концепция:
В админке ввести настройки для дефолтной аватарки — "использовать буквы" или "использовать иконку человечка", далее поле в котором можно указывать набор цветов для генерации аватарки в формате (<фоновый css-цвет>|<css-цвет буквы или иконки>), например
#79EBB8|black
rgb(121, 235, 184)|#fff

Цвета берутся из этого поля, если не указана одна из составляющих то она генерируется автоматически, также если поле оставить пустым то все цвета определяются автоматически.

Затем полученный результат сохраняется в БД в виде yaml-данных, например
---
bg: #79EBB8
color: black
letter: в

В функции обработки данных аватара из БД по содержимому определять что нам передано (ссылка на картинку или дефолтные параметры) и собирать либо тег <img> либо <div class="avatar">, которые затем передавать в шаблон.
Если я чего-то не упустил из виду, то получаем достаточно быструю систему дефолтных аватарок, которые должны работать быстрее даже кэшированных картинок.

Предлагаю обдумать предложенную концепцию и доработать ее логику. Далее я реализую в коде и отправлю Pull request.
Текущий вариант можно оставить в не активированном виде (как это и сделано сейчас)) для желающих попробовать, а в следующем обновлении запустить уже доработанный функционал?
#18 6 апреля 2016 в 11:43

Очень неожиданно ...

Val

Да, неожиданно и приятно. 😊
Замечательно, что Fuze так быстро реализовал один из вариантов. Пусть лучше будет такой вариант, чем никакого. А далее можно подумать и про его оптимизацию/модернизацию.

По реализации. Хранить готовые настройки и потом подставлять их в шаблон будет быстрее, Вы правы. Но возникает необходимость отслеживать изменение аватара и ника пользователем с последующей правильной генерацией и сохранением этих настроек. Если Вы это реализуете через хуки при создании нового пользователя и при редактировании профилей (и на фронтенде, и в Админке), то это будет замечательно. Но это усложняет код и прямо сейчас внести все изменения в релиз разработчики могут не успеть. Хотя попробовать можно. 😊

Хранить пути к загруженным пользователями аватаркам и данные для подстановки в дефолтные нужно в разных полях, на мой взгляд. Так проще, чем пытаться определить, что же там присутствует. Хотя всё зависит от варианта этой проверки..

Настройки цвета фона, конечно, очень желательны. Но не строгий цвет, а диапазоны. Или опорный цвет и отклонения от него. Например, постоянный опорный синий (20, 0, 225) и отклонения к нему плюс-минус (20, 0, 30) генерятся из аватарки. Получим диапазон от (0, 0, 195) до (40, 0, 255) — оттенки синего. Опорный (127, 127, 127) и отклонения (128, 128, 128) — все цвета.
Настройки цвета букв, я думаю, не обязательны. Достаточно контрастных цветов: белого и чёрного.

Подставлять рисунок человека вместо букв мне лично не интересно. Идея с буквами всё же нагляднее. Хотя может быть кому-то и понравится. Но это точно усложнит код.

Также в настройки можно добавить выбор количества символов от 1 до 3. Как я уже писал в теме про визуальную идентификацию пользователей, мне кажется, будет более наглядным вывод первых букв двух или трёх слов ника, если таковые есть, разделённые точками. Тут остаётся лишь реализовать автоподбор размера букв в зависимости от их количества.
#19 6 апреля 2016 в 11:46
Я вижу произошло чудо laughНо мои аватарки не отображаются sad
#20 6 апреля 2016 в 11:57
Daniel, мы не ясновидящие)) Если вы немного подробнее опишете что и как делали, что ожидали увидеть и что получили, возможно помощь придет! joke

WebMan, повторюсь немного)) — вызов генерации аватара при регистрации и при изменении ника пользователя происходит из соответствующих функций, без хуков.
Определять какой аватар хранится в БД можно например так: isset($avatar['small']); — установлена картинка пользователя.
#21 6 апреля 2016 в 12:35

мы не ясновидящие))

Val
laughlaugh

вы сказали Если удалить немного символов из вашего кода, то букв не будет, а вместо них будет иконка человечка.

  1.  
  2. $type = 'user-'.$txt_color;
этот параметр пока не трогал, чтобы не испортить и проверить для начала

Здесь вы видите что я добавил 5 картинок, того же размера

Код который заменил в файле html.helper.php
#22 6 апреля 2016 в 13:16
Daniel, а вы разве в эту папку залили картинки ..\upload\default\? Вероятно проблема в этом))
#23 6 апреля 2016 в 16:57
Val

Ура, получилось😊:) спасибо большое вам

А как сделать чтобы аватары не менялись, один аватар одному пользователю, сейчас при обновление сразу меняется картинка.

Возможно только 5 аватарок добавлять?
#24 6 апреля 2016 в 21:05

А как сделать чтобы аватары не менялись, один аватар одному пользователю, сейчас при обновление сразу меняется картинка.

Daniel
Об этом вам говорили ранее — это недостаток предложенного спсоба

Возможно только 5 аватарок добавлять?

Daniel
Возможно сколько угодно)) mt_rand(1,5) — меняем 5 на нужное вам число и докидываем картинки с числительными в ..\upload\default
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.