Смена шагов оформления заказа на этапе delivery — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: «Статья будет написана в январе 2011-ого года.») |
VITL' (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | + | В данной статье будет описан механизм смены шагов оформления заказа на этапе delivery. Необходимо, чтобы была следуюшая последовательность: | |
+ | * выбор способа доставки; | ||
+ | * проверка на то какой способ доставки выбран: | ||
+ | если выбран "Самовывоз", то перейти к следующему этапу, если "Доставка", то предложить заполнить Адрес доставки. | ||
+ | |||
+ | |||
+ | В файл '''classes/modules/emarket/__custom.php''', добавим четыре метода, все они написаны на основе существующих: | ||
+ | <source lang="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/'); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
+ | также в папке '''classes/modules/emarket/''' создадим файл '''permissions.custom.php''' следующего содержания: | ||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | $permissions = array('purchasing' => array('purchasecust', 'personalcust', 'choosecust', 'addresscust')); | ||
+ | ?> | ||
+ | </source> | ||
+ | В методе '''choosecust()''', в строке: | ||
+ | <pre> | ||
+ | if($deliveryId == 27255){ | ||
+ | </pre> | ||
+ | |||
+ | необходимо прописать ваш $object_id способа доставки "Самовывоз", id можно узнать в модуле Интернет-магазин, вкладка "Доставка". | ||
+ | |||
+ | Если говорить о TPL-шаблонах, то в шаблоне '''/tpls/emarket/default.tpl''', в блоке '''order_block''', необходимо прописать для формы следующий action: | ||
+ | <pre> | ||
+ | <form action="%pre_lang%/emarket/purchasecust/"> | ||
+ | </pre> | ||
+ | |||
+ | В шаблоне '''tpls/required/default.tpl''', action: | ||
+ | <pre> | ||
+ | <form action="%pre_lang%/emarket/personalcust/" method="post"> | ||
+ | </pre> | ||
+ | |||
+ | В шаблоне '''tpls/delivery/default.tpl''', в блоке '''delivery_block''', action: | ||
+ | <pre> | ||
+ | <form action="%pre_lang%/emarket/choosecust/" method="post"> | ||
+ | </pre> | ||
+ | а в блоке '''delivery_address_block''', action: | ||
+ | <pre> | ||
+ | <form action="%pre_lang%/emarket/addresscust/" method="post"> | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | В XSLT-шаблонах правки аналогичные. |
Версия 21:40, 31 января 2011
В данной статье будет описан механизм смены шагов оформления заказа на этапе 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/required/default.tpl, action:
<form action="%pre_lang%/emarket/personalcust/" method="post">
В шаблоне tpls/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-шаблонах правки аналогичные.