Как сделать подписку на сайте (V2)
Я уже писал когда-то очень давно статью по созданию подписки на сайте, однако, за это время я уже разработал более простой и удобный механизм реализации подписки на сайте, и давайте его разберём.
Так же как и в прошлой версии у Вас должна быть таблица со статьями или постами на блоге. Так же у Вас должна быть таблица подписчиков на обновления и таблица с очередью рассылки.
Таблица со статьями (articles):
- id - уникальный идентификатор.
- title - заголовок статьи.
- text - текст статьи.
Таблица с подписчиками (subscribers):
- id - уникальный идентификатор.
- email - e-mail подписчика.
Таблица с очередью рассылки (turn):
- id - уникальный идентификатор.
- email - e-mail подписчика, которому нужно отправить сообщение. Вместо него можно использовать subscriber_id, но в целях упрощения понимания, возьмём простейший вариант.
- article_id - уникальный идентификатор той статьи, по которой нужно отправить уведомление
- is_send - отправлено письмо или нет.
Разберём код 1-го скрипта, отвечающего за добавление подписчиков в очередь рассылки:
<?php
$mysqli = new mysqli("localhost", "root", "", "mydb"); // Подключаемся к базе
$rs = $mysqli->query("SELECT MAX(`article_id`) as `max` FROM `turn`"); // Узнаём id последней отправленной статьи
$row = $rs->fetch_assoc();
$last_article_id = $row["max"];
$rs = $mysqli->query("SELECT `id` FROM `articles` WHERE `id` > '$last_article_id'"); // Берём все новые статьи (то есть те, которые ещё не отправлены)
$rs_subscribers = $mysqli->query("SELECT * FROM `subscribers`"); // Получаем всех подписчиков
while (($row = $rs->fetch_assoc()) != false) {
/* Перебор новых статей */
$article_id = $row["id"];
while (($row_subscribers = $rs_subscribers->fetch_assoc()) != false) {
/* Перебор подписчиков */
$mysqli->query("INSERT INTO `turn` (`email`, `article_id`, `is_send`) VALUES ('".$row_subscribers["email"]."', '$article_id', '0')"); // Добавляем в очередь рассылки каждого подписчика
}
}
$mysqli->close();
?>
Теперь рассмотрим код 2-го скрипта, отвечающего за непосредственную отправку:
<?php
$mysqli = new mysqli("localhost", "root", "", "mydb"); // Подключаемся к базе
$rs = $mysqli->query("SELECT * FROM `subscribers` WHERE `is_send` = '0' ORDER BY `id` LIMIT 10"); // Берём 10 подписчиков, которым ещё не отправлено письмо
while (($row = $rs->fetch_assoc()) != false) {
$rs_article = $mysqli->query("SELECT * FROM `articles` WHERE `id`='".$row["article_id"]."'"); // Берём информацию о статье
$row_article = $rs_article->fetch_assoc();
$success = mail($row["email"], $row_article["title"], "Появилась новая статья..."); // Отправляем e-mail
if ($success) $mysqli->query("UPDATE `turn` SET `is_send` = '1' WHERE `id` = '".$row["id"]."'"); // Если e-mail отправлен, то ставим is_send=1, сообщающий о том, что подписчику отправлено письмо
}
$mysqli->close();
?>
Теперь самое основное - смысл алгоритма. Скрипт запускается автоматически через cron, анализирует появление новых статей и добавляет сразу же в очередь рассылки всех подписчиков. Далее другой автоматический скрипт просто берёт всех тех, кому ещё не отправлено письмо и отправляет его.
На мой взгляд, данный алгоритм намного яснее и проще для понимания, чем тот, о котором я писал раньше. Сразу говорю, код сырой, так же он не протестированный, поэтому в нём возможны ошибки. Но алгоритм абсолютно верный, он понятный и он рабочий, поэтому пользуйтесь при создании подписки на своём сайте.
-
- Михаил Русаков
Комментарии (8):
Спасибо, но мне кажется что тот намного проще, хоть и с ошибками. Хотя все ошибки я раскрыл на форуме, но это не главное... Михаил, напишите пожалуйста статью про древовидные комментарии, напишите всё, от формы, php скрипта, и до самого javascript... Сделали бы новую категорию, и назвали бы её "Проекты", и выкладывали бы там статьи разделённые по частям. Вот и сделайте разделённую статью про древовидные комментарии. рады были бы все подписчики и читатели без исключения. Напишите стоящую статью, чтобы мы знали что вы стараетесь именно для нас, и пишите статьи которые мы просим, хоть они и очень сложные и большие.
Ответить
Михаил,можно как-то это сделать без PHP и базы данных. Например,через HTML,CSS и java script. Если да то как?
Ответить
Мда. Рано вы читаете такие статьи, если не понимаете ещё элементарных вещей. Вернитесь к другим темам. Изучите их. Поймите разницу между сервером и клиентом. Потом уже читайте данную статью. Советую книгу почитать Автор Дмитрий Котеров "PHP5 в подлиннике" хорошая книга.
Ответить
А вы сами читали ее? И в каком формате?
Ответить
Конечно читал. в формате DJVU с помощью программы DJVU Reader
Ответить
Мдааааааа........ Купили бы нормальную книгу.,.... В электронном не удобно читать...
Ответить
Зато бесплатно;)
Ответить
И то верно, халява всему голова :)
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.