Простая корзина. Кастомные методы

В кастом записываем методы работы с корзиной:

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/');
}

};

 

Осталось заполнить шаблоны для корзины и представления товаров в письме



=================
2011-12-25