Опытные специалисты по повышению посещаемости сайта знают, что подписка на обновления сайта - это очень хороший инструмент для увеличения постоянной аудитории сайта . Однако, не все знают, как такое реализовать. Поэтому в этом материале я расскажу, как сделать подписку на сайте .
Опытные специалисты по повышению посещаемости сайта знают, что подписка на обновления сайта - это очень хороший инструмент для увеличения постоянной аудитории сайта. Однако, не все знают, как такое реализовать. Поэтому в этом материале я расскажу, как сделать подписку на сайте.
Для того, чтобы сделать подписку на обновления сайта, надо воспользоваться одним из двух вариантов:
- Воспользоваться каким-нибудь сторонним сервисом. Могу порекомендовать feedburner.google.com. Это наиболее простой способ, но, правда, Вы будете зависеть от стороннего сервиса, вдобавок, в каждое письмо будут вставляться чужие ссылки, что не очень хорошо.
- Сделать собственную подписку на сайте. Этот способ более трудоёмкий, но зато абсолютно всё под Вашим контролем. Что отправлять, как отправлять, куда отправлять - всё решаете Вы. Вот об этом способе я и расскажу ниже немного подробнее.
Сразу отмечу, что первый способ значительно популярнее, поскольку он простой и надёжный. А второй будет достаточно тяжёлым в реализации и достаточно крупным, поэтому кратко буду описывать основные проблемы и алгоритм работы.
Самая главная проблема, который возникнет - это ограничение хостингов на количество отсылаемых писем. Вывод из этого простой: нельзя отправлять сразу всем подписчикам письма. И нужно каждую рассылку разбивать на несколько этапов. Например, отправлять каждые 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-ти подписчикам, а если всё разослано, то при наличии новых статей на сайте, добавляем их в очередь рассылки.
