Получить корзину товаров в своем коде довольно просто:
// получить объект корзины:
$cart = $modx->commerce->getCart();
// или так:
$cart = ci()->carts->getCart('products');
// получить товары из корзины:
$items = $cart->getItems();
При создании корзины можно передать ее название вторым аргументом, и зарегистрированное хранилище - третьим:
new Commerce\Carts\ProductsCart($modx, $instance = 'products', $store = 'session');
Commerce по-умолчанию использует корзину товаров и списки сравнения и избранного. Любой из них может быть заменен в момент инициализации, например:
if ($modx->event->name == 'OnInitializeCommerce') {
$cart = new Commerce\Carts\ProductsCart($modx);
ci()->carts->addCart('products', $cart);
}
По умолчанию товары в корзине хранятся в сессии пользователя, списки сравнения и избранного - в cookies (только идентификаторы товаров). Способ хранения также может быть изменен при инициализации:
if ($modx->event->name == 'OnInitializeCommerce') {
class DatabaseCartStore extends Commerce\Carts\SessionCartStore {
// ...
}
ci()->carts->registerStore('database', DatabaseCartStore::class);
$cart = new Commerce\Carts\ProductsCart($modx, 'products', 'database');
ci()->carts->addCart('products', $cart);
}
$cart->add(array $item, $isMultiple = false);
В массиве $item
передается информация о товаре, должны быть как минимум id
и count
. Параметр isMultiple
означает множественное добавление, если равен true
, в случае успеха не вызывается событие OnCartChanged
.
$cart->addMultiple(array $items = []);
$cart->update($row, array $attributes = [], $isAdded = false);
В параметре $row
передается символьный идентификатор строки в корзине, в $attributes
- поля, которые нужно изменить. $isAdded
означает, было ли действие изначально добавлением товара или нет.
$cart->remove($row);
Удаляет товар из корзины по символьному идентификатору строки.
$cart->removeById($id);
Удаляет товары из корзины по уникальному идентификатору товара/ресурса в дереве.
$cart->clean();
$cart->setTitleField($field);
$cart->setPriceField($field);
$cart->getSubtotals(array &$rows, &$total);
Вызывается событие OnCollectSubtotals
, подитоги записываются в $rows
, итоговая сумма - в $total
.
Для получения обработчика заказа в своем коде нужно вызвать специальный метод Commerce:
$processor = $modx->commerce->loadProcessor();
$order = $processor->createOrder(array $items, array $fields);
$processor->addOrderHistory($order_id, &$status_id, &$comment = '', &$notify = false);
$processor->changeStatus($order_id, $status_id, $comment = '', $notify = false, $template = null);
$processor->updateOrder($order_id, $data = []);
$processor->deleteOrder($order_id);
$processor->getOrder();
$processor->loadOrder($order_id, $force = false);
$processor->loadOrderByHash($order_hash);
$processor->payOrderByHash($hash);
$processor->loadPayment($payment_id);
$processor->loadPaymentByHash($hash);
$processor->createPayment($order_id, $amount);
$processor->savePayment($payment);
$processor->getOrderPaymentsAmount($order_id);
$processor->isOrderStarted();
$processor->updateRawData($data);
$processor->getCurrentDelivery();
$processor->getCurrentPayment();