Вопрос по xsl

lazio
На сайте с 05.10.2006
Offline
47
723

Вот столкнулся... не могу в шаблоне сделать правильно список, что б <ul><li></li></ul> . Получается что каждый пункт берется в <ul></ul> :confused:

Файл:


<?xml version='1.0' encoding="Windows-1251"?>
<!DOCTYPE xhtml SYSTEM "xhtml11.dtd">
<!--
Дерево секций для двух вариантов страниц магазинов:
1. для описания списка товаров
2. для описания одного товара
-->
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" exclude-result-prefixes="menu" xmlns:menu = "http://shop.by/menu">

<xsl:output method="html" encoding="Windows-1251"/>

<xsl:template name="left_showsections7_catalog">
<xsl:apply-templates select="/document/content/menu:data/data" mode="left_showsections7_section">
<xsl:sort select="constant/position" data-type="number" order="ascending" />
</xsl:apply-templates>

</xsl:template>

<xsl:template match="data" mode="left_showsections7_section">
<xsl:param name="level" select="1"/>

<xsl:choose>
<xsl:when test="$level = 1">
<xsl:if test="constant/status/text()!=0">

<xsl:if test="/document/page/@page_id = constant/page_id"><xsl:call-template name="left_showsections7_menuitemsel"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="/document/page/@page_id != constant/page_id"><xsl:call-template name="left_showsections7_menuitem"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="( (/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0) and (descendant-or-self::constant/page_id = /document/page/parent_id) ) or ( not((/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0)) and (descendant-or-self::constant/page_id = /document/page/@page_id) )">
<xsl:apply-templates select="data" mode="left_showsections7_section"><xsl:sort select="constant/position" data-type="number" order="ascending" /><xsl:with-param name="level" select="$level+1"/></xsl:apply-templates>
<xsl:if test="count(data[constant/status/text() != 0])"><div class="menusep"></div></xsl:if>
</xsl:if>

</xsl:if>

</xsl:when>
<xsl:when test="$level = 2">
<xsl:if test="constant/status/text()!=0">

<xsl:if test="/document/page/@page_id = constant/page_id"><xsl:call-template name="left_showsections7_menuitemsel"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>
<xsl:if test="/document/page/@page_id != constant/page_id"><xsl:call-template name="left_showsections7_menuitem"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="( (/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0) and (descendant-or-self::constant/page_id = /document/page/parent_id) ) or ( not((/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0)) and (descendant-or-self::constant/page_id = /document/page/@page_id) )">
<xsl:apply-templates select="data" mode="left_showsections7_section"><xsl:sort select="constant/position" data-type="number" order="ascending" /><xsl:with-param name="level" select="$level+1"/></xsl:apply-templates>
</xsl:if>

</xsl:if>


</xsl:when>
<xsl:when test="$level = 3">
<xsl:if test="constant/status/text()!=0">

<xsl:if test="/document/page/@page_id = constant/page_id"><xsl:call-template name="left_showsections7_menuitemsel"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="/document/page/@page_id != constant/page_id"><xsl:call-template name="left_showsections7_menuitem"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="( (/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0) and (descendant-or-self::constant/page_id = /document/page/parent_id) ) or ( not((/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0)) and (descendant-or-self::constant/page_id = /document/page/@page_id) )">
<xsl:apply-templates select="data" mode="left_showsections7_section"><xsl:sort select="constant/position" data-type="number" order="ascending" /><xsl:with-param name="level" select="$level+1"/></xsl:apply-templates>
</xsl:if>

</xsl:if>
</xsl:when>
<xsl:when test="$level = 4">
<xsl:if test="constant/status/text()!=0">

<xsl:if test="/document/page/@page_id = constant/page_id"><xsl:call-template name="left_showsections7_menuitemsel"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="/document/page/@page_id != constant/page_id"><xsl:call-template name="left_showsections7_menuitem"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="( (/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0) and (descendant-or-self::constant/page_id = /document/page/parent_id) ) or ( not((/document/content/content:data[constant/page_id = /document/page/@page_id] and /document/page/@page_id != 0)) and (descendant-or-self::constant/page_id = /document/page/@page_id) )">
<xsl:apply-templates select="data" mode="left_showsections7_section"><xsl:sort select="constant/position" data-type="number" order="ascending" /><xsl:with-param name="level" select="$level+1"/></xsl:apply-templates>
</xsl:if>

</xsl:if>
</xsl:when>
<xsl:when test="$level = 5">
<xsl:if test="constant/status/text()!=0">

<xsl:if test="/document/page/@page_id = constant/page_id"><xsl:call-template name="left_showsections7_menuitemsel"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

<xsl:if test="/document/page/@page_id != constant/page_id"><xsl:call-template name="left_showsections7_menuitem"><xsl:with-param name="level" select="$level"/></xsl:call-template></xsl:if>

</xsl:if>
</xsl:when>

<xsl:otherwise></xsl:otherwise>
</xsl:choose>

</xsl:template>
<!-- формирование неактивных разделов в магазине -->
<xsl:template name="left_showsections7_menuitem">

<xsl:param name="level" select="1"/>

<xsl:choose>


<xsl:when test="$level=1">
<!-- первый уровень -->
<li><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></li>
</xsl:when>


<xsl:when test="$level=2">
<!-- второй уровень -->
<a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a>
</xsl:when>

<xsl:when test="$level=3">
<!-- третий уровень -->
<a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a>
</xsl:when>

<xsl:when test="$level=4">
<!-- четвёртый уровень -->
<a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a>
</xsl:when>

<xsl:when test="$level=5">
<!-- пятый уровень -->
<a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a>
</xsl:when>

<xsl:otherwise></xsl:otherwise>
</xsl:choose>

</xsl:template>


<xsl:template name="left_showsections7_menuitemsel">
<!-- фомрирование активных разделов в магазине -->
<xsl:param name="level" select="1"/>
<xsl:choose>
<xsl:when test="$level=1">
<!-- первый уровень -->
<div class="mlevel1 sel"><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></div>
<div class="menusep"></div>
</xsl:when>

<xsl:when test="$level=2">
<!-- второй уровень -->
<div class="mlevel2 sel"><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></div>
</xsl:when>

<xsl:when test="$level=3">
<!-- третий уровень -->
<div class="mlevel3 sel"><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></div>
</xsl:when>

<xsl:when test="$level=4">
<!-- четвёртый уровень -->
<div class="mlevel4 sel"><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></div>
</xsl:when>

<xsl:when test="$level=5">
<!-- пятый уровень -->
<div class="mlevel5 sel"><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></div>
</xsl:when>

<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Вот этот кусок нужно сделать:


<xsl:when test="$level=1">
<!-- первый уровень -->
<li><a href="{constant/url/text()}/"><xsl:value-of select="attr/name/value/text()" disable-output-escaping="yes"/></a></li>
</xsl:when>

Вот здесь я поставил <li>, эта ссылка генерируется, так что преде <li> поставить <ul> не советуйте ;)

Спасибо.

COMFI - Начни Зарабатывать! (http://affiliate.comfi.ru/a2/466735/Program-Overview)
E
На сайте с 14.09.2007
Offline
24
#1

xsl-ку, я так понимаю, не сами писали? Уж больно намудрил автор...

Навскидку (времени разбираться особо не было): у Вас активные пункты меню оформляются div-ами, а неактивные Вы хотите оформить элементами списка - li. И это все вперемешку. Чтоб итоговый код был валидным, или добавить <ul> перед каждым <li>, как Вы не желаете, или оформлять активные пункты меню тоже, как элементы общего списка.

lazio
На сайте с 05.10.2006
Offline
47
#2

ставить перед каждым не вариант.=) xsl-ку действительно писал не я... нужно что б все пункты первого уровня были в <ul></ul> остальное не важно))

lazio
На сайте с 05.10.2006
Offline
47
#3

хех, сам рахобрался=) модеры закройте плиз тему.

E
На сайте с 14.09.2007
Offline
24
#4
lazio:
хех, сам рахобрался=) модеры закройте плиз тему.

Ну и слава Богу! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий