UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: idu.kuru от 03 Октября 2014, 11:51:47

Название: проверка наличия дочерних элементов списка
Отправлено: idu.kuru от 03 Октября 2014, 11:51:47
Делаю выпадающее меню на основе решения из wiki http://wiki.umisoft.ru/%D0%92%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E_%D0%BD%D0%B0_xslt

нужно добавить ссылке из списка первого уровня класс "top-link" и если список имеет вложенные списки то добавить класс "parent" к элементу списка

с первой задачей я как то справился добавив проверку значения переменной level
<li class="menu-item">
           
            <a id="{$level}" href="{@link}">
                <xsl:if test="($level) =1">
                    <xsl:attribute name="class">top-link</xsl:attribute>
                </xsl:if>
                <xsl:value-of select="@name" disable-output-escaping="yes" />


            </a>
            <xsl:apply-templates select="items" mode="multilevel_menu">
                <xsl:with-param name="id" select="@id" />
                <xsl:with-param name="level" select="$level" />
            </xsl:apply-templates>
        </li>

Как проверить список на наличие дочерних элементов ума не приложу.

Кроме того когда через xsl:attribute присваиваю классу какое то значение то перезаписывается текущее. Как этого избежать?

на выходе хочу получить такую структуру
<ul>
    <li class="menu-item parent">
        <a class="top-link">
           
        </a>
        <ul>
            <li class="menu-item">
                <a></a>
            </li>
        </ul>
    </li>
    <li class="menu-item"></li>
    <li class="menu-item"></li>
</ul>
Название: Re:проверка наличия дочерних элементов списка
Отправлено: admin от 04 Октября 2014, 12:50:09
Как проверить список на наличие дочерних элементов ума не приложу.
при переборе конкретного item, можно сделать так

<xsl:if test="items/item">
        <xsl:attribute name="class">parents</xsl:attribute>
</xsl:if>

,но так как у вас 2 проверки, удобнее будет сделать так
<xsl:attribute name="class">
      <xsl:if test="items/item">parents</xsl:if>
      <xsl:if test="($level) =1">top-link</xsl:if>
</xsl:attribute>
Название: Re:проверка наличия дочерних элементов спи
Отправлено: idu.kuru от 06 Октября 2014, 18:24:44
Спасибо работает!!!

Только текущий класс который стоял в элементе до проверки эта проверка перезаписывает. Можно как то сделать что бы новый класс добавлялся к текущим?

PS если проверка отрицательная то текущий класс вообще удаляется((
Название: Re:проверка наличия дочерних элементов списка
Отправлено: admin от 07 Октября 2014, 01:01:32
Спасибо работает!!!

Только текущий класс который стоял в элементе до проверки эта проверка перезаписывает. Можно как то сделать что бы новый класс добавлялся к текущим?

PS если проверка отрицательная то текущий класс вообще удаляется((
потому как конструкция
 <xsl:attribute name="class">parents</xsl:attribute>
не добавляет, а перезаписывает
Название: Re:проверка наличия дочерних элементов списка
Отправлено: idu.kuru от 07 Октября 2014, 09:19:38
Ладно проще стили немного изменить, чем дополнительные конструкции в xslt делать - быстрее работать будет.