UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Axiomateria от 26 Сентября 2014, 22:22:52

Название: Меню - ограничение глубины вывода в одном разделе
Отправлено: Axiomateria от 26 Сентября 2014, 22:22:52
Здравствуйте!
Может быть уже кто-то сталкивался с таким вопросом, как вывод меню в разделе каталога включая в себя только подразделы этого раздела.

Суть такова:

Каталог (главный раздел)
  - Раздел 1А
   -- подРаздел 2А
    ---подРаздел 3А
     ---- Объект
  - Раздел 1б
   -- подРаздел 2б
    ---подРаздел 3б
     ---- Объект
  - Раздел 1в
   -- подРаздел 2в
    ---подРаздел 3в
     ---- Объект

так вот, надо что бы в Разделах с "А" показывались только те же разделы с "А" в меню, а другие "б" и "в" разделы в меню раздела "А" не выводились.

 Я попробовал такой вызов, где переменная $document-page-id сообщает в макрос меню "pageId" именно этого открытого раздела "А"

<xsl:variable name="document-page-id" select="/result/@pageId" />

 <xsl:apply-templates select="document('udata://content/menu/(null)/5/$document-page-id')/udata/items" mode="menu-catalog-center"/>

но всё равно выводятся все разделы в меню подряд.

Что посоветуете ?
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: e.ioffe от 27 Сентября 2014, 11:39:48
1) - использовать новый модуль меню, либо getCategoryList
2) - в шаблоне, описывающем item, добавить строчку <xsl:if test="@id = $document-page-id"><xsl:apply-templates select="items/item" /></xsl:if>
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: Axiomateria от 28 Сентября 2014, 12:47:39
1) - использовать новый модуль меню, либо getCategoryList
Для нового модуля "Меню" надо множество  типов данных делать и шаблоны к ним с макросами собственными делать, что учитывая объём каталога трудоёмко будет слишком получится.
getCategoryList - выводит просто всё подряд, то есть все разделы и подразделы как слева на сайте demodizzy...

2) - в шаблоне, описывающем item, добавить строчку <xsl:if test="@id = $document-page-id"><xsl:apply-templates select="items/item" /></xsl:if>

Вот этот способ стоит доработать, как мне кажется:
 <xsl:apply-templates select="document('udata://content/menu/207/5/$document-page-id')/udata/items" mode="menu-catalog-center"/>

где 207 = ID главного раздела каталога

однако может быть я не точно понял куда вставлять ваши пример обработки?
вот как у меня получается сейчас:

    <xsl:template match="items" mode="menu-catalog-center">
        <ul>     
            <xsl:apply-templates select="item" mode="menu-catalog-center"/>
        </ul>
    </xsl:template>
   
    <xsl:template match="item" mode="menu-catalog-center">
        <a href="{@link}" umi:element-id="{@id}" umi:region="row" umi:field-name="name" umi:empty="&empty-section-name;" umi:delete="delete">
            <xsl:value-of select="@name"/>         
        </a>
        <xsl:if test="@id = $document-page-id">
            <xsl:apply-templates select="items/item" mode="menu-catalog-center" />
        </xsl:if>     
    </xsl:template>
   
и всё равно всё подряд выводится в меню, включая разделы ,как "Главная", "Новости",  "Контакты" и т.д.
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: admin от 28 Сентября 2014, 14:23:20
Axiomateria? ничего не понял. Вам надо вывесли список разделов и подразделов какого-то каталога, как в demodizzy в левом блоке. Но при этом выводить подразделы только у того раздела первого уровня, который является текущей странице или является родителем текущей страницы?
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: Axiomateria от 28 Сентября 2014, 15:27:20
Axiomateria? ничего не понял. Вам надо вывесли список разделов и подразделов какого-то каталога, как в demodizzy в левом блоке. Но при этом выводить подразделы только у того раздела первого уровня, который является текущей странице или является родителем текущей страницы?

Да : "является родителем текущей страницы"
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: admin от 28 Сентября 2014, 15:34:26
загляните сюда http://umihelp.ru/forum/index.php/topic,1898.msg8329.html#msg8329
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: Axiomateria от 30 Сентября 2014, 12:21:10
загляните сюда http://umihelp.ru/forum/index.php/topic,1898.msg8329.html#msg8329

Спасибо, admin!

Но пока в моём случае условие не выполняется...

Попробую теперь наглядно представить вопрос:

http://joxi.ru/umQqVIwyTJDZAsqftHk - на этом скриншоте раздел "Торговое оборудование 11" имеет дочерние вложения в виде подразделов, которые только и надо вывести пользователю,, находящемся в этом же разделе "Торговое оборудование 11" на сайте кроме всех остальных разделов с подразделами  "Торговое оборудование 22" "Торговое оборудование 33" "Торговое оборудование 44", которые вот пока выводятся, игнорируя условие $parents/page/@id = @id or $document-page-id = @id - см. второй скриншот  http://joxi.ru/I2cqVIwyTJA6A-Hrxs0

	<!-- условие - отображать только тот раздел в котором мы находимся -->
<xsl:if test="$parents/page/@id = @id or $document-page-id = @id">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" />
</xsl:if>
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: admin от 30 Сентября 2014, 12:59:09
Axiomateria, я правильно понимаю, что вам нужно выводить список разделов первого уровня ("Торговое оборудование 11", "Торговое оборудование 22" и т.д.) на всех страницах, за исключением страниц данных разделов и дочерних к ним.

А на странциах этих разделов и дочерних к ним надо выводить в левом (или где-там у вас выводиться этот блок) блоке только подразделы (то есть разделы второго уровня вытягивая их из разделов первого уровня являющегося текущей странице или родителем текущей страницы)? Если да, то:

вначале следует определить какой id передавать, чтобы вывести соответствующий список разделов.
<xsl:variable name="category-parent-id">
<xsl:choose>
<xsl:when test="count(result/parents/page) &gt; 1 and @module='catalog'">
<xsl:value-of select="result/parents/page[2]/@id"/>
</xsl:when>
<xsl:otherwise>551</xsl:otherwise>
</xsl:choose>
</xsl:variable>

вызов разделов
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/',$category-parent-id,'/1000'))/udata"/>

В итоге, у вас система будет выводить либо разделы 1 уровня (я предположил, что id у раздела "Каталог" = 551), либо разделы второго уровня текущей ветки, если мы находимся в подразделе или на странице товара

P.S. ну и шаблоны для вывода подразделов оформите или подключите через mode
Название: Re:Меню - ограничение глубины вывода в одном разделе
Отправлено: Axiomateria от 30 Сентября 2014, 22:59:05
Спасибо admin! Свет в конце тоннеля появился вот после такого вызова:

                                       <xsl:variable name="category-parent-id">
                                            <xsl:choose>
                                                <xsl:when test="count(result/parents/page) &gt; 1 and @module='catalog'">
                                                    <xsl:value-of select="result/parents/page[2]/@id"/>
                                                </xsl:when>
                                                <xsl:otherwise>207</xsl:otherwise>
                                            </xsl:choose>
                                        </xsl:variable>
                                       
                                        <xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/catalog//',$category-parent-id,'/1000'))/udata" mode="menu_category"/>

и его обработки:
    <xsl:template match="udata[@method = 'getCategoryList']" mode="menu_category">
        <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="menu_category" />
        </ul>
    </xsl:template>
    <xsl:template match="udata[@method = 'getCategoryList']//item" mode="menu_category">
        <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:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" mode="menu_category" />
        </li>
    </xsl:template>

НО если углубится в структуру этого раздела "Торговое оборудование 11" далее по ссылкам и его меню, то в его дочерних подразделах сами пункты меню пропадают...
Возможно ещё надо как-то вот этот момент доработать, что бы структура в меню этого раздела оставалась доступной вне зависимости от погружения в дочерние подразделы родительского раздела  (ну например что бы пользователь всегда видел все доступные пункты меню родительского раздела "Торговое оборудование 11" для ориентированной навигации)
    <xsl:template match="udata[@method = 'getCategoryList']//item" mode="menu_category">
        <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:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" mode="menu_category" />
        </li>
    </xsl:template>
?