Предисловие
Я знаю о существовании модулей 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
ссылка на оригинал статьи http://habrahabr.ru/post/208854/
Добавить комментарий