Уведомление менеджеру о заказе, со всем необходимыми данными (emarket) XSLT — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показано 11 промежуточных версий 3 участников)
Строка 1: Строка 1:
''СТАТЬЯ НА СТАДИИ РЕДАКТИРОВАНИЯ''
 
 
'''Актуально для версии 2.9'''
 
'''Актуально для версии 2.9'''
  
 
[[Категория:Модуль Интернет магазин]]
 
[[Категория:Модуль Интернет магазин]]
Бывает необходима такая функциональность как отправка менеджеру письма, со всеми данными о заказе сделанном на сайте. Далее будет описан небольшой кастомный макрос и некоторые нюансы его работы, в результате которых мы сможем получить такие данные:
 
  
- Персональные данные о покупателе
+
За отправку письма менеджеру отвечает файл '''default.xsl''' находящийся в папке ''/templates/demodizzy/xslt/mail/emarket/''. В нем описан шаблон:
 
+
<source lang="xml">
- Способ доставки
+
<xsl:template match="neworder_notification">
 +
<xsl:text>Поступил новый заказ #</xsl:text>
 +
<xsl:value-of select="order_number" />
 +
<xsl:text> (</xsl:text>
 +
<a href="http://{domain}/admin/emarket/order_edit/{order_id}/">
 +
  <xsl:text>Просмотр</xsl:text>
 +
</a>
 +
<xsl:text>)</xsl:text><br/><br/>
 +
<xsl:text>Способ оплаты: </xsl:text>
 +
<xsl:value-of select="payment_type" /><br/>
 +
<xsl:text>Статус оплаты: </xsl:text>
 +
<xsl:value-of select="payment_status" /><br/>
 +
<xsl:text>Сумма оплаты:  </xsl:text>
 +
<xsl:value-of select="price" /><br/>
 +
</xsl:template>
 +
</source>
  
- Адрес доставки
+
Что бы менеджеру приходила информация о пользователе который оставил заказ добавим к шаблону следующие строки:
  
Для реализации поставленной задачи, пропишем в файле classes/modules/custom.php, после слов //TODO: Write your own macroses here, новый макрос:
+
<source lang="xml">
<source lang="php">
+
<xsl:variable select="document(concat('uobject://',order_id))//property[@name='customer_id']/value/item/@id" name="customer1"/>
public function orderinfo($order_id, $ide){
+
<xsl:text>Имя: </xsl:text>
  if(!$order_id) return false;
+
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='fname']/value" />
  $inst = umiObjectsCollection::getInstance();
+
<br /><br />
  $object = $inst->getObject($order_id);
+
<xsl:text>Фамилия:  </xsl:text>
  $id_value = $object->getValue($ide);
+
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='lname']/value" />
  if($ide == 'delivery_id') return $inst->getObject($id_value)->getName();
+
<br /><br />
  if($ide == 'order_discount_id'){
+
<xsl:text>Отчество: </xsl:text>
    if(!$id_value) return "";
+
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='father_name']/value" />
    // Получаем значение поля "Описание" в скидке
+
<br /><br />
    $description_discount = $inst->getObject($id_value)->getValue('description');
+
<xsl:text>E-mail:  </xsl:text>
    $value_disc = $object->total_price - $object->total_original_price;
+
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='email']/value" />
    return "Скидка на заказ: {$name_disc} ({$value_disc} руб.)";
+
<br /><br />
  }
+
<xsl:text>Телефон:  </xsl:text>
  return "%data getEditForm({$id_value},'order')%"
+
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='phone']/value" />
}
+
<br /><br />
 +
<xsl:text>Адрес доставки:  </xsl:text>
 +
<br /><br />
 +
<xsl:variable select="document(concat('uobject://',order_id))//property[@name='delivery_address']/value/item/@id" name="delivery1"/>
 +
<xsl:text>Страна:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='country']/value" />
 +
<br /><br />
 +
<xsl:text>Индекс:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='index']/value" />
 +
<br /><br />
 +
<xsl:text>Регион:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='region']/value" />
 +
<br /><br />
 +
<xsl:text>Город:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='city']/value" />
 +
<br /><br />
 +
<xsl:text>Улица:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='street']/value" />
 +
<br /><br />
 +
<xsl:text>Дом:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='house']/value" />
 +
<br /><br />
 +
<xsl:text>Квартира:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='flat']/value" />
 +
<br /><br />
 +
<xsl:text>Комментарий к адресу:  </xsl:text>
 +
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='order_comments']/value" />
 
</source>
 
</source>
Создадим в папке xslt/modules/data/reflection/ шаблон order.xsl, примерно такого же содержания как и стандартный шаблон default.xsl, только заменим тэги <input>, <textarea> и им подобные на макрос <xsl:value-of select="." />. Это необходимо из-за того, что мы будем использовать макрос data getEditForm() только для вывода уже существующей информации об объектах (адрес доставки, регистрационные данные и т.д.).
 
 
Шаблон письма, которое отправляется менеджеру, строится в файле xslt/emarket/mail/default.xsl в шаблоне <xsl:template match="neworder_notification"> В данном блоке можно использовать макрос emarket order(%order_id%,‘mail’), благодаря которому мы получим информацию о заказанных товарах. Необходимо настроить в необходимом виде шаблон tpls/emarket/mail.tpl, который будет использоваться макросом emarket order().
 
 
В шаблоне tpls/emarket/mail/default.tpl, в блоке neworder_notification, помимо стандартных записей, можно прописать запросы по дополнительной информации, в итоге получим блок примерно следующего содержания:
 
<pre>
 
Поступил новый заказ #%order_number% (<a href="http://%domain%/admin/emarket/order_edit/%order_id%/">Просмотр</a>)
 
<br/><br/>
 
Способ оплаты: %payment_type%<br/>
 
Статус оплаты: %payment_status%<br/>
 
Сумма оплаты:  %price%<br/>
 
Информация о товаре в заказе:<br/>
 
%emarket order(%order_id%)%
 
Данные о покупателе:<br/>
 
%custom orderinfo(%order_id%,'customer_id')%
 
Способ доставки:
 
%custom orderinfo(%order_id%,'delivery_id')%<br/>
 
Адрес доставки:<br/>
 
%custom orderinfo(%order_id%,'delivery_address')%
 
</pre>
 
Такие идентификаторы полей как: customer_id, delivery_id и delivery_address получены из типа данных "Заказ" (модуль "Шаблоны данных"). В итоге, при такой начинке блока 'neworder_notification' менеджеру будет отправлено информационное письмо, со всеми необходимыми данными о заказе и покупателе.
 

Текущая версия на 13:14, 3 августа 2015

Актуально для версии 2.9

За отправку письма менеджеру отвечает файл default.xsl находящийся в папке /templates/demodizzy/xslt/mail/emarket/. В нем описан шаблон:

<xsl:template match="neworder_notification">
 <xsl:text>Поступил новый заказ #</xsl:text>
 <xsl:value-of select="order_number" />
 <xsl:text> (</xsl:text>
 <a href="http://{domain}/admin/emarket/order_edit/{order_id}/">
  <xsl:text>Просмотр</xsl:text>
 </a>
 <xsl:text>)</xsl:text><br/><br/>
 <xsl:text>Способ оплаты: </xsl:text>
 <xsl:value-of select="payment_type" /><br/>
 <xsl:text>Статус оплаты: </xsl:text>
 <xsl:value-of select="payment_status" /><br/>
 <xsl:text>Сумма оплаты:  </xsl:text>
 <xsl:value-of select="price" /><br/>
</xsl:template>

Что бы менеджеру приходила информация о пользователе который оставил заказ добавим к шаблону следующие строки:

<xsl:variable select="document(concat('uobject://',order_id))//property[@name='customer_id']/value/item/@id" name="customer1"/>
<xsl:text>Имя:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='fname']/value" />
<br /><br />
<xsl:text>Фамилия:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='lname']/value" />
<br /><br />
<xsl:text>Отчество:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='father_name']/value" />
<br /><br />
<xsl:text>E-mail:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='email']/value" />
<br /><br />
<xsl:text>Телефон:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$customer1))//property[@name='phone']/value" />
<br /><br />
<xsl:text>Адрес доставки:  </xsl:text>
<br /><br />
<xsl:variable select="document(concat('uobject://',order_id))//property[@name='delivery_address']/value/item/@id" name="delivery1"/>
<xsl:text>Страна:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='country']/value" />
<br /><br />
<xsl:text>Индекс:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='index']/value" />
<br /><br />
<xsl:text>Регион:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='region']/value" />
<br /><br />
<xsl:text>Город:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='city']/value" />
<br /><br />
<xsl:text>Улица:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='street']/value" />
<br /><br />
<xsl:text>Дом:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='house']/value" />
<br /><br />
<xsl:text>Квартира:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='flat']/value" />
<br /><br />
<xsl:text>Комментарий к адресу:  </xsl:text>
<xsl:value-of select="document(concat('uobject://',$delivery1))//property[@name='order_comments']/value" />