Валентина Павлова

Валентина Павлова

С нами с 17 мая 2017; Место в рейтинге пользователей: #531

Ошибка при смене статуса заказа

Появляется ошибка ms2_err_status_fixed «Установлен фиксирующий статус. Вы не можете сменить его на более ранний.»
При повторном клике — Невозможно оформить пустой заказ.

Валентина Павлова
12 апреля 2023, 19:29
modx.pro
414
0

Minishop2 + 2 контекста, отправка почты

Есть Minishop2 на двух контекстах, в оба контекста добавлен разный параметр emailsender.
Но отправка почты идет с одного контекста — web.
Как добиться разных отправителей (с разных доменов)?
Спасибо.
Валентина Павлова
26 июля 2021, 14:01
modx.pro
386
0

Изменение цены в зависимости от типа валюты (в 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)); //Значение курса
, работает. С ними все ломается…
Валентина Павлова
08 июля 2021, 15:25
modx.pro
1
427
0

Отложенная отправка писем из minishop2 клиенту

Стояла задача ускорить формирование заказа. Слабым звеном на сайте оказалась отправка почты. Было решено ее отправлять после формирования заказа.

Для этого возникла идея сделать следующее:
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;
Вроде все работает.

Вопрос: все ли сделано верно и есть ли более правильное решение?
Валентина Павлова
17 февраля 2021, 18:32
modx.pro
2
597
+1