Вывод перечня заказов на печать для менеджера — различия между версиями
Kirill (обсуждение | вклад) |
Kirill (обсуждение | вклад) |
||
Строка 9: | Строка 9: | ||
'''1.''' Для начала, нам нужно сделать выборку всех заказов. Это делается с помощью стандартного функционала, а именно протокола usel. Его описание Вы можете найти здесь http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html <br/> | '''1.''' Для начала, нам нужно сделать выборку всех заказов. Это делается с помощью стандартного функционала, а именно протокола usel. Его описание Вы можете найти здесь http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html <br/> | ||
Если открыть модуль "Шаблоны данных" то Вы увидите, что тип данных "Заказ" имеет id=755. Напишем простой usel и сохраним в папке usels под названием test.xsl:<br/> | Если открыть модуль "Шаблоны данных" то Вы увидите, что тип данных "Заказ" имеет id=755. Напишем простой usel и сохраним в папке usels под названием test.xsl:<br/> | ||
− | + | <source lang="xml"> | |
<?xml version="1.0" encoding="utf-8"?><br/> | <?xml version="1.0" encoding="utf-8"?><br/> | ||
<selection><br/> | <selection><br/> | ||
Строка 16: | Строка 16: | ||
</target><br/> | </target><br/> | ||
</selection><br/> | </selection><br/> | ||
− | + | </source> | |
Внешне эта выборка может выглядеть примерно так:<br/> | Внешне эта выборка может выглядеть примерно так:<br/> | ||
+ | <source lang="xml"> | ||
<udata generation-time="0.020353"><br/> | <udata generation-time="0.020353"><br/> | ||
<item id="27658" name="dummy" type-id="755" ownerId="14" xlink:href="uobject://27658"/><br/> | <item id="27658" name="dummy" type-id="755" ownerId="14" xlink:href="uobject://27658"/><br/> | ||
Строка 26: | Строка 27: | ||
</udata><br/> | </udata><br/> | ||
<!-- This page generated in 0.187956 secs --> | <!-- This page generated in 0.187956 secs --> | ||
+ | </source> | ||
Теперь мы знаем id всех объектов "Заказ".<br/> | Теперь мы знаем id всех объектов "Заказ".<br/> | ||
Строка 31: | Строка 33: | ||
'''3.''' Создадим новую страницу и назначим ей шаблон orders.xsl<br> | '''3.''' Создадим новую страницу и назначим ей шаблон orders.xsl<br> | ||
'''4.''' Теперь необходимо добавить сам шаблон. Делать это нужно в папке xsltTpls <br> | '''4.''' Теперь необходимо добавить сам шаблон. Делать это нужно в папке xsltTpls <br> | ||
− | + | <source lang="xml"> | |
− | + | <?xml version="1.0" encoding="utf-8"?> | |
− | + | <!--<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/smthng.dtd:file"> | |
− | + | --> | |
− | + | <xsl:stylesheet version="1.0" | |
− | + | xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
− | + | xmlns:xlink="http://www.w3.org/TR/xlink" | |
− | + | xmlns:umi="http://www.umi-cms.ru/TR/umi" | |
− | + | exclude-result-prefixes="xlink"> | |
− | + | ||
− | + | <xsl:output encoding="utf-8" method="html" indent="yes"/> | |
− | + | <xsl:include href="common.xsl" /> | |
− | + | ||
− | + | <xsl:template match="/"> | |
− | + | <html class="u-eip"> | |
− | + | <head> | |
− | + | <link rel="search" type="application/opensearchdescription+xml" href="/xsl/onlineSearch/description.xml?1287575575&" title="Search on UMI.CMS" /> | |
− | + | <xsl:value-of select="document('udata://system/includeQuickEditJs')/udata" disable-output-escaping="yes" /> | |
− | + | ||
− | + | <title> | |
− | + | <xsl:value-of select="result/@title" /> | |
− | + | </title> | |
− | + | </head> | |
− | + | ||
− | + | <body> | |
− | + | <!-- <xsl:value-of select="document('usel://test/')/udata" disable-output-escaping="yes" />--> | |
− | + | экспремент! <br/> | |
− | + | ||
− | + | ||
+ | <xsl:apply-templates select="document('usel://test/')//item" disable-output-escaping="yes" mode="susel"/> | ||
+ | |||
+ | </body> | ||
+ | </html> | ||
+ | </xsl:template> | ||
+ | |||
+ | <xsl:template match="item" mode="susel"> | ||
+ | <!-- <xsl:value-of select="@id"/> <br/> --> | ||
+ | <xsl:variable name="ord_id" select="@id" /> | ||
+ | <!-- <xsl:value-of select="$ord_id"/> <br/> --> | ||
+ | <xsl:apply-templates select="document(concat('uobject://', $ord_id))/udata" /> | ||
+ | </xsl:template> | ||
+ | |||
+ | </xsl:stylesheet> | ||
+ | </source> | ||
Нас интересует только та часть, которая выделена жирным. Здесь мы делаем выборку по написанному ранее usel-ю и поочерёдно применяем ко всем заказам шаблон вывода. Таким образом, можно получить полный список заказов на одной странице.<br/><br/> | Нас интересует только та часть, которая выделена жирным. Здесь мы делаем выборку по написанному ранее usel-ю и поочерёдно применяем ко всем заказам шаблон вывода. Таким образом, можно получить полный список заказов на одной странице.<br/><br/> | ||
Строка 66: | Строка 83: | ||
'''Обратите внимание!!!'''<br/> | '''Обратите внимание!!!'''<br/> | ||
'''1.''' Ниже приведённый шаблон просто выведет все данные об объекте заказа. Вы можете написать дополнительный шаблон вывода с оформлением, к примеру, в виде таблицы или списка. Здесь это задача не рассматривается, так как дизайн вывода всегда остаётся на совести зработчика | '''1.''' Ниже приведённый шаблон просто выведет все данные об объекте заказа. Вы можете написать дополнительный шаблон вывода с оформлением, к примеру, в виде таблицы или списка. Здесь это задача не рассматривается, так как дизайн вывода всегда остаётся на совести зработчика | ||
− | + | <source lang="xml"><xsl:apply-templates select="document(concat('uobject://', $ord_id))/udata" /></source> | |
'''2.''' Некоторые из полей могут являются сами по себе объектами. К примеру "Адрес доставки". В xml-файле этот фрагмент будет выглядеть так: | '''2.''' Некоторые из полей могут являются сами по себе объектами. К примеру "Адрес доставки". В xml-файле этот фрагмент будет выглядеть так: | ||
− | + | <source lang="xml"> <title>Адрес доставки</title> | |
<value> | <value> | ||
<item id="27662" name="Address for customer #14" type-id="803" ownerId="14" xlink:href="uobject://27662"/> | <item id="27662" name="Address for customer #14" type-id="803" ownerId="14" xlink:href="uobject://27662"/> | ||
</value> | </value> | ||
− | + | </source> | |
Вывести содержание этого объекта можно аналогично тому, как мы выводили содержание заказа <b>uobject://27662</b>. Результат будет примерно таким: | Вывести содержание этого объекта можно аналогично тому, как мы выводили содержание заказа <b>uobject://27662</b>. Результат будет примерно таким: | ||
+ | <source lang="xml"> | ||
<udata generation-time="0.000605"> | <udata generation-time="0.000605"> | ||
<object id="27662" name="Address for customer #14" type-id="803" ownerId="14"> | <object id="27662" name="Address for customer #14" type-id="803" ownerId="14"> | ||
Строка 113: | Строка 131: | ||
</object> | </object> | ||
</udata> | </udata> | ||
+ | </source> | ||
'''3.''' Просмотреть результат можно на странице, которую Вы создали ранее, в пункте №3. Функционал шаблона можно расширить. Добавить пейджинг и т.д., но это дело вкуса. О чём действительно стоит позаботиться в первую очередь - это ''выставить права на страницу так, чтобы её мог просматривать только супервайзер''. Если, конечно, не стоит задачи "опубликовать все получаемые Вами заказы" =) <br/> | '''3.''' Просмотреть результат можно на странице, которую Вы создали ранее, в пункте №3. Функционал шаблона можно расширить. Добавить пейджинг и т.д., но это дело вкуса. О чём действительно стоит позаботиться в первую очередь - это ''выставить права на страницу так, чтобы её мог просматривать только супервайзер''. Если, конечно, не стоит задачи "опубликовать все получаемые Вами заказы" =) <br/> | ||
'''4.''' Среди прочих объектов заказа, Вы,скорей всего, увидите такой: | '''4.''' Среди прочих объектов заказа, Вы,скорей всего, увидите такой: | ||
− | + | <source lang="xml"><item id="27658" name="dummy" type-id="755" ownerId="14" xlink:href="uobject://27658"/></source> | |
Это системный объект, который представляет из себя пустой заказ. Можете его игнорировать. | Это системный объект, который представляет из себя пустой заказ. Можете его игнорировать. |
Версия 11:09, 22 января 2011
Задача:
Необходимо вывести в удобной, читабельной форме, все заказы так, что бы их потом можно было распечатать.
Решение:
Эту задачу можно решить крайне просто, не прибегая к кастомизации существующих модулей или написанию собственных макросов.
Допустим, в модуле "Интернет магазин" во вкладке "Заказы" уже есть несколько объектов заказа.Поступим следующим образом - мы выведем содержание этих заказов на странице и оформим так, как нам хотелось бы это видеть на бумаге.
1. Для начала, нам нужно сделать выборку всех заказов. Это делается с помощью стандартного функционала, а именно протокола usel. Его описание Вы можете найти здесь http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html
Если открыть модуль "Шаблоны данных" то Вы увидите, что тип данных "Заказ" имеет id=755. Напишем простой usel и сохраним в папке usels под названием test.xsl:
<?xml version="1.0" encoding="utf-8"?><br/>
<selection><br/>
<target expected-result="objects"><br/>
<type id="755" /> <br/>
</target><br/>
</selection><br/>
Внешне эта выборка может выглядеть примерно так:
<udata generation-time="0.020353"><br/>
<item id="27658" name="dummy" type-id="755" ownerId="14" xlink:href="uobject://27658"/><br/>
<item id="27659" name="Заказ #1" type-id="755" ownerId="14" xlink:href="uobject://27659"/><br/>
<item id="27663" name="Заказ #2" type-id="755" ownerId="14" xlink:href="uobject://27663"/><br/>
<item id="27665" name="Заказ #3" type-id="755" ownerId="14" xlink:href="uobject://27665"/><br/>
<total>4</total><br/>
</udata><br/>
<!-- This page generated in 0.187956 secs -->
Теперь мы знаем id всех объектов "Заказ".
2. Добавим в настройках модуля "Структура" новый шаблон. Пусть это будет orders.xsl. Сохраним изменения.
3. Создадим новую страницу и назначим ей шаблон orders.xsl
4. Теперь необходимо добавить сам шаблон. Делать это нужно в папке xsltTpls
<?xml version="1.0" encoding="utf-8"?>
<!--<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/smthng.dtd:file">
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/TR/xlink"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
exclude-result-prefixes="xlink">
<xsl:output encoding="utf-8" method="html" indent="yes"/>
<xsl:include href="common.xsl" />
<xsl:template match="/">
<html class="u-eip">
<head>
<link rel="search" type="application/opensearchdescription+xml" href="/xsl/onlineSearch/description.xml?1287575575&" title="Search on UMI.CMS" />
<xsl:value-of select="document('udata://system/includeQuickEditJs')/udata" disable-output-escaping="yes" />
<title>
<xsl:value-of select="result/@title" />
</title>
</head>
<body>
<!-- <xsl:value-of select="document('usel://test/')/udata" disable-output-escaping="yes" />-->
экспремент! <br/>
<xsl:apply-templates select="document('usel://test/')//item" disable-output-escaping="yes" mode="susel"/>
</body>
</html>
</xsl:template>
<xsl:template match="item" mode="susel">
<!-- <xsl:value-of select="@id"/> <br/> -->
<xsl:variable name="ord_id" select="@id" />
<!-- <xsl:value-of select="$ord_id"/> <br/> -->
<xsl:apply-templates select="document(concat('uobject://', $ord_id))/udata" />
</xsl:template>
</xsl:stylesheet>
Нас интересует только та часть, которая выделена жирным. Здесь мы делаем выборку по написанному ранее usel-ю и поочерёдно применяем ко всем заказам шаблон вывода. Таким образом, можно получить полный список заказов на одной странице.
Обратите внимание!!!
1. Ниже приведённый шаблон просто выведет все данные об объекте заказа. Вы можете написать дополнительный шаблон вывода с оформлением, к примеру, в виде таблицы или списка. Здесь это задача не рассматривается, так как дизайн вывода всегда остаётся на совести зработчика
<xsl:apply-templates select="document(concat('uobject://', $ord_id))/udata" />
2. Некоторые из полей могут являются сами по себе объектами. К примеру "Адрес доставки". В xml-файле этот фрагмент будет выглядеть так:
<title>Адрес доставки</title>
<value>
<item id="27662" name="Address for customer #14" type-id="803" ownerId="14" xlink:href="uobject://27662"/>
</value>
Вывести содержание этого объекта можно аналогично тому, как мы выводили содержание заказа uobject://27662. Результат будет примерно таким:
<udata generation-time="0.000605">
<object id="27662" name="Address for customer #14" type-id="803" ownerId="14">
<properties>
<group id="3338" name="common">
<title>Основное</title>
<property id="9160" name="country" type="relation">
<title>Страна</title>
<value>
<item id="26341" GUID="e9aa8c23a339224b25945aa9e99f09f578bdd483" name="Россия" type-id="693" ownerId="14" xlink:href="uobject://26341"/>
</value>
</property>
<property id="9161" name="index" type="int">
<title>Почтовый индекс</title>
<value>321321</value>
</property>
<property id="9162" name="region" type="string">
<title>Регион</title>
<value>test</value>
</property>
<property id="9163" name="city" type="string">
<title>Город</title>
<value>test</value>
</property>
<property id="9164" name="street" type="string">
<title>Улица</title>
<value>test</value>
</property>
<property id="9165" name="house" type="string">
<title>Дом</title>
<value>test</value>
</property>
<property id="9166" name="flat" type="string">
<title>Квартира</title>
<value>test</value>
</property>
</group>
</properties>
</object>
</udata>
3. Просмотреть результат можно на странице, которую Вы создали ранее, в пункте №3. Функционал шаблона можно расширить. Добавить пейджинг и т.д., но это дело вкуса. О чём действительно стоит позаботиться в первую очередь - это выставить права на страницу так, чтобы её мог просматривать только супервайзер. Если, конечно, не стоит задачи "опубликовать все получаемые Вами заказы" =)
4. Среди прочих объектов заказа, Вы,скорей всего, увидите такой:
<item id="27658" name="dummy" type-id="755" ownerId="14" xlink:href="uobject://27658"/>
Это системный объект, который представляет из себя пустой заказ. Можете его игнорировать.