Обмен сообщениями между пользователями в MODxEvolution
Всем хорошей пятницы!
Вашему вниманию хочу предложить небольшой видеообзор реализации обмена сообщениями между пользователями в MODx Evo.Что умеем:
сниппет liveMessages1. Принимать и отсылать сообщения, помечать как прочитаные, новые, удалять. Ну удалять, пока подразумевается изменение статуса на -1, так как пишется все только в одну таблицу:
id date time from to subject message status uid
Нужно ли это вообще, не знаю… БД не резиновая, лопнуть может, думаю.
id — идентификатор сообщения
date — дата отправки
time — время отправки
from — от кого
to — кому
subject — тема
message — сообщение
status — статус (0 новое, 1 прочитаное, -1 типа удаленное)
Как вы думаете, может для каждого пользователя создавать свою таблицу с сообщениями? или обойтись можно другими способами? Просто хотелось бы чтоб при удалении сообщения оно удалялось только у одного пользователя, а не у обоих.
2. Постраничная навигация и возможность управлять кол-вом вывода на страницу.
3. Показывать переписку с пользователем в правильном порядке получения сообщений и с выводом в скроленый див. Ну это к слову…
сниппет liveTalk
Выводит список пользователей на сайте (имя, статус, кнопка написать).
сниппет liveCount
Используется вместе с Wayfinder. Для вывода количества новых сообщений необходимо создать &rowTlp с кодом примерно таким:
<li [+wf.classes+]><a class="[+wf.description+]" href="[+wf.link+]">[+wf.linktext+]</a>[+wf.wrapper+]</li>
и в поле description документа написать inbox_mess. Дальше js все сделает. Если есть сообщения новые, то выведет +2 например.
P.S.
Ну а теперь можете ознакомится подробнее (видео ниже).
Разработка пока в тестовом режиме и в режиме «необходимо ли это вообще?». Свои пожелания оставляйте в комментариях.
АдминЪ! Даешь блог Социальная сеть!
В планах вообще довести это все до ума, собрать необходимую комплектацию, ну и много конфет.
26 комментариев
В любом случае, придется делать решение более настраиваемым и гибким. Например: вывод новых сообщений вверху, бесконечная лента, возможность прятать прочитанные сообщения, оповещения на email, вставка картинок или любых файлов и т.д.
Для концепта, повторюсь, получилось очень симпатично. Если бы еще не на Денвере было сделано, чтобы можно было оценить примерную скорость работы — было бы еще нагляднее.
Что касается структуры БД — я бы добавил еще id вызова и/или parent, как это сделано в Jot. Никогда не знаешь, к чему придется привязывать вызов ленты комментариев. А поля в таблице — дело наживное, может быть даже придется потом сделать отдельную таблицу для дополнительных полей сообщения.
А вообще хотелось бы для начала реализовать все это на ajax, чтоб было красивее и быстрее. Быстрее и красивее.
Эта возможность есть, только реализована не в полной мере. По нажатию кнопки Удалить сообщение меняет status на -1 и просто не показывается в ленте.
Постараюсь сделать тестовый сайт для полной оценки сего. Очень хотелось бы оптимизировать все sql запросы для быстроты работы.
А за идеи спасибо!
Кто бы что бы ни говорил, все должно работать без аякса изначально. А подгрузку на лету потом надо реализовать отдельно, параметром сниппета. Если будете сразу ориентироваться на аякс — код будет терять стройность и гибкость.
Как заготовку для будущего использования аякса достаточно принудительно формировать в html коде id для кнопок и контейнеров. Впоследствии все js навороты можно будет просто вешать на эти id как обработчики событий.
Пока с помощью этого можно легко оформлять стили для прочитанных, новых сообщений и пр…
Только если будете пользоваться этой функцией, то учтите, что она не фильтрует параметры. Т.е. SQL-injection возможна в каждом параметре. Поэтому предварительно данные нужно обрабатывать через $modx->db->escape();
statusfrom
statusto
и если 2 статуса = -1 то тогда удаляем
Если кто-то вдруг будет доводить до ума — буду только рад!
Я очень надеюсь на то, что у меня будет свободное время на развитие. Тестим, отписываемся, помогаем друг-другу =)
Можно сделать анализ, увидеть следующие имена функций
clearStr($str)
destroySession();
upldFile()
по аналогии добавить свои функции либо просто в коде их отключить.
наверняка что-то типа htmlentities или htmlspesialchars
=)
…