Формирование прайс листа на основе каталога XSLT — различия между версиями
 (Новая страница: «== Задача ==  Необходимо сформировать прайс лист на основе имеющегося каталога и выводить е…»)  | 
				|||
| Строка 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[@method = 'getCategoryList']" mode="price_list">  | |
| − | + | 			<table class="price_list">  | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | 			<  | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
				<tr>  | 				<tr>  | ||
					<td>  | 					<td>  | ||
| Строка 82: | Строка 35: | ||
					</td>  | 					</td>  | ||
				</tr>  | 				</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">  | |
| − | 			<xsl:apply-templates select="item" mode="  | + | 				<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>  | 
| − | 		<td class="  | + | 			</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>  | |
| + | 							        Товар <xsl:value-of select="." />  | ||
| + | 						</span>  | ||
| + | 					</a>  | ||
| + | 				</td>  | ||
| + | 				<td>  | ||
| + | 					Стоимость товара  | ||
| + | 				</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>
							    Подраздел <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">
			<tr class="price_list_subsubcategory">
				<td>
					<a href="{@link}" class="price_list2">
						<span>
							        Товар <xsl:value-of select="." />
						</span>
					</a>
				</td>
				<td>
					Стоимость товара
				</td>
			</tr>
		</xsl:template>
		<!-- custom catalog menu end-->
</xsl:stylesheet>