Jump to content

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


Recommended Posts

post-22492-0-09250700-1528215127_thumb.png

 

Отправляется содержимое полного описания. Тема письма - название записи. Письма отправляются каждому пользователю отдельно. Или только администратору (Обратный адрес оповещений).
Совместимость - 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 и загнать письмо в шаблон, добавить там логотип или сверстать как-то красиво, но мне лень)

Link to post
Share on other sites

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

 

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

 

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

 

 

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

 

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

 

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

Link to post
Share on other sites

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

 

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

 

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites
  • 8 months later...

 

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

 

 
подскажите пожалуйста, как сделать загнать в шаблон?
Link to post
Share on other sites
  • 2 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...