Поиск последнего заказа, который оформил покупатель — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 6 промежуточных версий 3 участников)
Строка 1: Строка 1:
 +
'''Актуально для версии 20.'''
 +
 
'''Задача:'''  
 
'''Задача:'''  
  
В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и общею стоимость.
+
В данной статье будет рассмотрен пример кастомного метода, с помощью которого на последнем шаге оформления заказа, где уже отображается сообщение об успешном оформлении заказа, мы выведем номер этого заказа, и общую стоимость.
 
 
  
 
'''Решение:'''   
 
'''Решение:'''   
Строка 63: Строка 64:
 
Если вы используете XSLT-шаблонизатор, то при вызове udata://emarket/order_last/ будут получены примерно следующие данные:
 
Если вы используете XSLT-шаблонизатор, то при вызове udata://emarket/order_last/ будут получены примерно следующие данные:
  
<source lang="xslt">  
+
<source lang="xml">  
 
<udata module="emarket" method="order_last" generation-time="0.258477">
 
<udata module="emarket" method="order_last" generation-time="0.258477">
 
<order_id>
 
<order_id>
Строка 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;