Thomas J.S.: Transformation Navigation

Beitrag lesen

Hallo,

Vielen Dank für die Antwort
Ich habe ein XML Dokument, dass das gesamte Verzeichnis einer Webseite enthält.
Ich möchte aber nicht das gesamte Verzeichnis in einer einzigen Navigation auflisten. Dafür habe ich eine Lösung, aus der das XSLT Fragment entnommen ist.

Vielmehr
Ich brauche einen Bereich (DIV), in dem nur die Elemente der ersten Ordnung angezeigt werden (Einleitung, Hauptteil, Schluss = was  als Hauptnavigation immer sichtbar bleiben soll)  - und einen zweiten Bereich (DIV), der erst auf der ausgewählten Seite erscheint, beispielsweise auf der Seite "Hauptteil", und dort  alle untergeordneten Elemente (Subseiten und SubSubSeiten  des Hauptteils) in Form eines Klappmenus bereitstellt.

Auf Grund deines XMLs würde ich es so machen:

Globaler Parameter "dateiname" wird an den XSLT-Prozessor übergeben, wohl vom Script dass bei die die XML/XSLT-TRanformation macht.

Zwei Templates für menu mit verschiedenen Modi.

  • Der erste liest nur die topics aus, die dirket unter menu stehen.
  • Der zweite wird dann aktiv wenn der Paramter zutrifft und dann ruft er für das aktuelle topic, den eigentlichen "Topic-Template", der seinerseits rekursiv nach unten die Listen generiert.

Ich würde dir dringend von Tabellen und solchen Einrückungen, wie du es gemacht hast abraten. Für Navigation(en) sind Listen in 99.99% der Fälle die perfekte Lösung.

Ob du das mit "ausklappen" und "einklappen" über CSS löst oder JavaScript, muss du dann entscheiden.

Du kannst dir auch eine vorschauseite wie z.B.
http://redaktion.selfhtml.org/selfhtml-preview/html/allgemein/validitaet.html ansehen, wie dort die verschiedenen Navigationen gelöst sind (z.B. der bread crumb trail).

Ich erwähne es nur, denn ich denke nicht dass dir das weiterhilft (weil es ev. zu kompliziert) - dass wir für die Generierung der Doku ebenfalls eine zentrale Indexdatei verwenden und daraus alle Navigationen erzeugen. Code im SVN: https://redaktion.selfhtml.org/browser/selfhtml/trunk)

Grüße
Thomas

  
     <xsl:param name="dateiname" />  
     <xsl:template match="/">  
        <xsl:apply-templates select="menu" mode="obersteEbene" />  
  
        <xsl:apply-templates select="menu" mode="untereEbenen">  
            <xsl:with-param name="parentTopic" select="$dateiname" />  
        </xsl:apply-templates>  
    </xsl:template>  
  
    <xsl:template match="menu" mode="obersteEbene">  
        <h1>Hauptnavigation</h1>  
        <ul>  
            <xsl:for-each select="topic">  
                <li>  
                    <xsl:value-of select="@text"/>  
                </li>  
            </xsl:for-each>  
        </ul>  
    </xsl:template>  
    <xsl:template match="menu" mode="untereEbenen">  
        <xsl:param name="parentTopic" />  
        <h2>Seiten in diesem Bereich</h2>  
        <ul>  
            <xsl:for-each select="topic[@href = $parentTopic]">  
                <xsl:apply-templates select="." />  
            </xsl:for-each>  
        </ul>  
    </xsl:template>  
    <xsl:template match="topic">  
        <li>  
            <a href="{@href}">  
                <xsl:value-of select="@text"/>  
            </a>  
            <xsl:for-each select="topic">  
                <ul>  
                    <xsl:apply-templates select="." />  
                </ul>  
            </xsl:for-each>  
        </li>  
    </xsl:template>