Иногда бывает так, что нужно провести акцию, что при покупке двух и более разных товаров их общая стоимость будет акционной. Это можно реализовать через отдельный комплектный товар. Ниже описано как это сделать.
Вам нужно создать плагин и повесить его на событие msOnAddToCart и написать в нем следующий код:
<?php
switch ($modx->event->name) {
case 'msOnAddToCart':
$cartArray = $cart->get();
//id комплектного товара
$idKomplekt = 11;
// id товаров, которые входят в комплект. Если все эти товары есть в корзине, то они будут кратно уменьшены и добавлен товар-комплект.
$productsToKomplekt = [
7,
8,
];
$komplektProductsKeys = [];
foreach ($cartArray as $k => $cartProduct) {
if (in_array($cartProduct['id'], $productsToKomplekt)) {
$komplektProductsKeys[] = $k;
}
if (count($productsToKomplekt) == count($komplektProductsKeys)) {
break;
}
}
if (count($productsToKomplekt) == count($komplektProductsKeys)) {
$min_count = 9999;
foreach ($komplektProductsKeys as $k) {
if ($cartArray[$k]['count'] < $min_count) {
$min_count = $cartArray[$k]['count'];
}
if ($min_count == 1) {
break;
}
}
foreach ($komplektProductsKeys as $k) {
if ($cartArray[$k]['count'] > $min_count) {
$cartArray[$k]['count'] = $cartArray[$k]['count'] - $min_count;
} else {
unset($cartArray[$k]);
}
}
$cart->set($cartArray);
$cart->add($idKomplekt, $min_count);
}
break;
}