Перейти к содержимому


Фото
- - - - -

Уведомление клиентов (email) о записях в блоге

email блог

  • Чтобы отвечать, сперва войдите на форум
8 ответов в теме

#1 Takasu

Takasu
  • Пользователь
  • 13 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:КР

Опубликовано 05.06.2018 - 19:56

Прикрепленный файл  2018-06-05_191000.png   36,71К   17 раз скачано

 

Отправляется содержимое полного описания. Тема письма - название записи. Письма отправляются каждому пользователю отдельно. Или только администратору (Обратный адрес оповещений).
Совместимость - simpla 2.3.x, возможно подойдет на младшие версии.

Открываем файл - www\simpla\design\html\post.tpl
И после:

<!-- Параметры страницы (The End)-->

в моем случае строка 185, вставляем:

<!-- Параметры рассылки -->
<div class="block layer">
    <h2>Параметры рассылки</h2>
    <ul>
        <li><label class="property">Уведомить ?</label> <input name="mail_val" value="on" type="radio"></li>
        <li><label class="property">Тест (письмо админу)</label> <input name="mail_val" value="test" type="radio"></li>
    </ul>
</div>
<!-- Параметры рассылки (The End)-->

 

Дальше открываем - www\simpla\PostAdmin.php
И после:

$post->text = $this->request->post('body');

Вставляем:

$mail_val = $this->request->post('mail_val');

В этом-же файле немного дальше, после:

// Не допустить одинаковые URL разделов
if(($a = $this->blog->get_post($post->url)) && $a->id!=$post->id)
{
	$this->design->assign('message_error', 'url_exists');
}
else
{

Вставляем:

if ($mail_val=="on") {
    // Выбираем пользователей
    $data = $this->users->get_users();

    // И перебираем их в цикле
    foreach($data as $val) {
	// Готовим данные
	$info["subject"]    = $post->name;
	$info["email"]	    = $val->email;
	$info["text"]	    = $post->text;

	// Отправляем письмо
	$this->notify->report_mail($info);
    }
} elseif ($mail_val=="test") {
    // Отправляем тестовое письмо админу
    $info["subject"]	= $post->name;
    $info["email"]	= $this->settings->notify_from_email;
    $info["text"]	= $post->text;

    // Отправляем письмо
    $this->notify->report_mail($info);
}

Ну и напоследок открываем - www\api\Notify.php
Находим в самом верху:

function email($to, $subject, $message, $from = '', $reply_to = '')
{
    $headers = "MIME-Version: 1.0\n" ;
    $headers .= "Content-type: text/html; charset=utf-8; \r\n"; 
    $headers .= "From: $from\r\n";
    if(!empty($reply_to))
        $headers .= "reply-to: $reply_to\r\n";
    $subject = "=?utf-8?B?".base64_encode($subject)."?=";
    @mail($to, $subject, $message, $headers);
}

И после вставляем:

// Уведомление о новых записях в блоге
public function report_mail($info) {
    $this->email($info["email"], $info["subject"], $info["text"], $this->settings->notify_from_email, $this->settings->notify_from_email);
}

Последний кусок кода можно видоизменить по подобию функций email_order_user или email_order_admin и загнать письмо в шаблон, добавить там логотип или сверстать как-то красиво, но мне лень)



#2 phukortsin

phukortsin
  • Пользователь
  • 267 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 05.06.2018 - 20:36

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



#3 Takasu

Takasu
  • Пользователь
  • 13 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:КР

Опубликовано 05.06.2018 - 21:23

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


В теории возможно, на бесплатных хостингах и правда лучше не юзать.



#4 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 581 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 05.06.2018 - 23:04


В теории возможно, на бесплатных хостингах и правда лучше не юзать.

Правильнее кроном

#5 Takasu

Takasu
  • Пользователь
  • 13 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:КР

Опубликовано 06.06.2018 - 03:26

Правильнее кроном

 

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



#6 phukortsin

phukortsin
  • Пользователь
  • 267 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.06.2018 - 09:21


В теории возможно, на бесплатных хостингах и правда лучше не юзать.

 

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

 

 

Правильнее кроном

 

Дело вовсе не в том, кроном или не кроном. Дело в самой механике рассылки.  Надо рассылать небольшими порциями с растяжением во времени. А если пытаться отправлять сразу одним вызовом скрипта тысячи писем, хоть кроном, хоть не кроном, малоприятные сюрпризы обеспечены.

 

А при малых объемах рассылки, конечно, это все пойдет нормально.



#7 Takasu

Takasu
  • Пользователь
  • 13 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:КР

Опубликовано 06.06.2018 - 18:32

Дело вовсе не в том, кроном или не кроном. Дело в самой механике рассылки.  Надо рассылать небольшими порциями с растяжением во времени. А если пытаться отправлять сразу одним вызовом скрипта тысячи писем, хоть кроном, хоть не кроном, малоприятные сюрпризы обеспечены.

 

А при малых объемах рассылки, конечно, это все пойдет нормально.

 

Для крона как раз и можно прописать скрипт который бы каждые n минут вытягивал n пользователей и отправлял им письма, только это еще гора кода сверху.



#8 phukortsin

phukortsin
  • Пользователь
  • 267 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.06.2018 - 19:11

Для крона как раз и можно прописать скрипт который бы каждые n минут вытягивал n пользователей и отправлял им письма, только это еще гора кода сверху.

 

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



#9 Takasu

Takasu
  • Пользователь
  • 13 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:КР

Опубликовано 06.06.2018 - 20:51

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


Если это реально будет нужно, я сделаю.







Также с меткой «email, блог»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых