Повторение ранее совершенного заказа — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «В данной статье описан пример кастомного макроса, с помощью которого можно повторить ране…»)
(нет различий)

Версия 17:13, 10 апреля 2011

В данной статье описан пример кастомного макроса, с помощью которого можно повторить ранее совершенный заказ, т.е. одним кликом перенести его в текущею корзину и оформить заказ. Код нового метода необходимо добавить в файл classes/modules/emarket/__custom.php, после слов //TODO: Write here your own macroses:

public function repeatorder(){

  $permissions = permissionsCollection::getInstance();
  $userId = $permissions->getUserId();
  $objects = umiObjectsCollection::getInstance();
  $order_id = (int) getRequest('param0');
  $order = $objects->getObject($order_id);
  
  if(!$order || $order->customer_id != $userId){
  $referer = getServer('HTTP_REFERER');
  $this->redirect($referer);
  }
  $orderItems = $order->order_items;
  
  if(is_array($orderItems)) {
    foreach($orderItems as $orderItemId) {
      
      $orderItem = orderItem::get($orderItemId);
      
      if($orderItem) {
        $element = $orderItem->getItemElement();
        if($element){
          
          $element_id = $element->id;
          $_REQUEST['no-redirect'] = 1;
          $_REQUEST['amount'] = $orderItem->item_amount;
          
          $options_arr = array();
          foreach($orderItem->options as $item){
            $index = $item['varchar'];
            $options_arr[$index] = $item['rel'];
          }
          if(count($options_arr)) $_REQUEST['options'] = $options_arr;
          $this->basket('put', 'element', $element_id);
          
        }
      }
    }
  }
  $referer = getServer('HTTP_REFERER');
  $this->redirect($referer);

}

В той же папке необходимо добавить файл permissions.custom.php следующего содержания:

<?php
  $permissions = array('purchasing' => array('repeatorder'));
?>

Если говорить на примере TPL-шаблонов, то в шаблоне tpls/emarket/default.tpl, должны быть примерно следующие блоки:

$FORMS['personal'] = <<<END
 %emarket ordersList()%
END;

$FORMS['orders_block'] = <<<END
<p>Список ваших заказов:</p>
<ul>
 %items%
</ul>
END;

$FORMS['orders_block_empty'] = <<<END
<p>Заказов нет</p>
END;

$FORMS['orders_item'] = <<<END
<li>%name% <a href="/emarket/repeatorder/%id%/">Повторить</a></li>
END;

Когда пользователь зайдет в личный кабинет Интернет-магазина по ссылке: _http://sait.ru/emarket/personal/ , он увидит список заказов возле которых будет ссылка Повторить. Кликнув по ссылке Повторить, в текущею корзину товаров добавятся товары из ранее совершенного заказа, с сохранением количества товара и опционных свойств. Для XSLT принцип аналогичен, с помощью макроса ordersList() получаем список заказов, потом формируем ссылку для повторения заказа, используя object_id заказа.