Динамическое подменю для демо-сайта Современный (xslt) — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
Строка 1: Строка 1:
 
'''Задача:''' На демо-сайте по продаже бытовой техники есть подменю, подменю находится слева и представляет из себя разделы каталога, и подразделы каталога. Все разделы каталога раскрыты (показывают подразделы) и не изменяются при переходе на разделы или подразделы. В этой статье мы рассмотрим как сделать динамическое меню, для этого сайта, поскольку многие пользователю берут за основу своего сайта именно функционал демо-сайта Современный.
 
'''Задача:''' На демо-сайте по продаже бытовой техники есть подменю, подменю находится слева и представляет из себя разделы каталога, и подразделы каталога. Все разделы каталога раскрыты (показывают подразделы) и не изменяются при переходе на разделы или подразделы. В этой статье мы рассмотрим как сделать динамическое меню, для этого сайта, поскольку многие пользователю берут за основу своего сайта именно функционал демо-сайта Современный.
  
'''Решение:''' Нам необходимо, чтобы все разделы каталога были свернуты, при нажатии на раздел, показывались подразделы, при нажатии на подраздел показывались товары подраздела, или дочерние подразделы если они есть. При переходе в другой раздел каталога, предыдущий закрывается, а текущий наоборот раскрывается. Подменю демо-сайта, построено с помощью вызовов catalog getCategoryList и catalog getObjectsList, поэтому нам не нужно ставить галочки "Отображать в меню", "Показывать подменю", потому что они ни как не будут влиять
+
'''Решение:''' Нам необходимо, чтобы все разделы каталога были свернуты, при нажатии на раздел, показывались подразделы. При переходе в другой раздел каталога, предыдущий закрывается, а текущий наоборот раскрывается. Подменю демо-сайта, построено с помощью вызова catalog getCategoryList, поэтому нам не нужно ставить галочки "Отображать в меню", "Показывать подменю", потому что они ни как не будут влиять
 
на данные вызовы (эти галочки влияют если меню создано вызовом content menu)
 
на данные вызовы (эти галочки влияют если меню создано вызовом content menu)
 
        
 
        

Текущая версия на 09:32, 17 августа 2013

Задача: На демо-сайте по продаже бытовой техники есть подменю, подменю находится слева и представляет из себя разделы каталога, и подразделы каталога. Все разделы каталога раскрыты (показывают подразделы) и не изменяются при переходе на разделы или подразделы. В этой статье мы рассмотрим как сделать динамическое меню, для этого сайта, поскольку многие пользователю берут за основу своего сайта именно функционал демо-сайта Современный.

Решение: Нам необходимо, чтобы все разделы каталога были свернуты, при нажатии на раздел, показывались подразделы. При переходе в другой раздел каталога, предыдущий закрывается, а текущий наоборот раскрывается. Подменю демо-сайта, построено с помощью вызова catalog getCategoryList, поэтому нам не нужно ставить галочки "Отображать в меню", "Показывать подменю", потому что они ни как не будут влиять на данные вызовы (эти галочки влияют если меню создано вызовом content menu)

1. Шаблоны подменю находятся по пути ~xsltTpls/modules/catalog/left-column-category-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">

	<xsl:template match="udata[@method = 'getCategoryList']" mode="left-column">
		<ul class="catalog_menu" umi:button-position="bottom left"
			umi:element-id="{@category-id}" umi:region="list" umi:module="catalog" umi:sortable="sortable">
			<xsl:apply-templates select="//item" mode="left-column" />
		</ul>
	</xsl:template>

	<xsl:template match="udata[@method = 'getCategoryList']//item" mode="left-column">
		<li umi:element-id="{@id}" umi:region="row">
			<span>
				<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;">
					<xsl:value-of select="." />
				</a>
			</span>
			
			<xsl:if test="(@id=$document-page-id) or (@id=$document-page-parent-id/page/@id)">
				<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))"
mode="left-column-sub"/>
			</xsl:if>
		</li>
	</xsl:template>
	
	<!--шаблон для подразделов 2 и более уровней-->
	<xsl:template match="udata[@method = 'getCategoryList']" mode="left-column-sub">
		<ul umi:element-id="{@category-id}" umi:region="list" umi:module="catalog" umi:sortable="sortable" 
umi:button-position="top right">
			<xsl:apply-templates select="//item" mode="left-column-sub"/>
		</ul>
	</xsl:template>

	<xsl:template match="udata[@method = 'getCategoryList']//item" mode="left-column-sub">
		<li umi:element-id="{@id}" umi:region="row">
			<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;">
				<xsl:value-of select="." />
			</a>
			<xsl:if test="(@id=$document-page-id) or (@id=$document-page-parent-id/page/@id)">
				<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" 
mode="left-column-sub"/>
			</xsl:if>
		</li>
	</xsl:template>

</xsl:stylesheet>

2. В файл, находящийся по пути ~xsltTpls/default.xsl добавляем строку

<xsl:variable name="document-page-parent-id" select="/result/parents" />