Private Message Notification - не работает счетчик сообщений без перезагрузки страницы.

Главные вкладки

Аватар пользователя VasyOK VasyOK 10 марта 2020 в 22:27

В модуле Private Message (8.x-2.0-beta16) есть блок Private Message Notification.

В его настройках
Ajax refresh rate
The number of seconds between checks to see if there are any new messages...
поставил тут "2"

Этот блок показывает, что есть новое сообщение только после перезагрузки страницы. Это так и надо? Или нужно что-то через node.js делать?

Комментарии

Аватар пользователя VasyOK VasyOK 10 марта 2020 в 23:15

issues смотрел, но патчи, что понаписывали индийцы датируется ранним временем чем последняя версия.

Мне как бы для начала понять действительно ли это ошибка?

Аватар пользователя ivnish ivnish 11 марта 2020 в 23:39

Да, мы недавно с коллегами этот вопрос обсуждали. Скорее всего модуль для восьмерки непопулярен и медленно разрабатывается, потому что... время личных сообщений на сайтах прошло. Серьезно. Сейчас 100500 способов общения, одних только месенджеров вагон и тележка.

Аватар пользователя DD 85 DD 85 11 марта 2020 в 23:31

VasyOK wrote:

Этот блок показывает, что есть новое сообщение только после перезагрузки страницы. Это так и надо? Или нужно что-то через node.js делать?

Пока только так.

Аватар пользователя VasyOK VasyOK 15 марта 2020 в 15:51

Насколько я понял, виной всему BigPipe.
Патч тут https://www.drupal.org/project/private_message/issues/3041599
При беглом тестировании работает.
Страница messages теперь делается вьюхой.
Если кто-то хочет что-то сказать - пожалуйста.

Аватар пользователя buddy90210 buddy90210 15 марта 2020 в 18:32

Попробуй через хуки, программно обнавлять данный блок, полагаю nodejs сервер функционирует раз задаешься этим вопросом. Например:

<?phpfunction module_entity_update(Drupal\Core\Entity\EntityInterface $entity) {
  $etype = $entity->getEntityTypeId();
  $type = $entity->bundle();
  if ($etype == 'node' && $type == 'article') {
      $subject = 'subject';
      $body = 'body';
      $uid = 1;
      $message = (object) array(
    'data' => (object) array(
      'subject' => $subject,
      'body' => $body,
    ),
    'channel' => 'nodejs_user_' . $uid,
    'callback' => 'nodejsNotifyModule',
  );
  nodejs_enqueue_message($message);
  }
}?>

А в яваскрипте как то так:

(function ($) {
Drupal.Nodejs.callbacks.nodejsNotifyModule = {
  callback: function (message) {
          var new_messages = $('#target').prepend(message.data.body);
          Drupal.attachBehaviors(new_messages);
          //$('.view-id-machine_name').trigger('RefreshView'); // так, кстати обнавляет Views, в реальном времени, но думаю это не совсем правильное использование Nodejs
  }
};
})(jQuery);