Юзабилити

Автор блога: neart

Инвайты – забрасываем удочку пользователю

Пару дней назад в личку пришло уже второе письмо с вопросом об использовании инвайтов. Поскольку есть большая вероятность, что будут еще похожие письма, решил на него ответить в блоге.

Спасибо за модуль Инвайтов хорошая штука но  вот захотелось немного попросить о расширении функционала:)
Краткое описание сути: каждому принявшему инвайт дается несколько инвайтов, т.е. приглашенный может пригласить еще нескольких. Если есть такая возможность хотелось бы ее реализацию. Весьма приятное расширение было бы.



Прежде, чем ответить на этот вопрос, хочу остановиться на теме, которая поднималась в вопросе другом.

В чем суть инвайтов?

Разумеется, сам компонент создавался не для сокрытия контента от поисковиков:) Большинство полезной информации целесообразно оставлять общедоступной. А вот небольшую ее часть и ряд функциональных возможностей можно сделать доступной только для избранных.
Для чего? Ничто так не манит человека, как что-то тайное и недоступное. Именно в этом и кроется секрет культовости пресловутой Лепры. Таковы общие законы психологии человека.  Второй секрет, который также нам нужно знать, это то, что возможность "распоряжаться благами" только усиливает эту тягу.
Рассмотрим это на примере инвайтов.
Для примера возьмем сайт городского портала. Контент открыт на 80% для поисковиков, а 20% - только пользователям. Ссылки на эти 20% должны в изобилии присутствовать в открытой части. Казалось бы, какие проблемы - зарегся и читай себе закрытый контент. НО. Мы не даем пользователю возможность регистрироваться. Если регистрация будет открыта - большинство не будет регистрироваться из принципа. Мол, подавитесь жлобы своей инфой, а я найду то же самое без регистрации. Фиг вам, а не еще один заманенный пользователь.
Но в том то и дело, что мы не только не заставляем регистрироваться. Более того, мы говорим, что этот контент очень закрытый и только для своих. Своим то, в принципе, стать можно, но только... Короче тот, кто пригласит его в "свои", будет уже не заманивателем, а благодетелем.
Теперь идем дальше.  Когда, наконец, нашего любимого пользователя облагодетельствовали, сайт дружелюбно говорит ему, что, мол, если ты здесь не находишь тех с кем обязательно хотел бы общаться, то так уж и быть, чтобы ты не чувствовал себя одиноко, мы тебе даем такую возможность облагодетельствовать кого-то из своих друзей. Но только двоих и только самых близких:)
То есть, мы получаем "покраску забора Тома Сойера", когда некую работу (в виде привлечения пользователей) мы представляем, как право:) Но это еще не все. Обратили внимание, что ОДИН пришедший может (читай должен) пригласить ДВУХ приятелей (уже три). А каждый из них еще двух (семь), каждый из которых еще... и т.д. Мы получаем что-то на подобии "финансовой пирамиды", только не с деньгами, а пользователями. Правда, чтобы в дальнейшем не девальвировалась ценность инвайтов, нужно угадать момент, когда право на приглашение стоит выдавать только одно, а затем - только за особые заслуги. Но это уже детали.
Есть еще одна оговорка. Эта схема достаточно примитивна, а инвайты доставшиеся "нашару" не будут цениться так, как добытые за какие-то заслуги. Гораздо круче, когда пользователь получает право на выдачу инвайтов небезусловно. А именно - чтобы заслужить право выдачи двух-трех инвайтов ему нужно заработать эн кармы и/или рейтинга, написать икс постов, оставить игрек сообщений на форуме и тому подобное.
Разумеется, что все эти возможности заложены в функционал компонента "Инвайты", но пока не реализованы в демо-версии.  А наделить любого пользователя безусловным правом выдать ограниченное количество инвайтов мы можем и сейчас.

Техническая сторона вопроса.

Пошаговое описание реализации данного примера:
1) Настраиваем выдачу контента общий доступ/только для пользователей.
2) Закрываем регистрацию на сайте.
3) Выбираем в админке Компонент - Инвайты (разумеется компонент должен быть установлен)
4) Нажимаем на первый значок "Новая категория"
5) Далее заполняем в соответствии со скинами:

   5а) вкладка "общие настройки"

Вид инвайтов категории:
Пользовательский - который пользователями для гостям или других пользователям
Тестовый - может использоваться вместо пароля для тестового перехода в группу
Персональный - инвайт, который выдается за заслуги, аналогично медалям (в демо-версии недоступен)
Партнерский - аналогично персональному, только в качестве "награды" выступает не инвайт, а право выдать инвайт (в демо-версии недоступен)
Платный – инвайт, который можно купить (в демо-версии недоступен)
Предназначен для:
All - все пользователи и гости
registered - все зарегистрированные пользователи
далее только для членов указанной группы.

   5б) вкладка  "правила выдачи"

Выдают:
выбирая группу, члены которой могут выдавать инвайты, помните, что здесь логика несколько иная, чем предыдущем пункте - registered это именно члены этой группы, а не все зарегистрированные. Если пользователь находится не в этой группе, он не сможет выдавать инвайты. Исключение составляют случаи, когда разрешена миграция и пользователь имел доступ в эту группу ранее, т.е. в любой момент в эту группу может перейти. Но для нашего примера это особого значения не имеет - просто общие замечания по ходу дела. Еще нужно сказать пару слов о логике выдачи инвайтов. Они выдаются исключительно через пользовательский интерфейс (или автоматически, но автовыдача в демо-версии не реализована), а в админке настраиваются только правила выдачи.
Способ отправки:
разумеется, что для нашего примера подходит только вариант на e-mail. Личным сообщением могут отправляться инвайты только зарегистрированным пользователям.

   5в) вкладка  "текст приглашения"

могут ли пользователи корректировать текст приглашения:
если установлено "да", то каждый пользователь получит возможность написать собственное индивидуальное послание получателю инвайта вместо стандартной заготовки. При этом он сможет использовать те же шаблоны автозамены, а если забудет указать {активация}, ссылка будет добавлена автоматически.

6) Сохраняем настройки.
7) Настроить пункт меню переход в компонент "Инвайты"

Теперь пользователи при переходе в меню на Инвайты увидят следующую картинку:


Нажав на ссылку с названием категории, пользователь сможет оформить инвайт:

Новый модуль ` Универсальное меню `

Честно говоря, не думал возвращаться на сайт и просил Максисофта передать сообществу мой прощальный подарок (Универсальное меню). Но мудрый Максисофт и не менее мудрая и очаровательная Светлана(feba7) убедили меня остаться.
По этому поводу о возможностях нового модуля поведаю сообществу самостоятельно.

Предпосылки

Инстант оснащен достаточно удобным и функциональным многоуровневым меню, которое успешно можно использовать для решения практически любых задач в сайтостроительстве. К сожалению горизонтальный вариант меню существенно уступает Главному. Существует, правда, вполне приличное горизонтальное меню где-то в дополнениях, но имхо, его неудобно вписывать в дизайн сайта отличный от дефолтного.
С точки зрения юзабилити удобнее было бы иметь модуль, который может выводить меню, как в вертикальном, так и в горизонтальном варианте, сохраняя при этом единый стиль. И хоть в отличии от вышеупомянутого уважаемого Максисофта я не сторонник создания дополнений, вторгающихся в код системы,  но в этом случае решил изменить своим принципам. Данный модуль можно даже считать продвинутым хаком модуля системного – Горизонтальное меню.

Новые возможности

Удобное и практичное многоуровневое меню с богатым выбором настроек.
Возможность использования в горизонтальном и вертикальном вариантах.
Возможность подключения пользовательских скриптов для эффектов раскрытия и сокрытия подпунктов в разделах, а также для hover-эффектов.
Возможность полностью или частично отключать отображение иконок.
Возможность помечать разделы меню выделенным шрифтом или доп. иконками.
Прилагаемые скрипты обеспечивают:
- сохранение ссылок в пунктах, являющихся разделами;
- раскрытие подпунктов меню при наведении указателя мышки на название раздела;
- автоматическое сокрытие подпунктов при  движении указателя мыши вверх и
при выходе за пределы модуля;
- hover-эффект мигания при наведении указателя мыши на ссылку;
- возможность настройки скорости анимации.

Расширения

Особое внимание хотелось бы уделить возможности подключения дополнительных управляющих скриптов и вариаций стилевого оформления. Модуль автоматически подхватывает jQuery-плагины помешенные в папку скриптов. Это позволяет создать на сайте несколько вариантов меню, каждый из которых будет иметь собственные стилевое оформление и юзабельность. Такой подход может быть полезен тем, кто стремится создать для своих пользователей дружественную интерактивную среду. Разные варианты меню могут копировать юзабилити наиболее популярных соцсетей, к которой они привыкли.
Для привязки скриптов к каждому из вариантов меню используются селекторы оригинальный, префикс которых указывается в админке. Этот идентификатор также можно использовать для стилевого оформления меню. Также это будет удобно для сайтостроителей демонстрирующих заказчикам варианты дизайна – меняется префикс меню в админке и заказчик видит на сайте другой стиль меню.

Интеграция в систему

Данный модуль подготовлен с учетом максимальной совместимости с дефолтным шаблоном и для удобства адаптации к оригинальному стилевому оформлению. После тестирования и дошлифовки он может быть включен в оф.релиз если на то будет воля Создателя:)

Скачать/Посмотреть

Посмотреть возможности модуля можно на демосайте. Для скачивания модуль доступен в каталоге дополнений.

Доработка и адаптация

Пожелания по доработке модуля принимаются в течении двух дней после первой публикации поста (до 18.03.10).
Возможна индивидуальная адаптация модуля под ваш дизайн и юзабилити. Это будет сделано абсолютно безвозмездно (с моей стороны) для тех кто решит финансово поддержать команду разработчиков Инстанта, либо клуб доп.разработок myINSTANTCMS. Для желающих порассуждать о меркантильности тех, кто ценит свой труд могу сказать, что из этих пожертвований я лично не получу ни копейки. Таким образом я хочу поддержать тех, кто вкладывает немало сил в развитие проекта.

Исправляем баг меню

Баг, конечно, не критичный но крайне неприятный для тех, кому нужно многоуровневое меню с разграничениями прав доступа к вложенным пунктам.

Описание бага

Предположим нам нужно сделать многоуровневое меню


Так оно будет выглядеть в свернутом виде


Теперь нам понадобилось скрыть от гостей доступ к одному из разделов


Вот, что гости увидят в итоге


Юзабилити-меню для InstantCMS

Работая над юзабилити-шаблоном для Инстанта стал переделывать главное меню. Решение получилось вполне пригодное для самостоятельного отдельного хака, коим спешу поделиться с сообществом.

Предпосылки:

Что лично меня не устраивало в существующем главном меню?

1) Названия разделов, содержащие подменю, визуально не отличаются от стандартных пунктов меню.

2) Пункты меню, раскрывающие подменю, не ведут на страницы сайта и если нужно структурировать информацию это сделать будет не очень удобно. Например, пункт меню "Магазин" и подпункты "Текстиль" и "Галантерея", один из которых также имеет свое подменю. Чтобы вывести весь список нам придется создавать еще один подпункт "Все товары". Это не совсем удобно с точки  зрения структурирования информации. Это лечится отключением джаваскрипт в настройках модуля, но для больших меню это крайне неудобно.
3) На раздел, содержащий подменю нужно нажимать ( а хочется, чтобы он автоматом раскрывался при наведении указателя мыши)

Постановка задачи:

1) При  включении и отключении и джаваскрипта структура меню не должна меняться.
2) Все пункты меню, в т.ч. являющиеся разделами, должны вести на страницы сайта.
3) Разделы, содержащие подменю, должны визуально выделяться (напр. полужирным шрифтом).
4) Подменю должны раскрываться при наведении указателя мыши на родительский пункт.
5) Раскрытия подменю НЕ должно происходить, если указатель мыши случайно пробежал над названием раздела.
6) При уходе внимания (указателя мыши) с меню все подпункты должны автоматически скрываться.
7) Приветствуется использование анимированных эффектов.
8) Решение должно минимально "вторгаться" в код системы и, по возможности, быть универсальным.

Результат:

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

Скин нового меню ниже, а поюзать его можно на демо-сайте.

Информация добавлена в каталог дополнений, где, собственно, и ссылка на скачивание.

Техзадание на доп. разработку

Хочу на базе своей разработки "инвайты" для InstantCMS сделать программное решение (плагин, модуль, компонент, хак) позволяющее обеспечить онлайн сопровождение работы клуба поддержки разработок дополнений  для InstantCMS. С этой целью приглашаю уважаемых участников сообщества к обсуждению техзадания.

Постановка задачи.
Программная разработка должна обеспечивать следующие функции:
1) Заявка на бесплатное вступление в клуб для всех желающих
2) Автоматический перевод пользователей в привилегированную группу при оплате или за особые заслуги.
2a) Использование в качестве "внутренней валюты" клубных балов, которые "зарабатываются" за активность (или др. заслуги), или покупаются. (предложение Чумак Сергей)
3) При скачивании разработок клуба, архив автоматически защищается индивидуальным паролем, который можно автоматически получить при оплате. Размер оплаты автоматически вычисляется в зависимости от группы пользователя и времени выкладывания разработки. По прошествии определенного срока (пол года - год) архив доступен к скачиванию без пароля для всех членов клуба.
4) Все денежные поступления автоматом разделяются на несколько потоков (половина разработчику дополнения, по 20% в фонды администрации инстанта и премирования победителей конкурсов, 10% на нужды клуба)
5) Отдельная схема для распределения членских и спонсорских взносов
6) Администрирование конкурсов независимых разработок для инстанта (или других проектов) в которых авторы выкладывают свои работы в общий доступ, а члены клуба ими пользуются, тестируют и голосуют. По итогам голосования система автоматически распределяет призовой фонд среди участников конкурса по заранее определенным правилам.

Какие еще будут пожелания и предложения по функциям этой программной разработки? Также интересует актуальность этой программной разработки для сообщества. Интересует мнение Администрации о возможности включить эту разработку в оф.релиз (оф.сайт).

Лепим на Инстанте Лепру

Лепра никогда не стала бы  культовым ресурсом, если бы не пресловутые инвайты.
Психологически человека манит что-то закрытое, запрещенное, тайное гораздо больше, чем свободное и общедоступное. Также то, что добыто и выстрадано ценится гораздо больше, чем то, что досталось нашару. Таковы общие законы жизни, которые, впрочем, распространяются и на Интернет.
Совершенно естественно, что социальная сеть, где часть функций или прав не являются общедоступными, будет пользоваться бОльшим авторитетом у пользователей.
Благо Инстант позволяет разграничить права доступа. Но... делать это через админку и вручную несколько неудобно.
А если нам захочется какие-то права продавать? Например, право добавлять свой ресурс или предприятие в каталог, либо же право скачать файл и т.д.
А если нам захочется поощрять активных пользователей не виртуальными медальками, а реальными правами доступа?
В общем, система автоматического управления правами пользователей для Инстанта просто просилась...
И напросилась:)

Итак

ИНВАЙТЫ – система автоматического управления правами пользователей для InstantCMS v1.5.3

Компонент позволяет пользователю с определенными правами приглашать других пользователей к ресурсам (функциям) с ограниченным доступом. В сочетании с возможностью самостоятельно менять группу (из числа доступных) это предоставляет пользователям больше свободы и делает систему "более социальной".
Реализуется путем автоматического перевода приглашаемого пользователя в определенную группу(модераторы, редакторы и пр.)
Также при определенном рейтинге(карме) пользователь может получить персональный инвайт для перехода в более "продвинутую" категорию.
Инвайты могут быть как бессрочными, так и ограниченными по времени – каждый раз, когда  пользователь меняет группу он проходит проверку на срок годности инвайта.
Интеграция генератора инвайтов с платежными системами позволит обеспечить временный платный доступ к закрытым ресурсам.
Существует возможность предоставления демонстрационных инвайтов для ознакомления с возможностями группы. Эта функция также может использоваться как система парольных доступов к разделам сайта.
Предусмотрена антихакерская защита позволяющая отслеживать количество ошибок при попытке активации инвайта с одного ip и блокировать доступ пользователя к системе.
В компоненте существует гибкая система настроек через админку и возможность делегировать полномочия по выдаче инвайтов пользователям не являющимся администраторами.  

Компонент полностью совместим с релизом 1.5.3
В компоненте пока реализованы только базовые функции и работа над его совершенствованием будет продолжаться.

С функциями компонента можно на практике ознакомиться на демонстрационном сайте, специально открытом для этих целей - http://instant.animarerum.com

Там же присутствует ссылка на скачивание. Инструкция по установке в архиве. Отрытый код, пояснительные комментарии по коду.

Более подробное описание функций и возможностей в следующих постах.

UPD: Для "прошляпивших время" создан специальный 2-х часовой демо-инвайт с возможностью многократного использования. Достаточно в поле "Введите код инвайта:" написать кодовое слово провтыкал и система должна перевести вас снова в группу "Варяги интернета".
Если на каком-то этапе вообще не можете авторизоваться или активировать инвайт - это может быть защита системы, а возможно и баг. При подозрениях на баги отписывайтесь, пожалуйста, в коментах к этому посту.

UPD2: Устранен баг, из за которого пользователь с просроченным инвайтом не мог зайти в систему.
Архив обновлен!
Те, кто скачал раньше могут просто заменить 2 файла скачав этот архив (закачиваем в корень сайта и распаковываем с заменой)
За помощь в тестировании не забываем благодарить уважаемого Madmax.
.