Перейти к содержанию
Официальный форум поддержки Simpla

[2.1.5]модуль email рассылки


Рекомендуемые сообщения

Сайт-источник:

http://belfast.by/blog/simpla-cms-mailing/

 

Представляю Вашему вниманию модуль
рассылки для Simpla CMS. Данный модуль не претендует на полноценную
систему отправки писем по неимоверному множеству адресатов, однако
предоставляет нужный функционал для создания рассылки новостей для
интернет-магазина.
 
Данный модуль разрабатывался с учётом особенностей SimplaCMS v2.1.5. Для корректной работы на иных версиях SimplaCMS следует модифицировать код!

Для начала давайте откорректируем несколько файлов, для отображения нашего раздела «Рассылка» в панеле администрирования. Нам потребуются файлы settings.tpl, currency.tpl, deliveries.tpl, payment_method.tpl, payment_methods.tpl, расположенные в папке \simpla\design\html\.

 

Для каждого из файлов, перед 6 (шестой) строкой, приблизительно, содержащей

{/capture}

вставляем новую строку

<li><a href="index.php?module=MailingMethodsAdmin">Рассылка</a></li>

Для хранения списка адресатов и их настроек (полную версию ожидайте позднее) нам потребуется отдельная таблица в базе данных.

CREATE TABLE IF NOT EXISTS `s_mailing` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `types` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
);

Внесением новых записей в БД будет заниматься страница пользователя. Поправим немного \view\UserView.php.


[1]Заменить:

if(empty($this->user))

[1]На:

if(empty($this->user) && !$this->request->post('mailing_email'))

[2]Заменить:

if($this->request->method('post') && $this->request->post('name'))

[2]На:

if(empty($this->user) && !$this->request->post('mailing_email'))
        {
            header('Location: '.$this->config->root_url.'/user/login');
            exit();
        }
        if($this->request->method('post') && $this->request->post('mailing_email'))
        {
            if(filter_var(trim($this->request->post('mailing_email')), FILTER_VALIDATE_EMAIL))
            {
                $query = $this->db->placehold('select id from __mailing where email=?', $this->request->post('mailing_email'));
                $this->db->query($query);
                if($this->db->num_rows() < 1)
                {
                    $query = $this->db->placehold('insert into __mailing(`email`)VALUES(?)', $this->request->post('mailing_email'));
                    $this->db->query($query);
                }
            }
            else
            {
                $this->design->assign('error', 'email_syntax');
            }
        }
        elseif($this->request->method('get') && $this->request->get('unsubscribe') && $this->request->get('mail'))
        {
            if(filter_var($this->request->get('mail'), FILTER_VALIDATE_EMAIL)){
                $query = $this->db->placehold('select id from __mailing where email=?', $this->request->get('mail'));
                $this->db->query($query);
                if($this->db->num_rows() > 0){
                $hash = md5($this->settings->license.$this->request->get('mail'));
                    if($hash == $this->request->get('unsubscribe')){
                        $query = $this->db->placehold('delete from __mailing where email=?', $this->request->get('mail'));
                        $this->db->query($query);
                    }else{
                        $this->design->assign('error', '00001');
                    }
                }else{
                    $this->design->assign('error', '00001');
                }
            }else{
                $this->design->assign('error', 'email_syntax');
            }
        }
        elseif($this->request->method('post') && $this->request->post('name'))

[3]Заменить:

$this->design->assign('meta_title', $this->user->name);

[3]На:

if(!$this->request->post('mailing_email')){$this->design->assign('meta_title', $this->user->name);}else{$this->design->assign('meta_title', 'Подписка на рассылку');}

И собственно сам файл шаблона страницы пользователя \design\%mytempate%\html\user.tpl.


Заменить:

<h1>{$user->name|escape}</h1>

На:

{if $smarty.get.page && ($smarty.get.page == 'mailing' || $smarty.get.page == 'mailing_settings')}<h1>ПОДПИСКА</h1>
    {if $smarty.post.mailing_email && !$error}
        Вы успешно подписаны на рыссылку новостей.
    {/if}
    {if $smarty.get.unsubscribe && !$error}Вы успешно отписаны от рыссылки.{/if}
    {if $error}<div class="message_error">{if $error == 'email_syntax'}Некорректно введён email.{elseif $error == '00001'}Вы не подписаны на рассылку.{/if}</div>{/if}
{else} <h1>{$user->name|escape}</h1> {/if}

В завершение, нам понадобится создать два новых файла — шаблон и обработчик.

Смотрите в прикрепленных файлах.

\simpla\design\html\mailing_methods.tpl

\simpla\MailingMethodsAdmin.php

 

Код формы для добавления адресатов:

<form action="/user/?page=mailing" method="post">
<p><input type="text" name="mailing_email" /></p><p><input class="submit_btn" type="submit" value="Подписаться" /></p>
</form>

 


 

simpla-cms-mailing.zip

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Кому интересно есть такой вариант (отдельный движок):
http://mail.aima.pp.ua/
admin
admin
Делал на заказ. Рассылает любое количество писем при этом не забивая канал...

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

Кому интересно есть такой вариант (отдельный движок):

http://mail.aima.pp.ua/

admin

admin

Делал на заказ. Рассылает любое количество писем при этом не забивая канал...

Откуда берутся мыльники?

Как работает отправка по дате (времени) исполняющий файл в крон?

Собственно цена разработки?

Ссылка на сообщение
Поделиться на другие сайты

Откуда берутся мыльники?

Как работает отправка по дате (времени) исполняющий файл в крон?

Собственно цена разработки?

email берутся с текстовых файлов (Можно прикрутить к чему либо другому).

Отправка идет по крону. Отправляет пачку определенного размера (с конфига берется) по вызову задания с крона. цена 40$ 

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...