Message Queue API
Как известно, в Друпале для внезапного показа пользователям сообщений от системы есть функция — drupal_set_message(). Однако, к сожалению, эта функция умеет выставлять сообщения только для показа текущему пользователю. А иной раз хотелось бы отправить системное сообщение другому пользователю, чтобы он увидел его сразу, как только появится на сайте. И чтоб сообщение не пропало, а смиренно ждало прихода своего адресата.
С этой целью быстренько набросал крохотный модуль Message Queue API. Модуль предоставляет разработчику функцию:
hook_init()), нет ли для текущего пользователя в базе сообщений. И как только адресат зайдет на сайт, в hook_init все адресованные ему сообщения будут считаны из базы и выставлены через drupal_set_message(). Примерно вот так:
Из базы показанные сообщения будут, естественно, удалены.
Собственно, модуль еще очень маленький (кода — на две страницы) и кроме описанного больше ничего не делает. Но в дальнейшем планирую сделать некоторые улучшения, такие как:
- вывод не более N сообщений за раз;
- возможность выставлять сообщения разного типа (статусы drupal_set_message);
- возможность выставлять сообщения с аяксифицированной кнопкой «Ок» (или «Убрать», или с крестиком), которые не исчезнут, пока адресат на кнопку не нажмет.
- стандартный триггер-экшн отправки сообщения.
Кроме того, предлагаю дорогим читателям:
- поделиться, если кто использует другие, упущенные мной модули, успешно решающие задачу отправки системного сообщения заданному пользователю, или альтернативные средства решения (кроме электрической почты);
- предложить любые идеи по улучшению модуля;
- сообщить, пригодился бы вам такой модуль в принципе (если нет — можно не сообщать).
Ну и конечно можно просто скачать модуль:
Messages Queue API 0.2
Да знаю я :)
Это для наглядности.
А каков спектр применения модуля. Что ты собираешься посылать пользователям? :)
Например (например) выдал ты пользователю роль и хочешь сообщить об открывшихся возможностях (что, кстати, наводит на мысль - надо сделать триггер-экшн). Или хочешь сообщить что пользователь принят/исключен из какой-нибудь группы.
В общем, все то, что ты хочешь показать ненавязчиво, не прибегая к email-ам и т.п. Я к сожалению не могу пока рассказать, зачем это нужно лично мне :)
Когда мне понадобилось из модуля отправлять сообщения пользователю, я обошёлся API рядом лежавшего privatemsg (новопришедшему юзеру сообщение выводится как раз через drupal_set_message()).
Ваш модуль будет полезен, когда не захочется тащить целый "почтарь" за собой =)
Вы не планируете публикацию модуля на drupal.org?
Восьминог, со мной можно на "ты" :)
Про privatemsg я думал, не стал его использовать как раз поэтому - чтобы не тащить за собой лишнее.
Пилил и делал для такой цели модуль poke - вроде на Д.ру выкладывал
Поиск не находит - ни на D.org, ни на Д.ру.
Здорово =)
Публикация на drupal.org несомненно полезна, ведь есть много любителей написать
% drush dl message_queue_api && drush en message_queue_api
вроде меня =)
Кроме того, на хороший проект и контрибьюторы набежать могут ;)
drush - это конечно хорошо, но вспоминая, сколько я в прошлый раз с Киамом бодался за доступ... В общем, подумаю :)
message_queue_api_set_message длинноватое имя для функции,
Удобно такую функцию применить для различного рода напоминалок. Например о новых комментариях в подписанных темах или о личных сообщениях.
Я бы укоротил название функции, что то вроде mq_set_message
и добавил статус сообщения как в drupal_set_message.
Можно сделать две сигнатуры:
Если тип второго параметра int то:
function mq_set_message($message, $uid);
А если нет то:
function mq_set_message($message, $status, $uid);
Насчет длины - я думал, это никого не напрягает с современными средствами по автодополнению. Но если надо, могу и укоротить (mqa_set_message).
Статусы да, сделаю. Две сигнатуры необязательно, можно просто третий аргумент с дефолтным значением.















интересно.
в первом скриншоте некорректно передавать в t() русский текст :)