Продвинутая система общения между пользователями.
Модуль реализован по принципу чата, где сообщения обновляются в режиме реального времени.
За основу внешнего вида взят интерфейс телеграма и адаптирован в рамках web интерфейса и возможностей DLE.
Данный модуль я делал очень продолжительное время. Постоянно что-то переделывал или добавлял. Вот буквально на днях перед релизом добавил еще один достаточно интересный функционал для использования ЛС в качестве обратной связи с администрацией сайта. Но лучше распишу все по порядку.
Большая просьба полностью ознакомиться с описанием модуля. Практически на все вопросы вы сможете найти ответы в этой статье.
Особенности
- Модуль доступен только по реальному адресу example.com/pm/
- У каждой беседы свой URL: example.com/pm/Логин_Пользователя/
- Адаптивная верстка
- Совместимость со стандартными ЛС. Достаточно установить модуль и все старые сообщения будут отображаться в чате
- Очень простая установка
- Все действия выполняются на AJAX (за исключением перехода по страницам)
- Можно запретить пользователям общаться друг с другом и использовать модуль только как обратную связь с заданным списком пользователей.
- На 98% открытый исходный код.
- Никакого html в php файлах. Все в шаблонах.
- Русская и Английская локализация. Можно легко добавить свой языковый файл. Но в шаблонах нужно будет вручную менять тексты.
Главная страница
На главной странице всегда отображается сайдбар и пустой "контент". Если у группы пользователей есть ограничение на количество сообщений, то в верхней части будет отображаться прогресс бар. Если ограничений нет, то и прогресс бара соответственно тоже не будет:
В сайдбаре есть кнопка меню, поиск и список пользователей.
Еще важный момент. Верстка модуля сделана с поддержкой адаптивности, на мобильных устройствах главная страница будет принимать следующий вид:
Меню и поиск опишу отдельно. Список пользователей формируется и сортируется по дате последнего сообщения, входящего или исходящего. При этом новые не прочитанные сообщения будут всегда в начале списка.
В строке пользователя указывается: полное имя (или логин), дата последнего сообщения, логин и группа пользователя.
Так же на аватарке в виде кружочка показывается статус пользователя.
Список собеседников обновляется на AJAX с заданным интервалом. При получении нового сообщения в заголовок страницы будет дописано количество новых сообщений.
Меню пользователя
При клике на иконку меню на AJAX поверх окна подгружается меню. В нем можно очистить всю историю переписок, перейти на страницу игнорируемых пользователей (в скобочках указано их количество) и посмотреть статистику сообщений.
Если у группы пользователя есть ограничение на количество сообщений, то это будет так же отображено в статистике.
Думаю вы обратили внимание, что исходящих сообщений 8, а из них не прочитанных 13. Такое возможно когда пользователь написал сообщение и удалил его. А принимающая сторона еще не прочитала. Поэтому получается, что фактически в исходящих сообщения нет, но в реальности оно есть у принимающей стороны и оно еще не прочитано.
Игнорируемые пользователи
При клике на крестик выскочит стандартное окно подтверждения действия. При клике на сам блок профиля будет выполнен переход на страницу диалога с пользователем. При клике на иконку пользователей в левой колонке будет показан текущий список собеседников для быстрого перехода к диалогу.
Поиск пользователей
Я очень старался сделать его удобным и наглядным, надеюсь у меня получилось.
- Поиск выполняется на AJAX.
- В качестве даты отображается дата последнего посещения.
- В списке выполняется подсветка искомого слова.
- Поиск и подсветка выполнятся сразу и в полном имени и в логине.
- Приоритет поиска идет по логину. У кого ближе к началу искомая фраза тот выше в выдаче, затем сортировка по алфавиту
- Поиск выполняется автоматически при вводе текста, с задержкой 600мс. Но можно нажать Enter, тогда поиск будет выполнен мгновенно.
Окно чата
- В верхней части указан профиль собеседника, справа в кружочке количество сообщений в беседе (скриншот сделан из профиля test).
- В основном окне чата полагаю все и так понятно, последнее сообщение еще не прочитано собеседником, поэтому помечено красной полоской.
- Между списком сообщений и формой ввода видна красная полоска, это визуализация обратного отсчета до следующего обновления чата. Полоску при желании можно легко убрать в шаблоне.
- Редактор можно использовать любой стандартный: BB, FroalaEditor или TinyMCE.
- Если пользователь отсутствовал некоторое продолжительное время, обновление чата будет приостановлено для предотвращения выполнения ненужных запросов, время можно поменять в настройках
- Меню своего сообщения
- Меню сообщения собеседника, отличие - отсутствие возможности редактирования и есть возможность пожаловаться. При удалении сообщения будет выскакивать окно подтверждения действия
- При редактировании сообщения редакторы не отображаются, но используется обработчик BB редактора.
- При получении нового сообщения от другого (не текущего) пользователя, в левой колонке будет показано число новых сообщений
- Развернутый список пользователей, текущий пользователь выделен.Поиск работает так же как на главной.
- Архив сообщений отображается на отдельной странице, в нем ограниченный функционал, отображаются сразу все сообщения от новых к старым.
- Можно массово удалить выбранные сообщения
- Иконка стирательной резинки позволяет полностью удалить все сообщения в текущем диалоге.
- При клике на кнопку игнора редактор прячется
- Если же сам пользователь находится в игноре у получателя будет следующее сообщение:
- При желании можно приостановить автообновление чата или обновить чат вручную с помощью иконок
- В зависимости от настроек можно выключить или наоборот включить звук новых сообщений
- Иконка ниже позволяет в 2 раза увеличить высоту чата для удобства чтения длинных сообщений.
- Запоминается состояние кнопок сайдбара: "Список пользователей", "Приостановить обновление", "Без звука" и "Развернуть".
Настройки
- 'limit' => 100, - максимальное видимое количество сообщений в текущем диалоге
- 'search_limit' => 20, - максимальное количество отображаемых пользователей при поиске
- 'online_time' => 10, - сколько минут бездействия считать пользователя онлайн
- 'interval' => 7, - интервал между обновлениями чата
- 'offline' => 1, - через сколько минут бездействия переводить чат в оффлайн режим
- 'main_interval' => 10, - интервал обновления списка пользователей на главной странице модуля
- 'allow_ignore' => true, - разрешить использовать игнорирование (в случае запрета, кнопки и тексты в шаблоне нужно будет убрать вручную)
- 'soundoff' => 0, - выключить звук. Т.е. по умолчанию изначально кнопка отключения звука будет активной
- 'stopupdate' => 0, - выключить автообновление чата.
- 'allow_search' => true, - разрешить использовать поиск пользователей на сайте
- 'send_email' => true, - отправлять на почту уведомление о новом сообщении.
- 'email_subj' => 'Новое персональное сообщение', - заголовок/тема письма
- 'pm_subj' => 'Новое ЛС', - модулем не используется, но т.к. используется стандартная таблица для хранения писем - необходимо указывать заголовок письма. Да и в шаблоне email сообщения используется тема.
- 'feedback_only' => false, - запретить пользователям общаться между собой, только с заданными списком контактов
- 'feedback_users' => [], - через запятую логины пользователей которым можно писать сообщения, если включен параметр выше
Шаблоны
- 404.tpl - страница ошибки, если указан не существующий URL или пользователь
- dialog.tpl - страница диалога
- dialog_item.tpl - шаблон сообщений (включая разделитель-дату)
- editor.tpl - форма редактора
- ignore.tpl - страница игнорируемых пользователей
- index.tpl - индексная страница, основная оболочка
- main.tpl - главная страница
- menu.tpl - меню профиля пользователя
- userlist.tpl - шаблон пользователя в списке
Демо
Адрес: d130.sandev.pro
Логины: test, crazybird, greenrabbit, angryapple
У всех пользователей из групп "Журналист" и "Главный редактор" - пароль test
Логины: test, crazybird, greenrabbit, angryapple
У всех пользователей из групп "Журналист" и "Главный редактор" - пароль test
Информация
Стоимость модуля 8wmz
Количество лицензий в комплекте: 2шт
Стоимость дополнительной лицензии: 3wmz
Для работы модуля требуется ionCube Loader v.6.x и старше (для PHP 7.x версия куба должна быть 10.x)
Версия DLE: 10.1 - 17.1 (На старых версиях DLE рекомендуется использовать только BB редактор)
Версия PHP: 5.4 - 8.2 (кроме 8.0)
Кодировка: UTF-8
Купить модуль: shop.sandev.pro
Контакты
Skype: sander8804
Telegram: @Sandev
ICQ: 404-037-556
E-Mail: oleg.sandev@gmail.com
История изменений
v.1.0.1
+ Добавлен запрет на отправку сообщений, если в группе пользователя получателя отключено разрешение использования ЛС.
* Исправлено возникновение ошибки об истечении пользовательской сессии
v.1.0.2 от 10.04.2019
* Исправлен баг связанный с работой интерфейса при удалении и очистке диалога
v.1.0.3 от 23.05.2019
+ Добавлен файл лицензии для PHP 7.3
* Убрана проверка сессии, отчего часто у пользователей вылетала ошибка
v.1.0.4 от 15.11.2019
+ Добавлена возможность ограничить количество пользователей в списке диалогов
v.1.0.5 от 02.04.2020
* Убрано отображение удаленных пользователей из списка диалогов
v.1.0.6 от 05.04.2020
* Пользователю получателю не отправляется письмо на E-Mail, если он считается "онлайн" на сайте
v.1.0.7 от 27.08.2020
+ При поступлении нового сообщения, в DLE в модальном окне уведомлении, кнопка "Прочитать сообщение" теперь открывает сразу диалог с автором
v.1.0.8 от 20.01.2021
* Исправлена локализация. Фразы "недавно", "сегодня" и "вчера" перенесены в языковые файлы
+ Добавлена поддержка PHP 7.4
v.1.0.9 от 18.03.2021
* Исправлены префиксы PREFIX - USERPREFIX
v.1.0.10 от 01.06.2021
* Исправлена работа тега {%url%} в шаблоне E-Mail сообщения (#comment-id-2812)
v.1.0.11 от 04.10.2021
+ Добавлена поддержка DLE 15.0
v.1.0.12 от 15.02.2022
+ Добавлена поддержка DLE 15.1 в установщике плагина
v.1.0.13 от 16.10.2022
+ Добавлена поддержка PHP 8.1
+ Добавлена поддержка DLE 15.3
v.1.0.14 от 13.04.2024
+ Добавлена поддержка PHP 8.2
С уважением,
Олег Александрович a.k.a. Sander