Поиск последнего заказа, который оформил покупатель.
Материал из Umicms
Задача:
В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и общею стоимость.
Решение:
Добавим в файл classes/modules/emarket/__custom.php дополнительный метод order_last:
public function order_last($template = 'order_last') { list($tpl_block) = def_module::loadTemplates("./tpls/emarket/{$template}.tpl", 'order_block'); $cmsController = cmsController::getInstance(); $domain = $cmsController->getCurrentDomain(); $domainId = $domain->getId(); //поиск последнего заказа для текущего пользователя $sel = new selector('objects'); $sel->types('object-type')->name('emarket', 'order'); $sel->where('customer_id')->equals(customer::get()->id); $sel->where('name')->isNull(false); $sel->where('domain_id')->equals($domainId); $sel->order('order_date')->desc(); $sel->limit(0, 1); $result = $sel->first; if($sel->length > 0) { $block_arr['order_id'] = $result->id; $block_arr['number'] = $result->number; return def_module::parseTemplate($tpl_block, $block_arr, false, $result->id); } }
В папку classes/modules/emarket/ добавим файл permissions.custom.php следующего содержания:
<?php $permissions = array('purchasing' => array('order_last')); ?>
Если вы используете на сайте TPL-шаблонизатор, то в папку tpls/emarket/ необходимо добавить шаблон order_last.tpl примерно следующего содержания:
<?php $FORMS = array(); $FORMS['order_block'] = <<<END Номер заказа: %number% <br/> Стоимость заказа: %total_price% руб. END; ?>
с помощью макрос %order_id% вы можете получить object_id заказа и использовать этот id в макросе %data getPropertyOfObject()%. Также в блоке 'order_block' можно использовать идентификаторы полей типа данных «Заказ» для получения значений полей, как это было сделано для общей стоимости: %total_price%
Также в шаблон tpls/emarket/default.tpl, в блок purchase_successful необходимо добавить макрос: %emarket order_last()%
Если вы используете XSLT-шаблонизатор, то при вызове udata://emarket/order_last/ будут получены примерно следующие данные:
<udata module="emarket" method="order_last" generation-time="0.258477"> <order_id> 550925 </order_id> <number> 17 </number> </udata>
которые вы можете использовать для формирования данных о заказе.
