Смена шагов оформления заказа на этапе delivery — различия между версиями

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

Текущая версия на 09:24, 17 ноября 2015

Актуально для версии 2.9.6

В данной статье будет описан механизм смены шагов оформления заказа на этапе 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 = 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->saveEditedObjectWithIgnorePermissions($addressId, true, true);
		}
		$customer->delivery_addresses = array_merge( $customer->delivery_addresses, array($addressId) );
	}
	$order->delivery_address = (int) $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-шаблонах правки аналогичные.