Navigationsaufruf und Navigationstemplates

Die Hauptnavigation in Weblication® Projekten wird als separate Datei erzeugt und beinhaltet alle Informationen zu den Links auf beliebige Seiten. Anders als in anderen Systemen wird die Navigationsstruktur hierbei nicht automatisch (aus Verzeichnisstrukturen oder ähnlichem) erzeugt, sondern besteht aus einer Datei, in der alle vorhandenen Verlinkungen im XML-Format abgelegt werden:

/$projekt/wGlobal/content/navigations/standard.wNavigation.php

Das Speichern der Link-Struktur in einer eigenständigen Datei ohne Abhängigkeiten zur Verzeichnis- und Dateistruktur auf dem Server bietet mehrere Vorteile:

  • Völlige Flexibilität bei der Erstellung der Navigationsstruktur
  • Verlinkung beliebiger interner und externer Dateien
  • Hohe Erweiterbarkeit bei der Speicherung individueller Datensätze innerhalb einer Linkinformation
  • Transparenz bei der Entwicklung

Die Navigationsdatei(en) wird innerhalb eines Weblication® Projektes als "normale" XML-Inhaltsdatei geführt und ist somit ebenfalls eingecheckt. So ist es möglich, beliebigen Benutzern Berechtigungen zur Bearbeitung dieser Datei zu geben, die Datei in einen Workflow zu stellen oder um individuelle Daten anzureichern.

Aufbau und Struktur

Aufbau und Struktur der Navigationsdatei standard.wNavigation.php

<?php $version="1.0"; $encoding="UTF-8"; ?>
<?php exit; ?>
<wNavigation version="5.0">
  <wd:extension type="weblication" version="5.0">
    <wd:meta>
      <wd:title>Standardnavigation</wd:title>
      <wd:description/>
      <wd:keywords/>
      <wd:thumbnail/>
      <wd:robots value="index"/>
      <wd:modification name="" time=""/>
      <wd:creation name="" time=""/>
    </wd:meta>

    <wd:status>
      <wd:online from="" status="on" to=""/>
      <wd:type value=""/>
    </wd:status>

    <wd:permissions>
      <wd:owner name="admin" role=""/>
    </wd:permissions>
      <wd:cache expires="{wGetValueOfDefaultExtension()}"/>
  </wd:extension>

  <navPoint title="Aktuelles"           link="/de/aktuelles/index.php"          text="Aktuelles"          id="1"/>
  <navPoint title="Kontakt"             link="/de/kontakt/index.php"            text="Kontakt"            id="2"/>
  <navPoint title="Inhaltsverzeichnis"  link="/de/inhaltsverzeichnis/index.php" text="Inhaltsverzeichnis" id="3"/>
  <navPoint title="Impressum"           link="/de/impressum/index.php"          text="Impressum"          id="4"/>
  <navPoint title="Suche"               link="/de/suche/index.php"              text="Volltextsuche"      id="5"/>
  
</wNavigation>

Aufruf der Navigation

Der Aufruf der Funktion, welche die Navigation am gewünschten Punkt im XHTML-Quelltext erzeugt, wird im XSLT-Stylesheet notiert:

Beispiel: Aufruf der Navigation über wsl:navigation

<wsl:navigation 
  data="/de/wGlobal/content/navigations/standard.wNavigation.php" 
  template="/deGlobal/wGlobal/layout/templates/navigations/main.wNavigation.php" 
  mode="tree" 
  navid="$PARAM['navid']"
/>

Diese Funktion erzeugt durch eine XSL-Transformation den XHTML-Quelltext, welcher an der Stelle des Funktionsaufrufs in die Ausgabe kopiert wird. Hierbei stehen folgende Parameter zur Verfügung:

data Pfad zur XML-Datei, in welcher die Informationen über die Navigationsstruktur abgelegt sind.
Standardwert:
/de/wGlobal/content/navigations/standard.wNavigation.php
 
template

Pfad zum XSLT-Stylesheet, welches die Regeln und den XHTML-Code für die Darstellung der Navigation beinhaltet.
Standardwert:
/deGlobal/wGlobal/layout/templates/navigations/main.wNavigation.php

mode Modus der Navigation
Mögliche Werte:
  • tree
    als Baum, selektierte geöffnet
  • treeAll
    als Baum, alle geöffnet
  • sitemap
    Sitemap (alles geöffnet)
  • breadcrumb
    Brotkrümel
 
navid Übergabe der NAVID zur Anzeige des aktiven Navigationspunktes.
Systemparameter, nicht verändern!
Wert: $PARAM['navid']
 

Darstellung der Navigation mit XSLT

Zur Darstellung der Navigation wird ein XSLT-Stylesheet verwendet, der Pfad zu dieser Datei wird als Parameter "template" im Aufruf angegeben (siehe Abschnitt oben).

Ausschnitt aus dem XSLT-Stylesheet zur Darstellung der Navigationsdatei (main.wNavigation.php)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wsl="http://weblication.de/5.0/wsl" version="1.0">
  <xsl:output method="xml" indent="no" omit-xml-declaration="yes" encoding="UTF-8"/>

  <xsl:template match="/wNavigation">
    <div id="navigationMain">
      <ul class="navLevel1Container">
        <!--Hier steht später die generierte Navigation-->
        <xsl:apply-templates select="/wNavigation/navPoint"/>
      </ul>
    </div>
  </xsl:template>

  <!--Dieses Template wird auf jeden Navigtionspunkt des ersten Levels angewandt-->
  <xsl:template match="/wNavigation/navPoint">
    <xsl:choose>
      <xsl:when test="@selected = '1' and @open = '1'">
        <li class="navLevel1OpenSelected">
          <a accesskey="{substring(@text, 1 , 1)}" class="navLevel1OpenSelected" href="{@link}"><span><xsl:value-of select="@text"/></span></a>
          <ul class="navLevel2Container">
            <xsl:apply-templates select="navPoint"/>
          </ul>
        </li>
      </xsl:when>
      <xsl:when test="@selected = '1'">
        <li class="navLevel1Selected">
          <a accesskey="{substring(@text, 1 , 1)}" class="navLevel1Selected" href="{@link}"><span><xsl:value-of select="@text"/></span></a>
        </li>
      </xsl:when>
      <xsl:when test="@open = '1'">
        <li class="navLevel1Open">
          <a accesskey="{substring(@text, 1 , 1)}" class="navLevel1Open" href="{@link}"><span><xsl:value-of select="@text"/></span></a>
          <ul class="navLevel2Container">
            <xsl:apply-templates select="navPoint"/>
          </ul>
        </li>
      </xsl:when>
      <xsl:otherwise>
        <li class="navLevel1">
          <a accesskey="{substring(@text, 1 , 1)}" class="navLevel1" href="{@link}"><span><xsl:value-of select="@text"/></span></a>
        </li>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

Bedeutung der wichtigsten Attributnamen (@xxx)

  • @link
    Gibt den Link(pfad) eines Navigationspunktes an
  • @linkFull
    Kombination aus @link und @navidExtIfNeeded
  • @text
    Gibt den Text eines Navigationspunktes an
  • @level
    Gibt das aktuelle Level an
  • @selected
    Gibt den Navigationszustand für den selektierten (derzeit aufgerufenen) Navigationspunkt an.
  • @open
    Gibt an, ob der Navigationspunkt in der aktuellen Darstellung geöffnet ist.
  • @numberChilds
    Gibt die Anzahl der Unterpunkte an
  • @navidExtIfNeeded
    Gibt die Navigations-ID (navid) an, falls ein Navigationspunkt mehrfach in der Navigation verlinkt ist

Erweiterung der Navigationspunkte um eigene Parameter

Der Eintrag eines Links innerhalb der Navigation hat aus dem Standard heraus folgende Struktur:

Struktur eines Navigationspunkts (navPoint)

<navPoint 
  title="Aktuelles" 
  link="/de/aktuelles/index.php" 
  text="Aktuelles" 
  id="1242117739874"
/>

Diese Struktur kann pro Projekt individuell erweitert werden. Zur Pflege dieser erweiterten Strukturen läßt sich die bestehende Pflegemaske der Navigation wie folgt erweitern:

Pflegemaske zur Navigation:

/wGlobal/wGlobal/layout/editor/navigation/attributes.wEditorNavpoint.php

attributes.wEditorNavpoint.php

<?php $version="1.0"; $encoding="UTF-8"; ?>
<?php /* ?>
<wEditorNavpoint version="1.0" xmlns:de="de" xmlns:en="en">
  <attribute name="title" editor="input" value="" caption="Titel" editable="1" />
  <attribute name="name" editor="input" value="" caption="Name" editable="0"/>
  <attribute name="target" editor="selectbox" valueSelected="" caption="Ziel" editable="1" >
    <option value="_self">Aktuelles Fenster</option>
    <option value="_blank">Neues Fenster</option>     
  </attribute> 
  <attribute name="id" editor="input" value="" caption="ID" editable="0"/>  
  <attribute name="accesskey" editor="input" value="" caption="Accesskey" editable="0"/>
  <attribute name="img" editor="input" value="" caption="Grafik" editable="1"/>
  <attribute name="imgHover" editor="input" value="" caption="Grafik 2" editable="1"/>
  <attribute name="opt" editor="input" value="" caption="Zusatzparameter" editable="0"/>
  <attribute name="multipleLink" editor="selectbox" valueSelected="1" caption="Mehrfachverlinkung" editable="0">
    <option value="0">Nein</option> 
    <option value="1">Ja</option>    
  </attribute>     
</wEditorNavpoint>
<?php */?>

Hierbei ist ein Attribut eines Navigationspunktes wie folgt aufgebaut:

name Name des neuen Attributes
Wert: String
 
editor Art des Eingabeinterfaces
Werte:
input (Einzeiliges Eingabefeld für Text ohne WYSIWYG-Funktionalitäten)
selectbox (Auswahlfeld für mehrere Einträge. Hierbei stellen die option-Kindelemente des Attributes die Auswahlmöglichkeiten dar.)
 
value Wert des Eingabefeldes. Zur Vorbelegung mit Standardwerten oder bei option-Elementen
Wert: String oder leer
 
caption Angezeigter Name des Feldes
Wert: String
 
editable Setzt das Feld auf bearbeitbar
Werte: 0|1 (Nicht bearbeitbar, im Editor nicht angezeigt|Bearbeitbar)
valueSelected Vorausgewählter Wert bei Selectfeldern. Nur in Verbindung mit editor=selectbox sinnvoll.
Werte: String oder leer

Dieser Struktur folgend lassen sich nun beliebige weitere Attribute für die Pflege eines Navigationspunktes definieren.

Beispiel: definiertes Attribut eines navPoint

<attribute name="neuesAttribut" editor="input" value="" caption="Anzeigetitel des neuen Attributs" editable="1" />

// Attribut mit Textfeld als Bearbeitungsmaske


<attribute name="target" editor="selectbox" valueSelected="_self" caption="Ziel" editable="1" >
  <option value="_self">Aktuelles Fenster</option>
  <option value="_blank">Neues Fenster</option>     
</attribute> 

// Attribut mit Selectbox und zwei Werten (option)

Jedes auf diese Weise definierte Attribut steht innerhalb des Navigationstemplates gemäß XSLT/ XPATH als Attribut des Navigationspunktes zur Verfügung:

Beispiel: Ausgabe eines definierten Attributes eines navPoint

<xsl:template match="/wNavigation/navPoint">
  <xsl:value-of select="@neuesAttribut"/> // Referenzierung eines Attributes des navPoint-Knotens
</xsl:template>

Individuelle Pflegemaske für Navigationen

Eine eigene Pflegemaske für eine bestimmte Navigationsdatei (z.B. die Meta-Navigation) können Sie wie folgt nutzen:

Legen Sie passend zum Namen der Navigationsdatei (z.B. meta.wNavigation.php) die Datei für die Definition der Pflegemaske an, im Beispiel also:

/[IHR-LAYOUT-PROJEKT]/wGlobal/layout/editor/navigation/meta.attributes.wEditorNavpoint.php

In dieser Pflegemaske können Sie die Attribute passend für die verwendete Navigationsdatei definieren, um so z.B. ein Ziel (oder andere Attribute) pflegbar zu machen.