Смена шагов оформления заказа на этапе delivery
Материал из Umicms
В данной статье будет описан механизм смены шагов оформления заказа на этапе delivery. Необходимо, чтобы была следуюшая последовательность:
- выбор способа доставки;
- проверка на то какой способ доставки выбран:
если выбран "Самовывоз", то перейти к следующему этапу, если "Доставка", то предложить заполнить Адрес доставки.
В файл classes/modules/emarket/__custom.php, добавим четыре метода, все они написаны на основе существующих:
public function purchasecust(){ $customer = customer::get(); // Проверка на то, что покупатель Гость, и все ли обязательные поля заполнены в объекте if(!$customer->isUser() && !$customer->isFilled()) { $this->redirect('/emarket/purchase/'); }else{ $this->redirect('/emarket/purchase/delivery/choose/'); } } public function personalcust(){ $cmsController = cmsController::getInstance(); $data = $cmsController->getModule('data'); $data->saveEditedObject(customer::get()->id, false, true); $this->redirect($this->pre_lang . '/emarket/purchase/delivery/choose/'); } public function choosecust(){ $ini = cmsController::getInstance()->getModule("emarket"); $order = $ini->getBasketOrder(false); $deliveryId = (int) getRequest('delivery-id'); if(!$deliveryId) { $this->redirect($ini->pre_lang . '/emarket/purchase/delivery/choose/'); } if(@isset($_SESSION['emarket']['delivery'][$deliveryId])) { $deliveryPrice = (float) $_SESSION['emarket']['delivery'][$deliveryId]; } else { $delivery = delivery::get($deliveryId); $deliveryPrice = (float) $delivery->getDeliveryPrice($order); } $order->setValue('delivery_id', $deliveryId); $order->setValue('delivery_price', $deliveryPrice); $order->refresh(); $order->commit(); if($deliveryId == 27255){ $this->redirect($this->pre_lang . '/emarket/purchase/payment/choose/'); }else{ $this->redirect($this->pre_lang . '/emarket/purchase/delivery/address/'); } } public function addresscust(){ $ini = cmsController::getInstance()->getModule("emarket"); $order = $ini->getBasketOrder(false); $addressId = (int) getRequest('delivery-address'); if($addressId == 'new') { $controller = cmsController::getInstance(); $collection = umiObjectsCollection::getInstance(); $types = umiObjectTypesCollection::getInstance(); $typeId = $types->getBaseType("emarket", "delivery_address"); $customer = customer::get(); $addressId = $collection->addObject("Address for customer #".$customer->id, $typeId); $dataModule = $controller->getModule("data"); if($dataModule) { $dataModule->saveEditedObject($addressId, true, true); } $customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) ); } $order->delivery_address = $addressId; $order->commit(); $this->redirect($this->pre_lang . '/emarket/purchase/payment/choose/'); }
также в папке classes/modules/emarket/ создадим файл permissions.custom.php следующего содержания:
<?php $permissions = array('purchasing' => array('purchasecust', 'personalcust', 'choosecust', 'addresscust')); ?>
В методе choosecust(), в строке:
if($deliveryId == 27255){
необходимо прописать ваш $object_id способа доставки "Самовывоз", id можно узнать в модуле Интернет-магазин, вкладка "Доставка".
Если говорить о TPL-шаблонах, то в шаблоне /tpls/emarket/default.tpl, в блоке order_block, необходимо прописать для формы следующий action:
<form action="%pre_lang%/emarket/purchasecust/">
В шаблоне tpls/emarket/required/default.tpl, action:
<form action="%pre_lang%/emarket/personalcust/" method="post">
В шаблоне tpls/emarket/delivery/default.tpl, в блоке delivery_block, action:
<form action="%pre_lang%/emarket/choosecust/" method="post">
а в блоке delivery_address_block, action:
<form action="%pre_lang%/emarket/addresscust/" method="post">
В XSLT-шаблонах правки аналогичные.
