Поиск последнего заказа, который оформил покупатель — различия между версиями
Romario (обсуждение | вклад) |
Whoa (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
+ | '''Актуально для версии 20.''' | ||
+ | |||
'''Задача:''' | '''Задача:''' | ||
− | В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и | + | В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и общую стоимость. |
− | |||
'''Решение:''' | '''Решение:''' | ||
Строка 75: | Строка 76: | ||
которые вы можете использовать для формирования данных о заказе. | которые вы можете использовать для формирования данных о заказе. | ||
+ | |||
+ | Если вы используете PHP-шаблонизатор, достаточно будет только описать кастомный макрос в файле customMacros.php: | ||
+ | <source lang="php"> | ||
+ | public function getLastOrderData() { | ||
+ | $cmsController = cmsController::getInstance(); | ||
+ | $domain = $cmsController->getCurrentDomain(); | ||
+ | $domainId = $domain->getId(); | ||
+ | |||
+ | //Поиск последнего заказа для текущего пользователя | ||
+ | $orders = new selector('objects'); | ||
+ | $orders->types('object-type')->name('emarket', 'order'); | ||
+ | $orders->where('customer_id')->equals(customer::get()->id); | ||
+ | $orders->where('name')->isNull(false); | ||
+ | $orders->where('domain_id')->equals($domainId); | ||
+ | $orders->order('id')->desc(); | ||
+ | $orders->limit(0, 1); | ||
+ | |||
+ | $lastOrderData = $orders->first; | ||
+ | return $lastOrderData; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | А затем добавить на страницу с завершением оформления заказа вызов этого макроса: | ||
+ | <source lang="php"> | ||
+ | $orderData = $this->macros('emarket', 'getLastOrderData'); | ||
+ | </source> | ||
+ | |||
+ | Этот код вернёт данные о последнем заказе в виде объекта, который вы можете использовать для формирования данных о заказе. Например, для вывода номера заказа достаточно будет прописать echo $orderData->number; | ||
+ | |||
[[Категория:Модуль Интернет магазин]] | [[Категория:Модуль Интернет магазин]] |
Текущая версия на 13:33, 25 марта 2019
Актуально для версии 20.
Задача:
В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и общую стоимость.
Решение:
Добавим в файл 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>
которые вы можете использовать для формирования данных о заказе.
Если вы используете PHP-шаблонизатор, достаточно будет только описать кастомный макрос в файле customMacros.php:
public function getLastOrderData() {
$cmsController = cmsController::getInstance();
$domain = $cmsController->getCurrentDomain();
$domainId = $domain->getId();
//Поиск последнего заказа для текущего пользователя
$orders = new selector('objects');
$orders->types('object-type')->name('emarket', 'order');
$orders->where('customer_id')->equals(customer::get()->id);
$orders->where('name')->isNull(false);
$orders->where('domain_id')->equals($domainId);
$orders->order('id')->desc();
$orders->limit(0, 1);
$lastOrderData = $orders->first;
return $lastOrderData;
}
А затем добавить на страницу с завершением оформления заказа вызов этого макроса:
$orderData = $this->macros('emarket', 'getLastOrderData');
Этот код вернёт данные о последнем заказе в виде объекта, который вы можете использовать для формирования данных о заказе. Например, для вывода номера заказа достаточно будет прописать echo $orderData->number;