servekon / drupal7_email_subscribe

2 stars 0 forks source link

Таблицы в БД #5

Closed Natalia-Ch closed 7 years ago

Natalia-Ch commented 8 years ago

Еще вопрос возник про таблицу email_subscribe_readed_nodes. Как я поняла при подписке юзера в нее копируются все nid уже существующих материалов. Не могу понять зачем? Если на сайте тысячи и даже десятки тысяч материалов и при этом сотни подписчиков, то таблица получится огромной и будет расти как на дрожжах с каждым новым подписчиком. Не логичнее было бы в эту таблицу писать nid-ы только вновь добавленных материалов? А после оправки письма подписчику и их удалять. То есть таблица будет содержать лишь nid-ы новых материалов для каждого подписчика.

servekon commented 8 years ago

Как в этом случае контролировать процесс: кому по каждой ноде уже отправлялось письмо, а кому нет? А если вы захотите опубликовать ранее добаленный, но не опубликованный материал?

Natalia-Ch commented 8 years ago

Реализованный вариант ничем не плох, на самом деле, с учетом того, что сотни тысяч записей в таблицах для mysql - это нормальное дело. Мне просто интересно с точки зрения архитектуры и минимизации дискового пространства... я бы такой алгоритм попыталась реализовать:

  1. Опубликован новый материал.
  2. nid этого материала пишется в email_subscribe_readed_nodes для каждого подписчика. rn_nid | rn_sid 10 | 1 10 | 2 10 | 3 так оно и есть сейчас.
  3. Срабатывает крон и по подписчикам уходят письма со ссылками на nid из этой таблицы. Если материалов несколько, они собираются в одном письме
  4. Как только письмо ушло даному подписчику, строки с данным подписчиком из таблицы удаляются.

То есть, если в таблице есть строки, то они должны быть отправлены. В этом и контроль.

"А если вы захотите опубликовать ранее добаленный, но не опубликованный материал?"

В таблицу должны попадать только опубликованные материалы. Запись в таблицу не только при добавлении материала со статусом "опубликовано", но и при смене статуса с "не" на "опубликовано".

servekon commented 8 years ago

Можно сделать проще. Просто добавить кнопку с очисткой устаревших данных. Я подумаю над этим.

servekon commented 8 years ago

Проделал достаточно много работы. Обновил модуль до версии 1.0.4. Основные изменения - возможность группировать материалы в одном письме. Но для этого нужно будет переделать шаблон "Сообщение о появлении нового контента". Еще в настройках появилась специальная галочка, чтобы не хранить информацию в таблице. Еще сделал форму для очистки этой таблицы.