[Решено] Как программно изменить заказ minishop2?
        Возникла необходимость написать свой внешний код, который позволил бы изменить заказ (состав товаров). То есть я знаю id заказа, и надо добавить или удалить товары из него. Если кто с этим сталкивался, подскажите как лучше это сделать, процессорами минишопа или еще как.
UPD. Решил вот как. Для начала покопался в самом минишопе, ибо сам он умеет делать то что мне надо через список заказов в админке, а значит у него есть для этого все необходимые педали.
Внешний код дергает внутренний сниппет. Во внутреннем сниппете для начала сделал авторизацию, дабы потом не было проблем с правами при использовании процессоров минишопа:
    
    
                                                                                
            UPD. Решил вот как. Для начала покопался в самом минишопе, ибо сам он умеет делать то что мне надо через список заказов в админке, а значит у него есть для этого все необходимые педали.
Внешний код дергает внутренний сниппет. Во внутреннем сниппете для начала сделал авторизацию, дабы потом не было проблем с правами при использовании процессоров минишопа:
$data = array(
        'username' => 'user', // юзер должен обладать правами менеджера магазина, как минимум
        'password' => 'pass', // настройку прав тут не буду описывать, равно как и безопасность
        'rememberme' => true,
        'login_context' => 'mgr' // логинимся в админку
    );
    $response = $modx->runProcessor('/security/login', $data);
    $user = $modx->getObject('modUser', array('username' => $data['username']));
    $modx->user = $user;  // без этого не фурычит!!!После этого можно спокойно вызывать процессоры минишопа. Под изменением заказа подразумеваю добавление, удаление и изменение количества товаров. Соответственно дергаю процессоры:- core/components/minishop2/processors/mgr/orders/product/create.class.php (добавление)
 - core/components/minishop2/processors/mgr/orders/product/remove.class.php (удаление )
 - core/components/minishop2/processors/mgr/orders/product/update.class.php (изменение количества)
 
// за кадром осталось получение id товара, его количества и цены за штуку
    $res = $modx->runProcessor(
        'mgr/orders/product/update', 
        array(
            'id' => $product_id, // тут внимательнее, нужен id товара из таблицы prefix_ms2_order_products,
            'count' => $count, // это количество, которое надо установить
            'price' => $price // это цена товара за штуку. сумму процессор посчитает сам
        ),
        array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/') 
    );
    return $res->response;Вот так. Если кому чего осталось непонятно, пишите, я расшифрую еще подробнее. Надеюсь кому-то поможет данное решение.    Комментарии: 4
                А как передавать сам заказ? Если передать просто товар, то не факт, что в нужном тебе заказе поменяется.            
                    
                UPD:
Понял. Нужно просто идентификатор самого товара из таблицы передавать.
                    Понял. Нужно просто идентификатор самого товара из таблицы передавать.
                да, товары, которые находятся в конкретном заказе, лежат в таблице ms2_order_products            
                    
                Подскажите. А есть ли возможность программно изменить состав заказа но не через processor? При таком решении не работает событие msOnUpdateOrder — оно просто не отлавливается поскольку обновление делается в обход.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.