Die Linkliste anzeigen

Wir implementieren abschließend noch die Anzeige der Galerie als Linkliste. Zur Erinnerung: Setzt der Redakteur das Feld ip_galleryAsLinks (Galerie als Linkliste?) auf yes (In der Vorlage wurde no voreingestellt), soll der Besucher keine Bilder sehen, sondern Verweise darauf. Klickt er einen solchen Bilderlink an, soll das Bild wieder in einem separaten Fenster geöffnet werden.

Diese Funktionalität lässt sich ebenfalls im Sublayout SUBL_imageGallery realisieren, am besten mit einer condition-Anweisung, in der der Wert des Feldes ip_galleryAsLinks darüber entscheidet, ob eine Tabelle mit Bildern (den Code haben wir jetzt) oder die Linkliste angezeigt wird. Hier das Gerüst:

<npsobj condition="isEqual" name1="context.ip_galleryAsLinks" value2="yes">
  <!-- Zeige Bilder als Linkliste an -->
</npsobj>
<npsobj condition="isNotEqual" name1="context.ip_galleryAsLinks" value2="yes">
  <!-- Zeige Bilder in Tabelle an -->
</npsobj>

Wir verzichten bewusst darauf, im zweiten Abschnitt des obigen Gerüsts ip_galleryAsLinks auf no zu testen, sondern prüfen ersatzweise, ob er nicht yes ist. Dadurch wird die Tabelle auch dann angezeigt, wenn der Wert von ip_galleryAsLinks versehentlich gelöscht wurde.

Zur Abfrage des Feldes benötigen wir den Präfix context, weil die condition-Anweisung innerhalb der Anweisung list="ip_galleryFolders", also im Kontext eines Links ausgewertet wird. context steigt einen Kontext weiter auf, in diesem Fall zur gerade exportieren Datei, also der Bildergalerie – und genau diese enthält ja das Feld ip_galleryAsLinks.

Das komplette Sublayout sieht jetzt so aus:

<script type="text/javascript">
function OpenWindow(address) {
  ImgWindow = window.open(address,"poster","width=150,height=200,left=650,top=100");
  ImgWindow.focus();
}
</script>

<npsobj list="ip_galleryFolders">
  <npsobj modifyvar="clear" varname="images" />
  <npsobj list="destination.children">
    <npsobj condition="isEqual" name1="objType" value2="image">
      <npsobj modifyvar="append" varname="images" name="self" />
    </npsobj>
  </npsobj>

  <npsobj condition="isEqual" name1="context.ip_galleryAsLinks" value2="yes">
    <ul>
    <npsobj list="images">
      <!-- Pfad des Bildes in der Export-Variablen imgurl speichern.
           Bitte aus den folgenden 3 Zeilen die Umbrüche entfernen! -->
      <npsobj modifyvar="set" varname="imgurl">
        <npsobj insertvalue="var" name="urlPrefix" /><npsobj insertvalue="var" name="visiblePath" />
      </npsobj>
      <a href="@imgurl" onclick="OpenWindow(this.href); return false">
        <li><npsobj insertvalue="var" name="title" /></li>
      </a>
    </npsobj>
    </ul>
  </npsobj>

  <npsobj condition="isNotEqual" name1="context.ip_galleryAsLinks" value2="yes">
    <npsobj table="images" columns="3">
      <!-- Pfad des Bildes in der Export-Variablen imgurl speichern.
           Bitte aus den folgenden 3 Zeilen die Umbrüche entfernen! -->
      <npsobj modifyvar="set" varname="imgurl">
        <npsobj insertvalue="var" name="urlPrefix" /><npsobj insertvalue="var" name="visiblePath" />
      </npsobj>
      <a href="@imgurl" onclick="OpenWindow(this.href); return false">
        <npsobj insertvalue="image" name="self" width="80" title="@self.title" />
      </a>
    </npsobj>
  </npsobj>

</npsobj>

Die erste – für die Linkliste zuständige – condition-Anweisung hat fast den gleichen Inhalt wie die zweite. Die einzigen Unterschiede sind die ul- und li-Elemente sowie die insertvalue="var"-Anweisung innerhalb des a-Elements. Letztere gibt den Titel des Bildes (als verlinkten Text) aus.

Da der Hauptinhalt der Bildergalerie-Seite sich noch auf die Bildertabelle bezieht, sollten Sie ihn so ändern, dass er auch zur Linkliste passt. Stellen Sie dann noch das Feld ip_galleryAsLinks auf yes um und sehen Sie sich das Resultat Ihrer Arbeit in der Vorschau an: