Повторение ранее совершенного заказа
Материал из Umicms
В данной статье описан пример кастомного макроса, с помощью которого можно повторить ранее совершенный заказ, т.е. одним кликом перенести его в текущею корзину и оформить заказ. Код нового метода необходимо добавить в файл 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 заказа.
