Vinzenz Mai: SSI: Verlinke niemals auf die aktuelle Seite

Beitrag lesen

Hallo Matthias,

Dieses Tutorial könnte dir weiterhelfen: Navigation mit Server Side Includes

Das sieht gut aus.

es erklärt leider nicht die Syntax der verwendeten Bedingungen und macht es meiner Meinung nach komplizierter als erforderlich, weil unnötigerweise zu regulären Ausdrücken gegriffen wird. Bessere grundlegende Informationen bekommst Du bei den SSI-Developern, Conditional Expressions.

Ich hab' mir Deine Seiten angeschaut. Deine Navigation scheint jahresabhängig zu werden und ich weiß nicht, ob Du vorhast, dies alles mit *einer* einzigen Include-Datei für alle Jahre zu erledigen, oder ob Du für jedes Jahr die Include-Datei aktualisierst.

Du arbeitest innerhalb eines Jahres mit relativen Pfadangaben und könntest ohne Probleme auf das Präfix ./ verzichten. Davon gehe ich bei meinen Ausführungen aus.

Ich versuche es kurz anzureißen:

Derzeit sehen Deine Navigationspunkte so aus:

  
<p>Ferienkalender</p>  
   <ul>  
     <li><a href="./bw-2010.html">Baden-Württemberg</a></li>  
     <li><a href="./by-2010.html">Bayern</a></li>  
     <!-- weitere Menüpunkte -->  
   <ul>  

In deiner Include-Datei kannst Du nun schreiben
Beachte: die Umgebungsvariable DOCUMENT_NAME enthält nur den Namen der aufgerufenen Ressource - ohne Pfadangabe.
Um sicherzustellen, dass in Ausdrücken (Expressions) Deine Variablen als Variablen behandelt werden, schreibe sie in der Form ${Variablenname}.

<p>Ferienkalender</p>  
   <ul>  
     <li>  
     [code lang=apache]<!--#if expr="${DOCUMENT_NAME} = bw-2010.html" -->

<!-- Lautet der Name der aufgerufenen Ressource bw-2010.html? -->
     <!-- Punkt ist aktuelle Seite, nicht verlinken! -->
     Baden-Württemberg
     <!--#else -->
     <!-- nicht die aktuelle Seite, verlinke! -->
     <a href="bw-2010.html">Baden-Württemberg</a>
     <!--#endif -->
     </li>
     <!-- analog die weiteren Menüpunkte -->
   <ul>[/code]

Ich habe den Vergleich zweier Zeichenketten gewählt, statt einem regulären Ausdruck, was zu einfacherem Code führte. Außerdem finde ich die Logik:

Wenn uri = aktuelle Seite
    Schreibe unverlinkten Menüpunkt
Sonst
    Schreibe mit uri verlinkten Menüpunkt
Ende Wenn

"intuitiver" als den negierten Vergleich. Das ist Geschmackssache. Sonst entspricht es dem Vorgehen im von Ulysses verlinktem Tutorial.

Verbesserungspotential ist vorhanden:
Du möchtest die Resource umbenennen? Bereits bei diesem Schnippsel musst Du an zwei Stellen ändern. Das geht besser, indem wir eine Variable nutzen, in der wir die URI speichern:

<p>Ferienkalender</p>  
   <ul>  
     <li>  
     <!--#set var="uri" value="bw-2010.html" -->  
     <!--#if expr="${DOCUMENT_NAME} = ${uri}" -->  
     <!-- Stimmt der Name der aufgerufenen Ressource mit dem Inhalt der Variablen uri überein? -->  
     <!-- Punkt ist aktuelle Seite, nicht verlinken! -->  
     Baden-Württemberg  
     <!--#else -->  
     <!-- nicht die aktuelle Seite, verlinke! -->  
     <!-- Schreibe das Linkziel mit SSI -->  
     <a href="[code lang=apache]<!--#echo var="uri" -->
~~~">Baden-Württemberg</a>  
     <!--#endif -->  
     </li>  
     <!-- analog die weiteren Menüpunkte -->  
   <ul>[/code]  
  
Im nächsten Schritt könnte man analog den Menütext in eine Variable packen, um nur noch an einer Stelle ändern zu müssen - und nur noch eine Stelle zu haben, Fehler zu machen :-)  
  
Wenn Du nun noch die Jahresangabe, die in jeder URI steckt, über eine Variable steuerst, dann musst Du für jedes neue Jahr nur noch an einer einzigen Stelle eine Änderung vornehmen. Wenn Du das Jahr aus dem Pfad zum Skript ermitteln kannst, so kannst Du eine Include-Datei schreiben, die für alle Jahre gleich ist.  
  
  
Freundliche Grüße  
  
Vinzenz