Однажды потребовалось добавлять в корзину сразу несколько различных товаров. Например, по акции продаются хомячок пушистый, хомячок голодный и хомячок безродный. Одной кнопкой отправить в корзину всех трех.
Специфические для конкретной реализации методы проверки наличия товаров в акции я опускаю, а вот как можно положить в корзину несколько товаров:
1) установить режим, при котором после добавления товара в корзину методом basket не происходит редиректа $_REQUEST['no-redirect'] = 1
2) В цикле положить все товары
3) Редирект куда нужно.
public function buynow(){
$id = getRequest('param0');
$referer = getServer('HTTP_REFERER');
$_REQUEST['no-redirect'] = 1;
if($id) {
$oCatalog = cmsController::getInstance()->getModule('catalog');
$oMarket = cmsController::getInstance()->getModule('emarket');
//проверить, что мы в акциях
if($oCatalog -> isThisAction($id)){//да, это акции. Кастомный метод
//получить товары в акции
$els = $oCatalog->inAction($id); //Кастомный метод
foreach($els as $item){
$oMarket->basket('put','element',$item->id);
}
}
else {//положить в корзину текущий товар и перейти в корзину
$oMarket->basket('put','element',$id, 1);
}
$referer = '/cart/';//Страница с корзиной
}
$this->redirect($referer);
}