UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: WenLeks от 23 Сентября 2014, 16:54:42

Название: Развернутый только активный пункт меню
Отправлено: WenLeks от 23 Сентября 2014, 16:54:42
День добрый.

http://wiki.umisoft.ru/Отображать_в_меню_демодизи_развернутым_только_активный_пункт_меню (http://wiki.umisoft.ru/Отображать_в_меню_демодизи_развернутым_только_активный_пункт_меню)
по аналогии сделал меню в каталоге. все работает пока не переходишь по страницам, то есть на первой странице все работает а на странице ?p=1 не работает, в чем причина?
Название: Re:Развернутый только активный пункт меню
Отправлено: admin от 27 Сентября 2014, 14:11:03
С активным пунктом все должно быть ок, скорее всего у вас пагинация (параметр p в адресной строке) действует на ваш список. То есть у вас может не выводиться разделы первого уровня или второго (который вы пытаетесь отобразить если переменная active возвращает true), так как сраница выводить не первые n-ое кол-во разделов, а соответствующий параметру p. Чтобы такого не было, используйте параметр ignore_paging при вызове макроса %catalog getCategoryList()% (подробнее о параметре см. в документации (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/katalog/catalog_getcategorylist/) )

А вообще определение активной страницы можно сделать без вызова макроса.
Макрос в wiki берет id всех родителей и id текущей страницы и сравнивает его с id текущего раздела (который в этот момент обрабатывается шаблоном). Но вся эта информация у вас есть в xml текущей страницы (узел result/parents/page/@id и атрибут result/@pageId).
Единственно, что нам мешает, мы хотим сравнить id текущего раздела с id текущей страницы или родителей текущей страницы в шаблоне, который работает с результатами макроса %catalog getCategoryList()% , а соответственно, там они нам недоступны. Но это решается просто, сделайте эти данные глобальными.

Если рассказывать на примере demodizzy, то
В файле /templates/demodizzy/xslt/default.xsl (где глобальные параметры) добавьте новый глобальный параметр
<xsl:variable name="parents" select="/result/parents" />

а глобавльный параметр с id текущей страницы уже там есть
<xsl:variable name="document-page-id" select="/result/@pageId" />

Затем, в шаблоне для обработки каждого item из результатов макроса %catalog getCategoryList()% делаем следующую проверку:
<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="$parents/page/@id = @id or $document-page-id = @id">
<xsl:apply-templates select="document(concat('udata://catalog/getCategoryList/void/', @id))" />
</xsl:if>
</li>
</xsl:template>