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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «== Задача == Необходимо сформировать прайс лист на основе имеющегося каталога и выводить е…»)
 
Строка 22: Строка 22:
 
xmlns:umi="http://www.umi-cms.ru/TR/umi">
 
xmlns:umi="http://www.umi-cms.ru/TR/umi">
  
<!-- price-list -->
 
<!-- level_0 -->
 
<xsl:template match="udata[@module = 'content'][@method = 'menu']" mode="price_list">
 
  
<table class="price_list">
+
<!-- price-list -->
<!--textarea><xsl:apply-templates select="items" mode="price_list1"/></textarea-->
+
<!-- level_0 -->
<xsl:apply-templates select="items" mode="price_list1"/>
+
<xsl:template match="udata[@method = 'getCategoryList']" mode="price_list">
</table>
+
<table class="price_list">
 
 
</xsl:template>
 
 
<xsl:template match="udata[@module = 'content' and @method = 'menu']//items" mode="price_list1">
 
<xsl:apply-templates select="item" mode="price_list2"/>
 
</xsl:template>
 
 
 
<xsl:template match="udata[@module = 'content' and @method = 'menu']//item" mode="price_list2">
 
<textarea><xsl:value-of select="$method" /></textarea>
 
<xsl:choose>
 
<xsl:when test=" $method = 'object' ">
 
<tr class="price_list_catalog_lvl2_name">
 
<!--td colspan="2">
 
<a href="{@link}" class="include_price_list2">
 
<span>
 
<xsl:value-of select="@name" />
 
<textarea><xsl:copy-of select="@xlink"/></textarea>
 
</span>
 
</a>
 
</td-->
 
<td class="include_catalog_price_list2">
 
<a href="{@link}" class="include_catalog_price_list2">
 
<span>
 
<xsl:value-of select="@name" />
 
</span>
 
</a>
 
</td>
 
<td class="include_catalog_price_list2">
 
<p>
 
<xsl:value-of select="$item_price"/>
 
</p>
 
</td>
 
</tr>
 
</xsl:when>
 
<xsl:otherwise>
 
<tr class="price_list_catalog_name">
 
<td colspan="2">
 
<a href="{@link}" class="price_list2">
 
<span>
 
<xsl:value-of select="@name" />
 
</span>
 
</a>
 
</td>
 
</tr>
 
 
<tr>
 
<tr>
 
<td>
 
<td>
Строка 82: Строка 35:
 
</td>
 
</td>
 
</tr>
 
</tr>
</xsl:otherwise>
+
<xsl:apply-templates select="//items/item" mode="price_list"/>
</xsl:choose>
+
</table>
<xsl:apply-templates select="items" mode="include_price_list"/>
 
 
 
</xsl:template>
+
</xsl:template>
  
<!-- level_1 -->
+
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="price_list">
<xsl:template match="udata[@module = 'content' and @method = 'menu']//items" mode="include_price_list">
+
<tr class="price_list_category">
<xsl:apply-templates select="item" mode="include_price_list2"/>
+
<td colspan="2">
</xsl:template>
+
<a href="{@link}" class="price_list">
 +
<span>
 +
Раздел <xsl:value-of select="." />
 +
</span>
 +
</a>
 +
</td>
 +
</tr>
  
<xsl:template match="udata[@module = 'content' and @method = 'menu']//item" mode="include_price_list2">
+
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/notemplate/', @id))//items/item" mode="include_price_list" />
<tr class="price_list_catalog_lvl2_name">
+
</xsl:template>
<!--td colspan="2">
 
<a href="{@link}" class="include_price_list2">
 
<span>
 
<xsl:value-of select="@name" />
 
<textarea><xsl:copy-of select="@xlink"/></textarea>
 
</span>
 
</a>
 
</td-->
 
<td class="include_catalog_price_list2">
 
<a href="{@link}" class="include_catalog_price_list2">
 
<span>
 
<xsl:value-of select="@name" />
 
</span>
 
</a>
 
</td>
 
<td class="include_catalog_price_list2">
 
<p>
 
<xsl:value-of select="$item_price"/>
 
</p>
 
</td>
 
</tr>
 
<xsl:apply-templates select="items" mode="include_catalog_price_list"/>
 
</xsl:template>
 
  
<!-- level_2 -->
+
<!-- level_1 -->
<xsl:template match="udata[@module = 'content' and @method = 'menu']//items" mode="include_catalog_price_list">
+
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_price_list">
<tr class="include_catalog_price_list">
+
<tr class="price_list_subcategory">
<xsl:apply-templates select="item" mode="include_catalog_price_list2"/>
+
<td colspan="2">
</tr>
+
<a href="{@link}" class="price_list">
</xsl:template>
+
<span>
 +
&nbsp;&nbsp;&nbsp;&nbsp;Подраздел <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 match="udata[@module = 'content' and @method = 'menu']//item" mode="include_catalog_price_list2">
+
<!-- level_2 -->
 
+
<xsl:template match="udata[@method = 'getCategoryList']//item" mode="include_catalog_price_list">
<tr>
+
<tr class="price_list_subsubcategory">
<td class="include_catalog_price_list2">
+
<td colspan="2">
<a href="{@link}" class="include_catalog_price_list2">
+
<a href="{@link}" class="price_list2">
<span>
+
<span>
<xsl:value-of select="@name" />
+
&nbsp;&nbsp;&nbsp;&nbsp;Подподраздел <xsl:value-of select="." />
</span>
+
</span>
</a>
+
</a>
</td>
+
</td>
<td class="include_catalog_price_list2">
+
</tr>
<p>
+
</xsl:template>
<xsl:value-of select="$item_price"/>
+
</p>
+
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="price_list">
</td>
+
<tr class="price_list_subsubcategory">
</tr>
+
<td>
<xsl:apply-templates select="items" mode="item_price"/>
+
<a href="{@link}" class="price_list2">
</xsl:template>
+
<span>
 +
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Товар <xsl:value-of select="." />
 +
</span>
 +
</a>
 +
</td>
 +
<td>
 +
Стоимость товара
 +
</td>
 +
</tr>
 +
</xsl:template>
  
<!-- level_3 -->
 
<xsl:template match="upage" mode="item_price">
 
<xsl:apply-templates select="item" mode="inc_cat_price_list2"/>
 
</xsl:template>
 
  
<xsl:template match="udata[@module = 'content' and @method = 'menu']//item" mode="inc_cat_price_list2">
+
<!-- custom catalog menu end-->
<tr>
 
<td colspan="2">
 
<li>
 
<a href="{@link}" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:empty="&empty-section-name;" umi:delete="delete">
 
<span>
 
<xsl:value-of select="@name" />
 
</span>
 
</a>
 
<xsl:text> (</xsl:text>
 
<xsl:value-of select="document(concat('udata://catalog/getObjectsList//', @id))/udata/total" />
 
<xsl:text>)</xsl:text>
 
</li>
 
</td>
 
</tr>
 
</xsl:template>
 
<!-- custom catalog menu end-->
 
  
 
</xsl:stylesheet>
 
</xsl:stylesheet>
 
</source>
 
</source>

Версия 07:41, 5 ноября 2013

Задача

Необходимо сформировать прайс лист на основе имеющегося каталога и выводить его на странице, что бы изменения в каталоге отображались сразу и в прайс листе

Решение

Для решения данной задачи сформируем шаблон основанный на макросе content menu. Для этого первым делом необходимо убедиться, что у всех разделов и товаров стоят галочки Отображать в меню и Показывать подменю. После этого необходимо добавить в главном шаблоне вывод прайс листа строкой:

<xsl:if test=" $document-page-id = 202">
	<xsl:apply-templates select="document('udata://content/menu/(null)/5/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[@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>
							&nbsp;&nbsp;&nbsp;&nbsp;Подраздел <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>
							&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>


		<!-- custom catalog menu end-->

</xsl:stylesheet>