Обмен сообщениями между пользователями в MODxEvolution

Всем хорошей пятницы!

Вашему вниманию хочу предложить небольшой видеообзор реализации обмена сообщениями между пользователями в MODx Evo.

Что умеем:

сниппет liveMessages
1. Принимать и отсылать сообщения, помечать как прочитаные, новые, удалять. Ну удалять, пока подразумевается изменение статуса на -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 комментариев

avatar
На вид неплохая игрушка. Но если не делать упор на социальную сеть, то может получиться решение для гораздо более широкого применения. Как вариант — сделать механизм расширенной обратной связи с админами сайта. Обычной формы «Задать вопрос» иногда недостаточно.

В любом случае, придется делать решение более настраиваемым и гибким. Например: вывод новых сообщений вверху, бесконечная лента, возможность прятать прочитанные сообщения, оповещения на email, вставка картинок или любых файлов и т.д.

Для концепта, повторюсь, получилось очень симпатично. Если бы еще не на Денвере было сделано, чтобы можно было оценить примерную скорость работы — было бы еще нагляднее.

Что касается структуры БД — я бы добавил еще id вызова и/или parent, как это сделано в Jot. Никогда не знаешь, к чему придется привязывать вызов ленты комментариев. А поля в таблице — дело наживное, может быть даже придется потом сделать отдельную таблицу для дополнительных полей сообщения.
avatar
В любом случае, придется делать решение более настраиваемым и гибким.
Да, в планах вообще добавить параметр для сортировки вывода комментариев, уведомления на e-mail (да\нет), прикрепление файлов, документов, к сообщениям. Возможно пересылка сообщений.
А вообще хотелось бы для начала реализовать все это на ajax, чтоб было красивее и быстрее. Быстрее и красивее.
возможность прятать прочитанные сообщения
Эта возможность есть, только реализована не в полной мере. По нажатию кнопки Удалить сообщение меняет status на -1 и просто не показывается в ленте.

Постараюсь сделать тестовый сайт для полной оценки сего. Очень хотелось бы оптимизировать все sql запросы для быстроты работы.

А за идеи спасибо!
avatar
Да, еще по поводу аякса хотел сказать.

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

Как заготовку для будущего использования аякса достаточно принудительно формировать в html коде id для кнопок и контейнеров. Впоследствии все js навороты можно будет просто вешать на эти id как обработчики событий.
avatar
Здорово, хороший совет, я сейчас по максималке стараюсь прописывать классы и ИД кнопок, дивов, и др тэгов.
Пока с помощью этого можно легко оформлять стили для прочитанных, новых сообщений и пр…
avatar
Кстати, кто не знает, то админу можно отправлять уведомления через API

//function sendAlert($type, $to, $from, $subject, $msg, $private= 0) {}
$modx->sendAlert('alert',1,1,'Активация сайта','Ошибка отправки письма на email: '.$email."<br />".$mail->ErrorInfo."",1);

Только если будете пользоваться этой функцией, то учтите, что она не фильтрует параметры. Т.е. SQL-injection возможна в каждом параметре. Поэтому предварительно данные нужно обрабатывать через $modx->db->escape();
avatar
Ммм… Спасибо, буду иметь ввиду.
avatar
Что б не удалять сразу у двоих сообщение нужно просто 2 параметра
statusfrom
statusto

и если 2 статуса = -1 то тогда удаляем
Комментарий отредактирован 2013-01-25 18:59:53 пользователем Dmi3yy
avatar
Спасибо за совет, Дим, пожалуй так и сделаю =)
avatar
А не подскажите ли где можно поживиться исходничком?)
avatar
Пока нигде. Я решил полностью переписать код. Только сейчас на это времени нет.
avatar
А попользоваться хотя бы «сырым» вариантом тоже никак =)? Есть громадный кусок работы который вы уже проделали и который возможно не придется проделывать
avatar
Михаил, а можно все таки, хотя бы взглянуть на вашу работу! Имею ввиду на исходники.
avatar
Здравствуйте. К сожалению, нет. Предоставить исходники я не могу.
avatar
тут есть клиент которому надо, готов купить :) напиши продаешь ли? и за сколько
avatar
У меня тоже в запаске лежит такой пакет обмена сообщениями, писал под сайт по типу фриланс-базы. Есть уведомления на почту. Но пока никто не проявил особого интереса, поэтому так и лежит без дела. Может если будет интересно, могу привести в нормальный вид.
avatar
Конечно интересно, приведите. Или даже без нормального вида.
avatar
Тоже есть интерес к данному функционалу. Готов купить или задонатить. Времени писать для себя нет.
avatar
По многочисленным просьбам — yadi.sk/d/gTBPCxkuqGGcE
Если кто-то вдруг будет доводить до ума — буду только рад!

Я очень надеюсь на то, что у меня будет свободное время на развитие. Тестим, отписываемся, помогаем друг-другу =)
avatar
Скиньте реквизиты. На пиво закину:)
avatar
Спасибо, не употребляю последнее время. Но на развитие modx я думаю никто не откажется =)
avatar
решил протестить… не хватает файла functions.php в папке includes (
avatar
Беда, прям. Ну ничего, судя по тому, что он подключается в auth.snippet reg.snippet
Можно сделать анализ, увидеть следующие имена функций
clearStr($str)
destroySession();
upldFile()
по аналогии добавить свои функции либо просто в коде их отключить.
Комментарий отредактирован 2016-03-22 13:16:57 пользователем siuzi_drum
avatar
clearStr
наверняка что-то типа htmlentities или htmlspesialchars
=)

avatar
generate_password(7) что-то типа
function generate_password($number)  
  {  
    $arr = array('a','b','c','d','e','f',  
                 'g','h','i','j','k','l',  
                 'm','n','o','p','r','s',  
                 't','u','v','x','y','z',  
                 'A','B','C','D','E','F',  
                 'G','H','I','J','K','L',  
                 'M','N','O','P','R','S',  
                 'T','U','V','X','Y','Z',  
                 '1','2','3','4','5','6',  
                 '7','8','9','0','.',',',  
                 '(',')','[',']','!','?',  
                 '&','^','%','@','*','$',  
                 '<','>','/','|','+','-',  
                 '{','}','`','~');  
    // Генерируем пароль  
    $pass = "";  
    for($i = 0; $i < $number; $i++)  
    {  
      // Вычисляем случайный индекс массива  
      $index = rand(0, count($arr) - 1);  
      $pass .= $arr[$index];  
    }  
    return $pass;  
  }  
avatar
Беды никакой нет — подключил WebLoginPE, уже и забыл )) спросил на всякий случай, может из архива что-то отвалилось.
avatar
По всей видимости провалилось, в недры гитхаба
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.