Формирование прайс листа на основе каталога XSLT — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показана 1 промежуточная версия 1 участника)
Строка 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:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:umi="http://www.umi-cms.ru/TR/umi">
+
xmlns:umi="http://www.umi-cms.ru/TR/umi">
  
  
<!-- price-list -->
+
<!-- price-list -->
<!-- level_0 -->
+
<!-- level_0 -->
<xsl:template match="udata[@method = 'getCategoryList']" mode="price_list">
+
<xsl:template match="udata[@module='catalog' and @method = 'getCategoryList']" mode="price_list">
<table class="price_list">
+
<table class="price_list">
<tr>
+
<tr>
<td>
+
<td>
<p>Наименование</p>
+
<p>Наименование</p>
</td>
+
</td>
<td>
+
<td>
<p>Цена</p>
+
<p>Цена</p>
</td>
+
</td>
</tr>
+
</tr>
<xsl:apply-templates select="//items/item" mode="price_list"/>
+
<xsl:apply-templates select="//items/item" mode="price_list"/>
</table>
+
</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>
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_price_list">
+
<tr class="price_list_subcategory">
+
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="price_list">
 +
<tr class="price_list_category">
 
<td colspan="2">
 
<td colspan="2">
 
<a href="{@link}" class="price_list">
 
<a href="{@link}" class="price_list">
 
<span>
 
<span>
&nbsp;&nbsp;&nbsp;&nbsp;Подраздел <xsl:value-of select="." />
+
Раздел <xsl:value-of select="." />
 
</span>
 
</span>
 
</a>
 
</a>
 
</td>
 
</td>
 
</tr>
 
</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:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_price_list" />
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_catalog_price_list">
+
</xsl:template>
<tr class="price_list_subsubcategory">
 
<td colspan="2">
 
<a href="{@link}" class="price_list2">
 
<span>
 
&nbsp;&nbsp;&nbsp;&nbsp;Подподраздел <xsl:value-of select="." />
 
</span>
 
</a>
 
</td>
 
</tr>
 
</xsl:template>
 
 
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="price_list">
 
<tr class="price_list_subsubcategory">
 
<td>
 
<a href="{@link}" class="price_list2">
 
<span>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Товар <xsl:value-of select="." />
 
</span>
 
</a>
 
</td>
 
<td>
 
Стоимость товара
 
</td>
 
</tr>
 
</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>
  
<!-- custom catalog menu end-->
+
<!-- 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>
 
</xsl:stylesheet>
 
</source>
 
</source>
 +
 +
для того, что бы данный шаблон заработал необходимо подключить его в файле '''catalog/common.xsl''' добавив строчку:
 +
<source lang="xml">
 +
<xsl:include href="price-list.xsl" />
 +
</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" />