Pull to refresh

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

Reading time3 min
Views11K
Предисловие

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

Модуль Email Subscribe


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



Здесь можно настроить следующие параметры:
  • адрес email с которого будут приходить письма пользователям;
  • типы материалов, которые участвуют в рассылке;
  • интервал рассылки;
  • количество писем отправляемых за один запуск cron;
  • шаблоны писем для уведомления о новом контенте, подтверждения 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.

UPD:
Исправил небольшой баг: для зарегистрированных пользователей в форме подписки по умолчанию был их email, для анонимов выскакивала ошибка, что у объекта $user нет свойства mail.
UPD 2:
Исправил баг: в форме подписки $form["#action"] был относительный, а не абсолютный(слеш потерялся).
UPD 3:
Немного поменял алгоритм заполнения таблицы «email_subscribe_readed_nodes». Раньше попадали только опубликованные материалы, сейчас попадают также не опубликованные со статусом «Не прочитано».
UPD 4 от 20.03.2015:
Обновил до версии 1.0.3.2.
UPD 5 от 26.03.2015:
Обновил до версии 1.0.3.3.
UPD 5 от 24.12.2015:
Обновил до версии 1.0.4.
UPD 6 от 12.12.2016:
Обновил до версии 1.0.5.
UPD 7 от 18.01.2017:
Обновил до версии 1.0.5.1.
UPD 8 от 13.04.2019:
Обновил до версии 1.0.7.
Tags:
Hubs:
+6
Comments14

Articles

Change theme settings