нужно эту строчку поставить в условие, то есть <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/';, @id))" /> выводит подразделы каталога. А нам надо чтобы подразделы выводились тольку для текущего раздела, тогда нам надо сделать проверку на равенство id текущей страницы и id раздела, для которого мы собираемся выводить подраздел
<xsl:variable name="current_page_id" select="./result/@pageId" />
<xsl:if test="@id=$current_page_id">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/';, @id))" />
</xsl:if>
Могу ошибаться в строчке <xsl:variable name="current_page_id" select="./result/@pageId" />, так как пишу по памяти, возможно там должно быть <xsl:variable name="current_page_id" select="/result/@pageId" />, в любом случае поищите в шаблонах, как получить id текущей страницы, там есть такие примеры
в корневом шаблоне ты используешь <xsl:apply-templates s elect="document('udata:// catalog/getCategoryList/void/s hop/')" mode="left-column" />
а шаблон который должен его подхватить
<xsl:template match="items" mode="left-column"> где промежуточный шаблон?
и вообще, для твоей задачи решение следующее (вставь это в файл /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=/result/parents/page/@id">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" />
<xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
возможно в этой строчке <xsl:if test="@id=$document-page-id or @id=/result/parents/page/@id">
могут быть ошибки если не сработает проверь так
<xsl:if test="@id=$document-page-id">
но такой код не будет показывать подменю активного раздела если есть 3 уровень подменю и мы в нем
Выше указанный пример не работает, пустая страница выводится.
Нашел решение такое вставить это в файл /catalog/left-column-category-list.xsl
Но меню работает не глубже второго уровня и цифры на странци под меню отображаются
<total>12</total>
<per_page>25</per_page>
Как убрать ХЗ, подскажите?
Кстати никто не сталкивался, когда находишься в разделе каталога, щелкаешь на вторую третью страницу каталога, меню слева исчезает, из-за чего это может быть?
<?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']//item" mode="left-column">
<!-- вызов кастомного скрипта -->
<xsl:variable name="actmenu" select="document(concat('udata://custom/activmenu/',@id,'/',$document-page-id))/udata" />
<ul class="catalog_menu" umi:button-position="bottom left"
umi:element-id="{@category-id}" umi:region="list" umi:module="catalog" umi:sortable="sortable">
<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="$actmenu = 1">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" />
</xsl:if>
</ul>
</xsl:template>
</xsl:stylesheet>
Всем привет, вернулся к разбору менюшки.
<?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">
<!-- вызов кастомного скрипта -->
<xsl:variable name="actmenu" select="document(concat('udata://custom/activmenu/',@id,'/',$document-page-id))/udata" />
<li><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="$actmenu = 1">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1'))" />
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
Меню слева отображается глубиной до 2-го уровня, а как сделать чтобы он смотрел глубже?
Правильно ли?
в файле /xsltTpls/modules/catalog/category-list.xsl
<xsl:apply-templates select="document('udata://custom/is_active_page/parametr/')" />
<a href="{@link}" class="def_module::parseTemplate($шаблон, $массив_с_блоками, $id_елемента);" umi:field-name="name" umi:delete="delete" umi:empty="&empty-section-name;">
В XSLT вызов макросов производится с помощью udata, тоесть
<xsl:apply-templates select="document('udata://custom/is_active_page/parametr/')" />
Где parametr - передаваемый в макрос параметр.
Также, должен быть описан шаблон, по которому будет выводится значение, а сам результат должен возвращаться из метода посредством
def_module::parseTemplate($шаблон, $массив_с_блоками, $id_елемента);
Как точно все написать?
Или как можно легче вывести в class"значение active" и как?
А как поставить условие проверки?
Если в разделе имеются подразделы то оно выполняется, как это реализовать?
<xsl:if test="$podrazdel= 1">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id, '//1/' ))" mode="left-column3" />
</xsl:if>