Формирование прайс листа на основе каталога XSLT — различия между версиями
(Новая страница: «== Задача == Необходимо сформировать прайс лист на основе имеющегося каталога и выводить е…») |
Po4emu4ka (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 1 участника) | |||
Строка 5: | Строка 5: | ||
== Решение == | == Решение == | ||
− | Для решения данной задачи сформируем шаблон основанный на макросе ''' | + | Для решения данной задачи сформируем шаблон основанный на макросе '''catalog getCategoryList''' и '''catalog getObjectList'''. Для этого первым делом необходимо убедиться, что у всех разделов и товаров стоят галочки '''Отображать в меню''' и '''Показывать подменю'''. После этого необходимо добавить в главном шаблоне вывод прайс листа строкой: |
<source lang="xml"> | <source lang="xml"> | ||
− | <xsl:if test=" $document-page-id = | + | <xsl:if test=" $document-page-id = 98"> |
− | <xsl:apply-templates select="document('udata:// | + | <xsl:apply-templates select="document('udata://catalog/getCategoryList/(notemplate)/36')" mode="price_list" /> |
</xsl:if> | </xsl:if> | ||
</source> | </source> | ||
Строка 19: | Строка 19: | ||
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file"> | <!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file"> | ||
<xsl:stylesheet version="1.0" | <xsl:stylesheet version="1.0" | ||
− | + | xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
− | + | xmlns:umi="http://www.umi-cms.ru/TR/umi"> | |
+ | |||
<!-- price-list --> | <!-- price-list --> | ||
<!-- level_0 --> | <!-- level_0 --> | ||
− | <xsl:template match="udata[@module = ' | + | <xsl:template match="udata[@module='catalog' and @method = 'getCategoryList']" mode="price_list"> |
− | |||
<table class="price_list"> | <table class="price_list"> | ||
− | < | + | <tr> |
− | <xsl:apply-templates select="items" mode=" | + | <td> |
+ | <p>Наименование</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p>Цена</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <xsl:apply-templates select="//items/item" mode="price_list"/> | ||
</table> | </table> | ||
</xsl:template> | </xsl:template> | ||
− | + | ||
− | <xsl:template match="udata[ | + | <xsl:template match="udata[@method = 'getCategoryList']//item" mode="price_list"> |
− | + | <tr class="price_list_category"> | |
− | + | <td colspan="2"> | |
+ | <a href="{@link}" class="price_list"> | ||
+ | <span> | ||
+ | Раздел <xsl:value-of select="." /> | ||
+ | </span> | ||
+ | </a> | ||
+ | </td> | ||
+ | </tr> | ||
− | + | <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_price_list" /> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</xsl:template> | </xsl:template> | ||
<!-- level_1 --> | <!-- level_1 --> | ||
− | <xsl:template match="udata[@ | + | <xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_price_list"> |
− | <xsl:apply-templates select="item" mode=" | + | <tr class="price_list_subcategory"> |
+ | <td colspan="2"> | ||
+ | <a href="{@link}" class="price_list"> | ||
+ | <span> | ||
+ | Подраздел <xsl:value-of select="." /> | ||
+ | </span> | ||
+ | </a> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/notemplate/', @id))//item" mode="price_list" /> | ||
+ | <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_catalog_price_list" /> | ||
</xsl:template> | </xsl:template> | ||
− | <xsl:template match="udata[ | + | <!-- level_2 --> |
− | <tr class=" | + | <xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_catalog_price_list"> |
− | < | + | <tr class="price_list_subsubcategory"> |
− | <a href="{@link}" class=" | + | <td colspan="2"> |
+ | <a href="{@link}" class="price_list2"> | ||
<span> | <span> | ||
− | <xsl:value-of select=" | + | Подподраздел <xsl:value-of select="." /> |
− | |||
</span> | </span> | ||
</a> | </a> | ||
− | </td | + | </td> |
− | + | </tr> | |
− | <a href="{@link}" class=" | + | </xsl:template> |
+ | |||
+ | <xsl:template match="udata[@method = 'getObjectsList']//item" mode="price_list"> | ||
+ | <xsl:param name="id" select="./@id" /> | ||
+ | <tr class="price_list_subsubcategory"> | ||
+ | <td> | ||
+ | <a href="{@link}" class="price_list2"> | ||
<span> | <span> | ||
− | <xsl:value-of select=" | + | Товар <xsl:value-of select="." /> |
</span> | </span> | ||
</a> | </a> | ||
</td> | </td> | ||
− | <td | + | <td> |
− | + | <xsl:value-of select="document(concat('upage://',$id))//properties/group/property[@name='price']/value" /><xsl:text> руб.</xsl:text> | |
− | |||
− | |||
</td> | </td> | ||
</tr> | </tr> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</xsl:template> | </xsl:template> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<!-- custom catalog menu end--> | <!-- custom catalog menu end--> | ||
+ | |||
+ | </xsl:stylesheet> | ||
+ | </source> | ||
− | < | + | для того, что бы данный шаблон заработал необходимо подключить его в файле '''catalog/common.xsl''' добавив строчку: |
+ | <source lang="xml"> | ||
+ | <xsl:include href="price-list.xsl" /> | ||
</source> | </source> | ||
+ | [[category:Верстка в XSLT]][[category:Модуль Каталог]] |
Текущая версия на 13:10, 16 июля 2018
Задача
Необходимо сформировать прайс лист на основе имеющегося каталога и выводить его на странице, что бы изменения в каталоге отображались сразу и в прайс листе
Решение
Для решения данной задачи сформируем шаблон основанный на макросе catalog getCategoryList и catalog getObjectList. Для этого первым делом необходимо убедиться, что у всех разделов и товаров стоят галочки Отображать в меню и Показывать подменю. После этого необходимо добавить в главном шаблоне вывод прайс листа строкой:
<xsl:if test=" $document-page-id = 98">
<xsl:apply-templates select="document('udata://catalog/getCategoryList/(notemplate)/36')" mode="price_list" />
</xsl:if>
мы дополнительно поставили проверку на id страницы для которой необходимо выводить прайс лист, его можно узнать, создав в структуре страницу контента для прайс листа и открыв ее для редактирования, в адресной строке браузера.
Далее создаем в папке \templates\demodizzy\xslt\modules\catalog файл price-list.xsl и помещаем туда следующий код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">
<!-- price-list -->
<!-- level_0 -->
<xsl:template match="udata[@module='catalog' and @method = 'getCategoryList']" mode="price_list">
<table class="price_list">
<tr>
<td>
<p>Наименование</p>
</td>
<td>
<p>Цена</p>
</td>
</tr>
<xsl:apply-templates select="//items/item" mode="price_list"/>
</table>
</xsl:template>
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="price_list">
<tr class="price_list_category">
<td colspan="2">
<a href="{@link}" class="price_list">
<span>
Раздел <xsl:value-of select="." />
</span>
</a>
</td>
</tr>
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_price_list" />
</xsl:template>
<!-- level_1 -->
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_price_list">
<tr class="price_list_subcategory">
<td colspan="2">
<a href="{@link}" class="price_list">
<span>
Подраздел <xsl:value-of select="." />
</span>
</a>
</td>
</tr>
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/notemplate/', @id))//item" mode="price_list" />
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_catalog_price_list" />
</xsl:template>
<!-- level_2 -->
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_catalog_price_list">
<tr class="price_list_subsubcategory">
<td colspan="2">
<a href="{@link}" class="price_list2">
<span>
Подподраздел <xsl:value-of select="." />
</span>
</a>
</td>
</tr>
</xsl:template>
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="price_list">
<xsl:param name="id" select="./@id" />
<tr class="price_list_subsubcategory">
<td>
<a href="{@link}" class="price_list2">
<span>
Товар <xsl:value-of select="." />
</span>
</a>
</td>
<td>
<xsl:value-of select="document(concat('upage://',$id))//properties/group/property[@name='price']/value" /><xsl:text> руб.</xsl:text>
</td>
</tr>
</xsl:template>
<!-- custom catalog menu end-->
</xsl:stylesheet>
для того, что бы данный шаблон заработал необходимо подключить его в файле catalog/common.xsl добавив строчку:
<xsl:include href="price-list.xsl" />