навигация по сайту

3erg

Новичок
навигация по сайту

Заранее извиняюсь, если эта тема уже поднималась. Встала тут у меня проблема с генерацией навигации по сайту.
При попадании в основонй раздел должны "раскрываться" подразделы, пример привожу ниже:

// ------- document.xml ------- //

<document id="1">
...
</document>

// ------- document.xml ------- //


// ------- menu.xml------- //
<!-- глубина вложенности ограничена --!>
<menu>
<item id="1" value="item1">
<subitem id="2" pid="1" value="subitem1"/>
<subitem id="3" pid="1" value="subitem2"/>
</item>
<item id="5" value="item2">
<subitem id="7" pid="5" value="subitem1"/>
</item>
<item id="8" value="item3"/>
</menu>

// ------- menu.xml------- //

// ------- style.xsl ------- //

<xsl:variable name="menu" select="document('menu.xml')/menu"/>
<xsl:variable name="id" select="//document/@id"/>
..........
<xsl:if test="//item/@id=//subitem/@pid">
<xsl:apply-templates select="//item[@id=$id]/@value"/>
<xsl:apply-templates select="//item/subitem[@pid=$id]/@value"/>
</xsl:if>
<xsl:if test="//item/@id!=//subitem/@pid">
<xsl:apply-templates select="//item[@id!=$id]/@value"/>
</xsl:if>
......
<xsl:template match="item">
<a href="?id={@id}"><xsl:value-of select="{@value}"></a>
</template>

<xsl:template match="subitem">
#&160;#&160;<a href="?id={@id}"><xsl:value-of select="{@value}"></a>
</template>

// ------- style.xsl ------- //

Результат:

для id=1
// ------- result.html ------- //
item1
subitem1
subitem2
item2
item3
// ------- result.html ------- //

для id=5
// ------- result.html ------- //
item2
subitem1
item1
item3
// ------- result.html ------- //

Как сделать чтобы подразделы "раскрывались" без перемещения родительского раздела?

-~{}~ 07.04.05 20:47:

Осознаю, что проблемным местом в моем рещении является сие:
<xsl:if test="//item/@id=//subitem/@pid">
<xsl:apply-templates select="//item[@id=$id]/@value"/>
<xsl:apply-templates select="//item/subitem[@pid=$id]/@value"/>
</xsl:if>
<xsl:if test="//item/@id!=//subitem/@pid">
<xsl:apply-templates select="//item[@id!=$id]/@value"/>
</xsl:if>
Надеюсь на вашу помощь наимудреший all
 

slach

Новичок
всякие xsl:if'ы в основном темплейте... бредятина
<xsl:variable name="menu" select="document('menu.xml')/menu"/>
<xsl:variable name="id" select="//document/@id"/>
определи сразу после <xsl:stylesheet
чтобы они были видни внутри любого template

далее в нужном месте
<xsl:apply-templates select="$menu/item" mode="menu"/>

<xsl:template match="item" mode="menu">
<a href="?id={@id}"><xsl:value-of select="{@value}"></a>
<xsl:if test="@id=$id">
<xsl:apply-templates select="subitem" mode="menu"/>
</xsl:if>
</template>

<xsl:template match="subitem" mode="menu">
#&160;#&160;<a href="?id={@id}"><xsl:value-of select="{@value}"></a>
</template>
 

WMix

герр M:)ller
Партнер клуба
<subitem id="2" pid="1" value="subitem1"/>
зачем тебе pid если вложенность явная?
каков пхпшный смысл этого всего?

самое простое что я тебе посоветую, проверяй на правильность в
Код:
<xsl:template match="subitem">
    <xsl:if test="//item/@id =$id">
    ....
 
Сверху