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