Я переделал компонент для работы через сервер уведомлений comet-server.ru. Работа через мой сервер gtsnotify.ru прекращается. Это не выгодно как оказалось.

Для многих сайтов требуются RealTime уведомления для работы чатов и мессенджеров, автоматической перезагрузки страницы при изменении данных на сервере и уведомлений пользователей о поступлении новых товаров, о, например, выпуске новой проды на книжных сайтах. Для этой цели разработан компонент gtsNotify для CMS MODX



Для работы RealTime уведомлений требуется регистрация на comet-server.ru.

В настройках компонента, в Пакеты->gtsNotify вбить секретный ключ и публичный id с comet-server.ru.



С использованием этого компонента разработан компонент мессенджера для MODX — RealMessenger.

Компонент разработан с использованием pdoTools и bootstrap. Поддерживается bootstrap версии 3 и версии 4. Но можно стилизовать как вам угодно!

Установка
Для bootstrap v4 подключить на сайте Font Awesome Free 5.14.0 или другую версию, но, возможно, надо будет сменить иконки.
Установить с modstore.

В navbar сайта или где вам удобно разместить сниппет gtsNotify:
{if $_modx->user.id > 1}{'!gtsNotify' | snippet}{/if}


Для bootstrap v4, в системную настройку gtsnotify_frontend_css прописать [[+cssUrl]]web/b4_default.css.

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

Нужно прописать Имя канала, Иконку, Чанк уведомления в меню канала и поставить Активно.
Для RealMessenger канал создается при его установке.

API
<br />
$gtsNotify = $modx->getService('gtsNotify', 'gtsNotify', MODX_CORE_PATH . 'components/gtsnotify/model/', []);<br />
if ($gtsNotify) {<br />
    $mess = [<br />
        'message' => "{$message}",<br />
    ];<br />
    if($notify = $this->gtsNotify->create_notify($mess)){<br />
        $notify->addPurposeGroups('1,5,11','material_error');<br />
        $notify->save();<br />
        $notify->send();<br />
    }<br />
}<br />

Функции назначения получателей:
<br />
$notify->addPurposeGroups(Группы пользователей MODX через запятую,Имя канала, Ссылка в уведомлении);<br />
$notify->addPurpose($user_id,$channels,$url = '')<br />

В браузере получаем сообщения:
<br />
document.addEventListener("gtsnotifyprovider", function(event) { <br />
    //console.log('notify',event.detail);<br />
    for(var key in event.detail.channels) {<br />
        if(key == 'RealMessenger'){<br />
            user_data = event.detail.channels[key].data.user_data;<br />
            for(var chat in user_data) {<br />
                $el_chat = $('.realmessenger-chat[data-id="' + chat + '"]');<br />
                $badge = $el_chat.find('.messages-new-count');<br />
                $badge.text(user_data[chat].chat_count);<br />
                if(user_data[chat].chat_count == 0){<br />
                    $badge.hide();<br />
                }else{<br />
                    $badge.show();<br />
                    if($el_chat.hasClass("active")){<br />
                        $messages = $(event.detail.data.messages);<br />
                        $messages.removeClass('ownmessage');<br />
                        $('#realmessenger-messages').append($messages);<br />
                        var d = $('#realmessenger-messages');<br />
                        d.scrollTop(d.prop("scrollHeight"));<br />
                    }<br />
                }<br />
            }<br />
        }<br />
    }<br />
});<br />

19 сентября 2020, 05:43    Александр Туниеков Компоненты 0    6 0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Вы можете авторизоваться на сайте через:
    YandexGoogle