Делаю выпадающее меню на основе решения из 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>
Как проверить список на наличие дочерних элементов ума не приложу.
при переборе конкретного 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>
Спасибо работает!!!
Только текущий класс который стоял в элементе до проверки эта проверка перезаписывает. Можно как то сделать что бы новый класс добавлялся к текущим?
PS если проверка отрицательная то текущий класс вообще удаляется((
потому как конструкция
<xsl:attribute name="class">parents</xsl:attribute>
не добавляет, а перезаписывает