Die hier beschriebenen Features sind bis Version 6.9.1 ein optionaler Bestandteil des Rails Connectors. Wenn Sie diese Features mit einem aktuellen Rails Connector weiter nutzen möchten, finden Sie den betreffenden Quelltext in einem Git-Repository.
Liquid ist eine in Ruby implementierte Template-Sprache mit Fokus auf Sicherheit und Robustheit. Liquid-Templates sind einfacher zu entwickeln als ERB-Templates. Daher können Templates mit Liquid häufig schneller und mit geringerer Fehlergefahr umgesetzt werden. Um fehlende kundenspezifische Felder und nil-Werte braucht man sich als Template-Autor nicht zu kümmern. Liquid stellt hier (im Gegensatz zu ERB) graceful degradation sicher.
Grundlegende Informationen über die Verwendung von Liquid stehen beispielsweise auf http://wiki.shopify.com/UsingLiquid zur Verfügung.
Der Rails Connector erweitert die Grundsyntax von Liquid um spezielle Sprachkonstrukte, mit denen CMS-Inhalte angezeigt werden können. Diese werden im Folgenden beschrieben.
Dieses Liquid-Template gibt den Titel und Hauptinhalt der aktuellen Seite (repräsentiert durch obj
) aus und ruft dann ein weiteres Template auf:
<h1>{{ obj.title }}</h1> {{ obj.body }} {% template 'toclist' %}
Das CMS-Objekt obj
ist in einem Drop gekapselt, das die Zugriffe auf die Methoden und Felder des Objekts regelt. Der Drop wandelt Text automatisch in dessen HTML-Darstellung um, löst Links auf und fügt Bearbeitungselemente ein.
Das folgende Template gibt eine Liste der Unterordner und -Dokumente ( toclist
) aus, falls das betreffende CMS-Objekt ein Ordner ist. Jedes Element erscheint mit einem Vorschaubild und dem verlinkten Titel.
<ul> {% for object in obj.toclist %} <li>{{ object.thumbnail | image_tag }} {{ object.title | link_to: object }}</li> {% endfor %} </ul>
Die Vorschaubilder werden in diesem Beispiel über das einelementige Linklistenfeld thumbnail
eingebunden, aus der der Filter image_tag
ein im Browser darstellbares Bild erzeugt. Mit Hilfe des link_to
-Filters wird ein HTML-Link erzeugt, über den man im Browser zum Zielobjekt gelangen kann.
Linklisten mit mehreren Elementen können in Liquid ebenfalls verwendet werden:
<ul> {% for link in obj.related_links %} <li>{{ link | link_to }}</li> {% endfor %} </ul>
Enthält ein Link einen ausgefüllten Titel, verwendet der Filter link_to
diesen als Linktext. Andernfalls setzt er bei internen Links den Titel der referenzierten Datei ein und bei externen Links die URL.
Auf einzelne Links aus einer Linkliste kann auch über den Index des Links zugegriffen werden:
{{ "Ein Ersatz-Linktext" | link_to: obj.related_links[2] }}
Der Standard-Linktext wird in diesem Beispiel durch einen benutzerdefinierten Text ersetzt.
Wird die Rails-Applikation als Vorschauansicht in das GUI des CMS eingebunden, so gibt es die Möglichkeit, Bearbeitungselemente für die dargestellten CMS-Inhalte zu integrieren. Bei der Verwendung von Liquid-Templates können die Bearbeitungselemente entweder automatisch oder manuell gesetzt werden.
Voreingestellt werden die Bearbeitungselemente automatisch gesetzt. Gibt man beispielsweise den Titel eines CMS-Objekts aus, so erscheint in der Vorschau automatisch ein Bearbeitungselement:
{{ obj.title }}
Um im Einzelfall kein Bearbeitungselement auszugeben, kann der Filter editmarker
verwendet werden:
{{ obj.title | editmarker: false }}
Um die automatische Ausgabe von Bearbeitungselementen für alle Liquid-Templates einer Rails-Anwendung global zu deaktivieren, wird folgende Zeile in die Konfiguration aufgenommen:
RailsConnector::Configuration.auto_liquid_editmarkers = false
Die folgende Liquid-Anweisung führt dann nicht mehr dazu, dass ein Bearbeitungselement erzeugt wird:
{{ obj.title }}
Der Autor eines Templates kann jedoch manuell mit folgender Syntax Bearbeitungselemente erzeugen:
{{ obj.title | editmarker }}
Mit dem Filter url
kann man sich die URL geben lassen, unter der ein CMS-Objekt erreichbar ist:
external:{{ object | url }}
Dies ist beispielsweise dann nützlich, wenn ein CMS-Objekt als Flash-Content oder als Java Applet in eine HTML-Seite eingebunden werden soll.
{% if obj.mein_feld != blank %} Mein Feld enthält den Wert {{ obj.mein_feld }}. {% else %} Mein Feld enthält keinen Wert. {% endif %}
Im obigen Code wird der else
-Zweig in den folgenden Fällen ausgewertet:
obj.mein_feld
enthält einen leeren Stringobj.mein_feld == nil
obj
hat gar kein Feld mein_feld
Daher ist der Test obj.mein_feld != blank
der beste Weg, um vor leeren Feldwerten zu schützen. Mit einer ähnlichen Syntax lässt sich explizit testen, ob ein String leer oder der Feldwert nil
ist:
{% if obj.mein_feld == empty %} Mein Feld enthält einen leeren String. {% endif %} {% if !obj.mein_feld %} Mein Feld ist nicht vorhanden (== nil). {% endif %}
Zeit- und Datumswerte können mit Hilfe des date
-Filters ausgegeben werden:
{{ obj.ip_eventStart | date: "%d.%m.%Y" }}
Der folgende Template-Code holt das CMS-Objekt, das durch den benannten Link my_name
referenziert wird und gibt dessen Titel aus:
{{ named_object["my_name"].title }}
Benannte Links können im CMS als Links in der Linkliste relatedLinks
einer CMS-Datei mit der Vorlage NamedLink
gespeichert werden. Das Ziel eines Links in der Linkliste kann im Rails Connector über den Linktitel referenziert werden.
In der integrierten Vorschau können Menübefehle und registrierte Assistenten per Action-Marker verfügbar gemacht werden. Der Template-Code, mit dem sich beispielsweise ein Bildbearbeitungsassistent einbinden lässt, könnte so aussehen:
{% actionmarker obj.some_image editImageWizard %} [Bild bearbeiten] {% endactionmarker %}