[Решено] Как программно изменить заказ 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 — оно просто не отлавливается поскольку обновление делается в обход.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.