-
entry
1 -
comments
5 -
views
1,836
About this blog
1.Создать в опенкарте товары, которые логически будут выполнять роль подписок на новости
Здесь нужно предусмотреть возможность выбирать подразделы и длительность подписки (на основе опций)
2. сделать парсер, например, с помощью simplehtmldom, который будет записывать в БД всю необходимую новостную информацию c новостных порталов.
3. включить АПИ в админке opencart 3/0/2 по адресу site.ru/admin/index.php?route=user/api/edit. Сгенерировать ключ
4. вставить ключ АПИ в скрипт точки входа admin/subscmail.php
Программа будет подключаться к API opencart, чтобы оперировать всеми возможностями движка опенкарта для отправки писем подписчикам.
Скрипт admin/subscmail.php нужно поставить на автоматическое выполнение через крон каждый час.
5.В результате отработки subscmail.php происходит вызов метода index контроллера опенкарта catalog\controller\api\contact.php
Здесь подготавливаются данные, необходимые для рассылки: еmail отправителя, новостные материалы,email подписчиков. Для получения информации о подписках и новостных материалах, набежавшим по ним, используется методы модели catalog\model\api\contact.php:
getEmailsByProductsOrdered (получает данные о заказах (подписках) и новостные статьи)
getExperingSubscTotal (определяет по каждому действующему заказу — со статусом «оплачен,в работе» — суммарное количество истёкших подписок + подписок с остатком <=10 дней и количество оформленных подписок),
getProductsSubscRest (подсчитывает остатки времени по подпискам) Если БД содержит актуальные данные, по которым контроллер смог сформировать рассылочный пакет данных, то далее в нём вызывается метод sendEmail для отправки писем подписчикам.
Вся информация берется из таблиц БД:
- oc_subsc_protocol для протоколирования рассылок по каждому заказу. Позволяет скриптам определять моменты времени, когда уже пора отправлять письма.
- data_pars для хранения спарсенных новостных статей
- option_rubric_relation для сопоставление идентификаторов опций опенкарта с индетификаторами изданий/рубрик/подрубрик таблицы data_pars . Например, здесь прописано,
что опции 1.08 Происшествия опенкарта соответствуют Аиф происшествия таблицы парсера data_pars
- product_edition_relation для сопоставление идентификаторов продуктов опенкарта с идентификаторами изданий таблицы data_pars . Например, здесь прописано
что товару «АргументыИфакты» опенкарта соответствует издание Аиф таблицы парсера data_pars
- subsc_period хранит периоды рассылки дл каждого заказа. Если администратором не выбран период рассылки, то соответствующей записи в таблице не будет. В таком случае его значение берется по умолчанию равным 2раза/день.
6. для настройки периода рассылки по каждому заказу используется поле
страницы редактирования заказа по адресу site.ru/admin/index.php?route=sale/order/edit
Здесь в стандартный код опенкарта внесены изменения. Это файл admin\view\template\sale\order_form.twig
После строки
<div class="tab-pane active" id="tab-customer">
Добавлен код
<div class="form-group">
<label class="col-sm-2 control-label" for="input-mailperiod">Периодичность рассылки</label>
<div class="col-sm-8">
<input max="24" min="1" type="number" name="mailperiod" value="{{ mailperiod }}" placeholder="от 1 до 4 раз в день" id="input-mailperiod" class="form-control" />
</div>
<div class="col-sm-2">
<button type="button" id="button-save-period" class="btn btn-primary"><i class="fa fa-check-circle"></i> сохранить</button>
</div>
</div>
<script type="text/javascript">
$(document).on('click','#button-save-period',function () {
// Reward
$.ajax({
url: '{{ catalog }}index.php?route=api/contact/addMailPeriod&api_token={{ api_token }}&order_id={{ order_id }}',
type: 'post',
data: 'period=' + $('input[name=\'mailperiod\']').val(),
dataType: 'json',
crossDomain: true,
success: function(json) {
$('.alert-dismissible, .text-danger').remove();
$('.form-group').removeClass('has-error');
if (json['error']) {
$('#content > .container-fluid').prepend('<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> ' + json['error'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>');
// Highlight any found errors
$('input[name=\'reward\']').closest('.form-group').addClass('has-error');
}
if (json['success']) {
$('#content > .container-fluid').prepend('<div class="alert alert-success alert-dismissible"><i class="fa fa-check-circle"></i> ' + json['success'] + ' <button type="button" class="close" data-dismiss="alert">×</button></div>');
// Refresh products, vouchers and totals
setTimeout(function () {
$('#button-refresh').trigger('click')
},2000);
}
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
});
</script>
Entries in this blog
-
Recently Browsing 0 members
- No registered users viewing this page.