Формирование прайс листа на основе каталога 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" />