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

Как сделать подписку на сайте

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

Для того, чтобы сделать подписку на обновления сайта, надо воспользоваться одним из двух вариантов:

  1. Воспользоваться каким-нибудь сторонним сервисом. Могу порекомендовать feedburner.google.com. Это наиболее простой способ, но, правда, Вы будете зависеть от стороннего сервиса, вдобавок, в каждое письмо будут вставляться чужие ссылки, что не очень хорошо.
  2. Сделать собственную подписку на сайте. Этот способ более трудоёмкий, но зато абсолютно всё под Вашим контролем. Что отправлять, как отправлять, куда отправлять - всё решаете Вы. Вот об этом способе я и расскажу ниже немного подробнее.

Сразу отмечу, что первый способ значительно популярнее, поскольку он простой и надёжный. А второй будет достаточно тяжёлым в реализации и достаточно крупным, поэтому кратко буду описывать основные проблемы и алгоритм работы.

Самая главная проблема, который возникнет - это ограничение хостингов на количество отсылаемых писем. Вывод из этого простой: нельзя отправлять сразу всем подписчикам письма. И нужно каждую рассылку разбивать на несколько этапов. Например, отправлять каждые 10 минут по 10 писем.

Теперь давайте создадим таблицу подписчиков со следующими полями:

  • id - уникальный идентификатор подписчика.
  • name - имя подписчика.

Безусловно, это почти самый минимум (можно и без имени). В реальности же можно добавить ещё дату подписки, список разделов, на которые подписывается пользователь и прочее.

И теперь необходимо создать таблицу, которая позволит решить проблему с ограничением количества отправляемых писем:

  • id - уникальный идентификатор последней рассылки.
  • post_id - уникальный идентификатор статьи (или поста) на сайте, о котором рассылается уведомление.
  • subscriber_id - уникальный идентификатор последнего подписчика, которому был отправлен выпуск.
  • end - закончена рассылка или нет.

Думаю, что с формой подписки и её обраткой Вы справитесь (если нет, то используйте 1-й вариант подписки на обновления, либо изучайте основы PHP).

А вот с самой рассылкой чуть посложнее, поэтому напишу шаблон кода скрипта, который Вам необходимо будет поставить на автозапуск в Cron (например, запуск через каждые 10 минут).

<?php
  $db = new mysqli("localhost", "root", "", "mydb"); // Подключаемся к базе данных
  $result_set = $db->query("SELECT * FROM `subscribe` WHERE `end`='0' LIMIT 1"); // Получаем 1 неоконченную рассылку
  $last_subscribe = $result_set->fetch_assoc(); // Преобразуем result_set в массив
  /* Если все рассылки уже отправлены, то смотрим: нет ли новых статей на сайте */
  if ($result_set->num_rows == 0) {
    $result_set = $db->query("SELECT * FROM `posts` WHERE `id`>'".$last_subscribe["post_id"]."' LIMIT 1");
    if ($result_set->num_rows == 0) exit; // Если ничего нового нет, то просто выходим
    $post = $result_set->fetch_assoc(); // Получаем данные о новой статье
    $db->query("INSERT INTO `subscribe` (`post_id`, `subscriber_id`, `end`) VALUES ('".$post["id"]."', '0', '0')"); // Добавляем в очередь новую рассылку
    exit; // Выходим, а через 10 минут данный скрипт будет снова запущен, и уже пойдёт непосредственно рассылка писем
  }
  $last_id = $last_subscribe["subscriber_id"]; // Получаем id подписчика, которому было отправлено письмо в последний раз
  $result_set = $db->query("SELECT * FROM `subscribers` WHERE `id`>$last_id");
  $count = 0;
  while (($row = $result_set->fetch_assoc()) !== false) {
    $subscriber_id = $row["id"];
    /* Здесь код для отправки письма через функцию mail() */
    $count++;
    if ($count == 10) {
      $db->query("UPDATE `subscribe` SET `subscriber_id`='$subscriber_id' WHERE `id`='".$last_subscribe["id"]."'"); // Обновляем информацию о последнем подписчике, которому было отправлено письмо
      break; // Выходим после 10-ти отправлений
    }
  }
  if ($result_set->num_rows <= 10) $db->query("UPDATE `subscribe` SET `end`='1' WHERE `id`=''".$last_subscribe["id"]."''"); // Всё отправлено
?>

Данный скрипт достаточно сложный, но реализует он очень простую вещь, которую кратко можно записать так: отправляем письма не более 10-ти подписчикам, а если всё разослано, то при наличии новых статей на сайте, добавляем их в очередь рассылки.