Простая корзина. Кастомные методы
В кастом записываем методы работы с корзиной:
public function basket($sTemplate = "default") {
return basket::getInstance()->renderBasket($sTemplate);
}
public function basket_recalc() {
//пересчитать корзину
if (isset($_REQUEST['basket_items'])) {
$arrBasketItems = $_REQUEST['basket_items'];
foreach ($arrBasketItems as $iElementId => $arrItemInfo) {
if (isset($arrItemInfo['remove'])) {
basket::getInstance()->removeItem($iElementId);
} else {
basket::getInstance()->changeBasketItem($iElementId, $arrItemInfo);
}
}
}
$this->redirect(getServer('HTTP_REFERER'));
}
//ссылка положить единицу товара в корзину
public function addtobasket($iElementId, $sTemplate = "default") {
if (!$sTemplate) $sTemplate = "default";
list($sAddToCart) = $this->loadTemplates("tpls/webforms/basket/{$sTemplate}.tpl", "addtobasket");
$block_arr = array();
$block_arr['element_id'] = $iElementId;
$block_arr['link'] = $link_add = $this->pre_lang . "/webforms/addtobasket_do/{$iElementId}/";
return def_module::parseTemplate($sAddToCart, $block_arr);
}
//положить единицу товара в корзину
public function addtobasket_do() {
$id = isset($_REQUEST['param0'])? (int) $_REQUEST['param0'] : false;
if ($id) {
basket::getInstance()->addItem($id);
}
$this->redirect(getServer('HTTP_REFERER'));
}
/**
Выбор действия
*/
public function basket_change() {
if(isset($_POST['order'])){
$this->redirect('/webforms/order/');
}elseif(isset($_POST['recalc'])){
return $this -> basket_recalc();
}
$this->redirect(getServer('HTTP_REFERER'));
}
/**
Работа с заказами
*/
//оформляем заказ
public function order($sTemplate = "default") {
$sTpl = getRequest("param0");
$sFromPage = getRequest("from_page");
if (is_string($sTpl)) {
$sTemplate = $sTpl;
} elseif (!$sTemplate) {
$sTemplate = "default";
}
$s = basket::getInstance()->renderOrder($sTemplate);
return $s;
}
Метод отправки заказа на почту.
Как говорил, изначально предполагалось использовать методы webforms для отправки сообщений, т.о. можно было бы в интерфейсе модуля просматривать заказы. Увы, оказалось, что ЮМИ начисто вырезает html-форматирование и быстрого решения я не нашел. Пока пришлось сделать заглушку и отправлять письма вручную.
public function order_do(){
$email = getRequest('email');
$fio = getRequest('fio');
$phone = getRequest('phone');
$comments = getRequest('comments');
$items = basket::getInstance()->renderOrderItems();
$message = <<<END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "//www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Новый заказ на сайте</title>
</head>
<body>
<h2>Новый заказ на сайте</h2>
ФИО {$fio}
email {$email}
Телефон {$phone}
{$items}
<p><b>Комментарии к заказу</b></p>
{$comments}
</body>
</html>
END;
$oMail = new umiMail();
$oMail->addRecipient('почта-первого-менеджера@bla-bla.ru');
$oMail->addRecipient('почта-второго-менеджера@bla-bla.ru');
$oMail->setFrom('no-reply@bla-bla.ru','Заказ в магазине');
$oMail->setSubject('Заказ в магазине');
$oMail->setContent($message);
$oMail->commit();
$oMail->send();
basket::getInstance() -> emptyBasket();
$this->redirect('/webforms/order/');
}
};
Осталось заполнить шаблоны для корзины и представления товаров в письме