Drupal 7 — Модуль подписки на новые материалы по email

в 10:04, , рубрики: drupal, drupal 7, метки:
Предисловие

Я знаю о существовании модулей SimpleNews, Notifications и т.д. Есть даже инструкции как это можно сделать с помощью существующих модулей. Мне кажется, слишком очень много нужно сделать, чтобы на сайте заработала простейшая рассылка по email. Решил немного исправить эту ситуацию. Модуль не претендует на оригинальность и гениальность. Хотелось сделать модуль простой в настройке и использовании.

Модуль Email Subscribe

Страница с настройками модуля:

Drupal 7 — Модуль подписки на новые материалы по email

Здесь можно настроить следующие параметры:

  • адрес email с которого будут приходить письма пользователям;
  • типы материалов, которые участвуют в рассылке;
  • интервал рассылки;
  • количество писем отправляемых за один запуск cron;
  • шаблоны писем для уведомления о новом контенте, подтверждения email, отмены подписки, возобновления подписки.

Страница со списком подписанных пользователей:

Drupal 7 — Модуль подписки на новые материалы по email

Алгоритм работы модуля

Есть таблица:

CREATE TABLE IF NOT EXISTS `email_subscribe_readed_nodes` (
  `rn_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Field ID',
  `rn_nid` int(10) unsigned DEFAULT NULL COMMENT 'Node ID',
  `rn_sid` int(10) unsigned DEFAULT NULL COMMENT 'Subscribe user id',
  `rn_status` smallint(6) NOT NULL DEFAULT '0' COMMENT '0-email don’t send, 1-email has been sented.',
  `datechange` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Date of change',
  PRIMARY KEY (`rn_id`),
  KEY `rn_nid` (`rn_nid`),
  KEY `rn_sid` (`rn_sid`),
  KEY `rn_status` (`rn_status`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

  • При подтверждении email или при создании нового материала эта таблица заполняется значениями с ID ноды и ID пользователя подписки.
  • При подтверждении email все материалы, опубликованные на данный момент для текущего пользователя, помечаются как прочитанные.
  • При создании материала, создаваемый материал помечается для каждого читателя не прочитанным.
  • При запуске cron отправляется email пользователям у которых есть непрочитанные материалы, и этот материал помечается прочитанным.

Интерфейс пользователя

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

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

Во всех случаях пользователю отправляется письмо с ссылкой на подтверждение выбранных действий.

Жду замечаний и предложений.

Модуль находится под лицензий BSD. Исходный код на Github и в песочнице на drupal.org.

Автор: servekon

Источник

  1. Зверек:

    Да чего-то не работает. Оно в принципе для анонимов может работать?

  2. Зверек:

    1. Аноним подписал свой ящик
    2. Получил письмо со ссылкой для подтверждения подписки и прошел по ссылке.
    После этих двух этапов админ видит, что ящик подписан. А в БД появились записи в соответствующих таблицах.
    3. Создаю новый материл.
    4. Запускаю крон.
    В этот момент по идее подписчику должно уйти письмо. Но увы.
    Письмо не уходит и rn_status=0 в таблице email_subscribe_readed_nodes

    Кстати, не понятно, зачем создавать таблицу, в которую пишутся все уже существующие материалы? У меня на сайте порядка 10тысяч материалов. Подписались 5 пользователей и таблица разбухла до 50 тысяч строк, которые совершенно не нужны, потому что содержат rn_status=1, означающие что эти материалы данный подписчик уже видел. Ну и нафига тогда?

  3. Зверек:

    Вобщем, всё работает. Не учла настройку-интервал отправки писем.
    Не хватает уведомлений на самом сайте при подписке на новости и при подтверждении из письма. Юзер может и не понять произошло что-то или нет. Сейчас просто перегружается страница и всё.
    И все же несколько смущает слишком большая таблица email_subscribe_readed_nodes, в которую копируются id всех материалов сайта для каждого юзера. Сначала подумала, что это для того, чтобы получать уведомления не только о создании новых материалов, но и о редактировании старых. Но правка одного из старых материалов не изменила статус на “отправить” в соответствующей таблице для этого материала. Не логичнее было бы в таблицу для отправки помещать только id новых материалов? И как только письмо юзеру уходит, строки из таблицы вообще удалять можно.

    • Зверек:

      Эх… рано обрадовалась модулю.
      Добавлено 5 новых материалов и юзер получает пять писем, вместо одного, в котором было бы 5 ссылок :(

      видимо придется все-таки разбираться с simplenews…

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js