miniShop2: счетчик проданных товаров / уведомления
Здравствуйте, уважаемые MODX-профессионалы.
Есть пара вопросов, а именно по miniShop2.
В интернет-магазине, есть товары от пользователей и при их продаже (при статусе «Отправлен») нужно отправлять E-mail уведомление, типа «Ваш товар продан в количестве 1шт...».
И нужно это сделать в 2 этапа: счетчик проданных товаров и уведомление.
1) Счетчик проданных товаров:
Прочитал заметку bezumkin.ru/modx/minishop2/msearch2/1805/ и, как сделать счетчик количества проданных товаров, чтобы при статусе «Отправлен» в базу отправлялось +1?
2) E-mail уведомления:
Реализация хранения адреса видится либо через TV, либо через таблицу в MySQL базе. Что проще.
А вот функция отправки уведомления о проданном товаре, трудно сказать. Для менеджеров и пользователя есть, но с целым прайс-листом. Хотя, может и он сойдет.
Думаю, что это реализовывается доработкой 3-ёх файлов: «resolve.settings.php», «msorderstatus.map.inc.php», «minishop2.class.php», а именно добавлением новых событий/функций (не совсем понятно каких).
Возможно, есть более оптимальное решение, подскажите?
Заранее спасибо.
Есть пара вопросов, а именно по miniShop2.
В интернет-магазине, есть товары от пользователей и при их продаже (при статусе «Отправлен») нужно отправлять E-mail уведомление, типа «Ваш товар продан в количестве 1шт...».
И нужно это сделать в 2 этапа: счетчик проданных товаров и уведомление.
1) Счетчик проданных товаров:
Прочитал заметку bezumkin.ru/modx/minishop2/msearch2/1805/ и, как сделать счетчик количества проданных товаров, чтобы при статусе «Отправлен» в базу отправлялось +1?
2) E-mail уведомления:
Реализация хранения адреса видится либо через TV, либо через таблицу в MySQL базе. Что проще.
А вот функция отправки уведомления о проданном товаре, трудно сказать. Для менеджеров и пользователя есть, но с целым прайс-листом. Хотя, может и он сойдет.
Думаю, что это реализовывается доработкой 3-ёх файлов: «resolve.settings.php», «msorderstatus.map.inc.php», «minishop2.class.php», а именно добавлением новых событий/функций (не совсем понятно каких).
Возможно, есть более оптимальное решение, подскажите?
Заранее спасибо.
Комментарии: 9
Все это можно сделать плагином на событие msOnChangeOrderStatus.
Вопрос снова актуален и я бы хотел попросить вашей помощи, так как слабо разбираюсь в структуре MS2 и MODX.
Задача та же, а именно:
Главное — добавить количество проданных товаров из заказа в таблицу 'modx_ms2_products'.'sold' при статусе «отправлен».
И крайне желательно уведомить по почте, которую надо взять из 'modx_ms2_products'.'notify'.
Поля добавлены и работают по инструкции.
Сам зашел в тупик на данном моменте (и уже который час пытаюсь подобраться к товарам в заказе):
Очень надеюсь на поддержку программистов.
Задача та же, а именно:
Главное — добавить количество проданных товаров из заказа в таблицу 'modx_ms2_products'.'sold' при статусе «отправлен».
И крайне желательно уведомить по почте, которую надо взять из 'modx_ms2_products'.'notify'.
Поля добавлены и работают по инструкции.
Сам зашел в тупик на данном моменте (и уже который час пытаюсь подобраться к товарам в заказе):
<?php
// Switch Event
switch ($modx->event->name) {
// Get Event Name
case 'msOnChangeOrderStatus':
// If Status = Received
if ($status = 3) {
// 1 - SendMail to Test@Mail ('modx_ms2_products'.'notify')
$mailto = 'admin@localhost';
$subject = 'Тема письма';
$body = 'Содержимое письма';
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->setHTML(true);
$modx->mail->set(modMail::MAIL_BODY, $body);
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SUBJECT, trim($subject));
$modx->mail->address('to', trim($mailto));
$modx->mail->send();
$modx->mail->reset();
// 2 - Add count to 'modx_ms2_products'.'sold'
// ;_;
}
break;
}
Б… код будет исправлен. Самому неловко.Очень надеюсь на поддержку программистов.
Василий, большое спасибо за приведенную ссылку!
Пока что решил отложить почтовые уведомления, так как не могу дойти до свойств товара и начался рандом.
Как же взять/взаимодействовать с колонками (sold и notify) из msProductData? Подскажите кто-нибудь, пожалуйста.
Код, который выводит в лог цену товара и 2 пустых значения при изменении статуса на «Отправлен»:
В лог выдает, помимо значений, ошибки от «json_decode» и «pdoFetch». Напутал в разделе «Configure»?
Заранее спасибо.
Пока что решил отложить почтовые уведомления, так как не могу дойти до свойств товара и начался рандом.
Как же взять/взаимодействовать с колонками (sold и notify) из msProductData? Подскажите кто-нибудь, пожалуйста.
Код, который выводит в лог цену товара и 2 пустых значения при изменении статуса на «Отправлен»:
switch ($modx->event->name) {
// Get Event Name
case 'msOnChangeOrderStatus':
// If Status is Received
if ($status === 3) {
// Configure
$modx->loadClass('pdofetch', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true);
$modx->getService('pdofetch');
$modx->getService('minishop2');
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget('FILE');
// Get Order
$id = $order->get('id');
$products = $order->getMany('Products');
// Get Items: Price / Sold / Email
foreach ($products as $product) {
$modx->log(modX::LOG_LEVEL_INFO, print_r($product->get('price'), $id)); // OK
$modx->log(modX::LOG_LEVEL_INFO, print_r($product->get('sold'), $id)); // EMPTY
$modx->log(modX::LOG_LEVEL_INFO, print_r($product->get('notify'), $id)); // EMPTY
}
die();
}
break;
}
В лог выдает, помимо значений, ошибки от «json_decode» и «pdoFetch». Напутал в разделе «Configure»?
Заранее спасибо.
C задачей справился и, как здесь принято, решил поделиться наработкой из плагина.
Userful:
Тему можно считать «закрытой».
Userful:
// Если событие - "msOnChangeOrderStatus"
case 'msOnChangeOrderStatus':
// Если статус - "Отправлен"
if ($status == 3) {
// Настройка
$modx->getService('error','error.modError');
$modx->getService('mail', 'mail.modPHPMailer');
// Лог ведется в "Отчёты" > "Журнал ошибок"
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget('FILE');
// Переменные
$id = $order->get('id');
$products = $order->getMany('Products');
// Информация о заказе
$modx->log(modX::LOG_LEVEL_INFO, '==============================');
$modx->log(modX::LOG_LEVEL_INFO, ' Заказ #' . $id);
$modx->log(modX::LOG_LEVEL_INFO, '==============================');
// Вывод списка покупок из заказа
foreach ($products as $item) {
// Переменные
$product = $item->getOne('Product');
$count = $item->get('count');
// Информация о товаре
$modx->log(modX::LOG_LEVEL_INFO, 'Товар: "' . $product->get('pagetitle') . '" (#' . $product->get('id') . ')');
$modx->log(modX::LOG_LEVEL_INFO, 'Цена: ' . $product->get('price') . ' руб.');
$modx->log(modX::LOG_LEVEL_INFO, 'Количество: ' . $count . ' шт.');
// Отправка письма
$email = 'E-mail';
$subject = 'Тема письма';
$body = 'Содержимое письма';
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SUBJECT, trim($subject));
$modx->mail->set(modMail::MAIL_BODY, $body);
$modx->mail->setHTML(true);
$modx->mail->address('to', trim($email));
$modx->mail->send();
$modx->mail->reset();
}
// Сброс
die();
}
Тему можно считать «закрытой».
Но «счетчика проданных товаров» тут не увидел. (чтобы отнимался Count)…
Тема актуальна, как сделать такой счетчик?
Основа плагина — gist.github.com/artbelov/486a3f447ebdc1e395ae
Я сделал через TV, плагин на событие msOnCreateOrder
<?php
$products = $msOrder->getMany('Products');
foreach ($products as $item) {
$product = $item->getOne('Product');
$product_id = $product->id;
$product_qty = $item->count;
$res = $modx->getObject('modResource',$product_id);
$count = $res->getTVValue('ProductSalesQty');
$count = $count + $product_qty;
$res->setTVValue('ProductSalesQty', $count);
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.