Здравствуйте. Помогите, пожалуйста, понять логику использования флага о не прочитанных сообщениях при следующем подходе. Есть таблица dialog, в ней содержатся уникальные идентификаторы начатых диалогов между пользователями и мной, структура: id, from_user_id, to_user_id. 1, 111, 222 Есть таблица messages, в ней содержатся соответственно сами сообщения, структура: id, dialog_id, message, from_user_id, to_user_id, flag, pubdate (from_user_id, to_user_id наверно лишние, но не уверен) 1, 1, сообщение, 111, 222, 1/0, дата При заходе пользователем в его кабинете на страницу чата со мной, проверяется есть ли идентификатор свидетельствующий о нашем диалоге в таблице dialog, если есть, то без ajax подгружаются все сообщения нашей переписки прям на этой странице, после этого ajax каждые 3 секунды проверяет есть ли новые сообщения по этому идентификатору диалога с флагом flag=1, и если есть, то добавляет их с помощью jquery append ко всей переписке, перематывает скролл вниз, и обновляет flag на 0 - сообщения прочитаны. Сообщения по умолчанию добавляются с флагом flag = 1 - те, которые должен обрабатывать скрипт вызывающийся аяксом, он же после проверки аяксом и jquery append обновляет запись flag на 0, но тогда если у меня в админке открыт диалог с этим пользователем, сообщение не приходит ко мне без обновления страницы, так как flag уже 0, а не 1, и скрипт чекающий новые сообщения аяксом не видит соответственно его, увидеть можно только перезагрузив страницу на которой чат, в которой не аяксом выводится вся переписка найденная по dialog_id и flag = 0. То же самое происходит, если все эти действия совершаю я, у меня всё уходит в чат без перезагрузки, но у пользователя сообщения не обновляются аяксом, так как flag и в моём случае обновляется на flag = 0 после jquery append. Всю голову уже сломал, 2-й день не могу понять, как реализовать похожий функционал на чат вк с возможностью видеть не прочитанные сообщения мной, и пользователем, в случае если отправка сообщений производилась, когда кто-то из собеседников не был на сайте. Надеюсь понятно объяснил нюансы.
Отлично объяснил. А догадаться не догадался. Если у тебя админ отправил сообщение - на кой черт отмечать сообщение прочитанным для самого админа? Он сообщение не просто прочитал. Он его написал. Та же хрень и в обратную сторону. Вывод: флаг должен работать только с одной стороной - принимающей послание. Далее. Если вдруг мультичат будет то автор сообщения не повлияет на "прочтение" своего сообщения, но оно "прочитается" первым прочитавшим. Вывод: флаг должен быть связан с парой сообщение-получатель. Далее. Откроешь ты в нескольких окнах чатик и пипец - в каких-то обновляется а в каких-то не хочет. Потому что у тебя окно дергает "не прочитаны" а должно дергать "с последнего известного мне". Ибо и ты сам тоже можешь в соседнем окне в чатик нагадить и в других вкладках оно должно подсосаться. Вывод: обновление должно быть привязано к уникальному атрибуту сообщения. Например, ко времени.
Благодарю за отклик! Теоретически всё правильно, но как же быть тогда с тем, что сообщения будут дублироваться у админа в чате каждые 3 сек. если им не задать флаг 0? append будет добавлять в чат уже имеющиеся сообщения, до тех пор пока принимающий послание не прочтёт и не произойдёт обновление флага на 0. Может много уже сижу за компом, а может и лыжи не едут, но никак не могу понять до конца логику.
Да, лыжи у тебя явно не едут. Сегодня или всегда - это уже тебе только известно Еще разок по логике. У сообщения есть дата размещения. Чат знает в какую дату отправлено последнее сообщение из него, или какую дату оно последнюю втянуло из инбокса. После втягивания естественно нужно переменную в чатике обновить чтоб потом за следующей пачкой лазить. А в эту пачку попадают все сообщения - и наши и чужие. Этот момент понятен?
Получается нужно в самом js хранить переменную с датой последнего сообщения или в куках? И сравнивать её с подтянутыми, и в случае равенства просто не выводить сообщение в чат? Надо поспать видимо, уже 20 часов не сплю и жёстко туплю по всей видимости, но и лыжи тоже не едут.
Давай я тебя забаню на 9 часов здорового сна? Ну реально ты выступаешь как деревянный. Если дело в недосыпе, то тебе срочно надо перестать себя калечить. Чат от тебя никуда не денется. А я пока вместо тебя над ним поработаю.
@Ivanov_Sania сорян. У нас оказывается минимальная размерность бана - день. Не хочу тебя на сутки банить. Так что давай ты своей силой воли проконтролируй что пошел спать
поспал немного, проснулся пришла идея о двух флажках)) всё сделал, вот тупица блин, надо было просто 2 флага заюзать, один админский флажок, другой пользовательский) Правда ограничение - в одной вкладке у каждого должен быть запущен чат, иначе только в одну из вкладок будет приходить аяксом новые сообщение, но мне подходит такой вариант. Благодарю за содействие и помощь!