Валентина Павлова
С нами с 17 мая 2017; Место в рейтинге пользователей: #537Ошибка при смене статуса заказа
Появляется ошибка ms2_err_status_fixed «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.»
При повторном клике — Невозможно оформить пустой заказ.
При повторном клике — Невозможно оформить пустой заказ.
Minishop2 + 2 контекста, отправка почты
Есть Minishop2 на двух контекстах, в оба контекста добавлен разный параметр emailsender.
Но отправка почты идет с одного контекста — web.
Как добиться разных отправителей (с разных доменов)?
Спасибо.
Но отправка почты идет с одного контекста — web.
Как добиться разных отправителей (с разных доменов)?
Спасибо.
Изменение цены в зависимости от типа валюты (в tv-параметре)
<?php
switch($modx->event->name) {
case 'msOnGetProductFields':
$returned_values = & $modx->event->returnedValues;
$values = $modx->event->params['data'];
$product = $modx->getObject('msProduct', $product->id);
$currency_type = $product->getTVValue('valuta'); //Тип валюты
$currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса
if (isset($currency)) {
$returned_values['price'] = round($values['price'] * $currency); // Округление цены;
}
$modx->log(1,'returned_price - ' . $returned_values['price'] );
$modx->log(1,'current_type - ' . $currency_type );
$modx->log(1,'currency - ' . $currency );
break;
}
Почему-то логи пишет корректно, но цена не меняется.Если убрать эти строки
$product = $modx->getObject('msProduct', $product->id);
$currency_type = $product->getTVValue('valuta'); //Тип валюты
$currency = $modx->getOption('currency_'.strtoupper($currency_type)); //Значение курса
, работает. С ними все ломается… Отложенная отправка писем из minishop2 клиенту
Стояла задача ускорить формирование заказа. Слабым звеном на сайте оказалась отправка почты. Было решено ее отправлять после формирования заказа.
Для этого возникла идея сделать следующее:
1. Отключаем оповещение у новых заказов
2. Создаем новый статус заказа Оповещение с идентичными чанками.
3. Пишем сниппет и вызываем его из CronManager:
Вопрос: все ли сделано верно и есть ли более правильное решение?
Для этого возникла идея сделать следующее:
1. Отключаем оповещение у новых заказов
2. Создаем новый статус заказа Оповещение с идентичными чанками.
3. Пишем сниппет и вызываем его из CronManager:
<?php
// смотрим последний заказ
$c = $modx->newQuery('msOrder');
$c->where(array('type' => 0));
$c->limit(1);
$c->sortby('id', DESC);
$miniShop2 = $modx->getService('miniShop2');
$results = $modx->getIterator('msOrder', $c);
foreach ($results as $result) {
$order_id = $result->get('id');
$status = $result->get('status');\
// если статус заказа Новый
if ($status == '1') {
$miniShop2->changeOrderStatus($order_id, 25);
$output = $order_id.' - '.$status;
}
}
//Пишем результат в лог по адресу: core/cache/logs/order.new.log
$modx->log(modX::LOG_LEVEL_ERROR,$order_id, array(
'target' => 'FILE',
'options' => array(
'filename' => 'order.new.log'
)
));
return $output;
Вроде все работает. Вопрос: все ли сделано верно и есть ли более правильное решение?