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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Статья будет написана в январе 2011-ого года.»)
 
Строка 1: Строка 1:
Статья будет написана в январе 2011-ого года.
+
В данной статье будет описан механизм смены шагов оформления заказа на этапе 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-шаблонах правки аналогичные.