At the MODX Meetup today I was challenged to make it possible to link a cart in 30 minutes…
Add this snippet and visit the page with a products
query parameter containing the product IDs to add.
Might wrap this up in an installable module at a later time.
<?php
$path = $modx->getOption('commerce.core_path', null, MODX_CORE_PATH . 'components/commerce/') . 'model/commerce/';
$params = ['mode' => $modx->getOption('commerce.mode')];
/** @var Commerce|null $commerce */
$commerce = $modx->getService('commerce', 'Commerce', $path, $params);
if (!($commerce instanceof Commerce)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Could not load Commerce service in commerce.get_cart snippet.');
return 'Could not load Commerce. Please try again later.';
}
if ($commerce->isDisabled()) {
return $commerce->adapter->lexicon('commerce.mode.disabled.message');
}
$order = comOrder::loadUserOrder($commerce);
$productIDs = array_key_exists('products', $_GET) ? (string)$_GET['products'] : '';
$productIDs = array_map('intval', explode(',', $productIDs));
foreach ($productIDs as $pid) {
$product = $modx->getObject('comProduct', [
'id' => $pid,
'removed' => false,
]);
if ($product instanceof comProduct) {
/** @var comOrderItem $item */
$item = $modx->newObject('comOrderItem');
$item->fromProduct($product);
$order->addItem($item);
}
}
$order->calculate();
// Redirect to the cart
$cart = $modx->makeUrl($modx->getOption('commerce.cart_resource'));
$modx->sendRedirect($cart);