NanoCMS IF-Abfragen
Aus Melin WebHelp
[bearbeiten] 18. If-Abfragen
NEU. Mit CONTAINS lässt sich überprüfen ob in der Emailadresse des Empfängers ein Wort vorkommt. Damit kann man bei internen Mailings bestimmte Elemente im Template aus- oder einblenden,
#IF ("$UD[email]" CONTAINS "hettich")
Emailadresse enthält "hettich"
#ELSE
kein hettich drin
#ENDIF
Im Folgenden werden wir auf IF-Abfragen eingehen. Mit Hilfe von IF-Abfragen werden Bedingungen überprüft.
Je nach Ergebnis der Überprüfung werden Anweisungen ausgeführt, zusätzlich besteht die Möglichkeit, auch bei Nichtzutreffen einer Bedingung Anweisungen ausführen zu lassen. Weiterhin können IFAbfragen auch verschachtelt werden.
Die Überprüfung einer Bedingung liefert eines der folgenden zwei Ergebnisse:
- wahr
- falsch
Liefert sie als Ergebnis wahr zurück, werden die entsprechenden Anweisungen ausgeführt.
Liefert sie als Ergebnis falsch zurück, werden keine oder andere Anweisungen ausgeführt. Bedingungen werden in runde Klammern gesetzt. Melin prüft, ob eine Bedingung erfüllt ist, also wahr zurückliefert. Folgende Syntax prüft, ob die in Klammern gesetzte Bedingung zutrifft:
#IF (Bedingung)
Soll geprüft werden, ob eine Bedingung nicht zutrifft, lautet die Syntax:
#IF NOT (Bedingung)
Innerhalb einer IF-Abfrage können alle Operatoren gemischt verwendet werden, so dass folgende Syntax möglich ist:
#IF ((Bedingung1) OR (Bedingung2)) AND (Bedingung3) Anweisung1 Anweisung2 #ENDIF
Der Operator AND wird bei der Überprüfung der Bedingungen vor dem Operator OR ausgewertet. Wird der Operator NOT verwendet, kehrt sich der Effekt der Operatoren AND und OR um.
[bearbeiten] Stringvergleiche in IF-Abfragen
Beim Vergleich zweier Strings in IF-Abfragen sollten die Variablen immer in Anführungszeichen gesetzt werden. Beispiel:
#IF ("" EQ "das ist der Text") bzw.
#IF ("" EQ "")
[bearbeiten] Schlüsselwörter für IF-Abfragen
Mögliche Schlüsselwörter für IF-Abfragen sind:
#IF (Bedingung)
Mit #IF wird die Bedingung eingeleitet. Die zu überprüfende Bedingung steht in Klammern. Darauf folgen die Anweisungen, die ausgeführt werden sollen, falls die Bedingung zutrifft. Sollen Anweisungen ausgeführt werden, falls eine Bedingung nicht zutrifft, verwenden Sie folgende Syntax:
#IF NOT (Bedingung)
#ELSE
Hinter #ELSE folgen die Anweisungen, die ausgeführt werden sollen, wenn die Bedingung nicht zutrifft.
#ELSIF (Bedingung)
Hinter #ELSIF folgen Bedingungen, die überprüft werden, wenn eine vorher geprüfte #IF-Bedingung nicht erfüllt ist.
#ENDIF
#ENDIF beendet eine IF-Abfrage.
Es stehen boolesche und vergleichende Operatoren zur Verfügung.
[bearbeiten] Boolesche Operatoren
AND
Dieser Operator stellt eine Und-Verknüpfung dar. Damit eine Bedingung mit einer Und-Verknüpfung wahr ist, müssen alle Unterbedingungen wahr sein.
OR
Dieser Operator stellt eine Oder-Verknüpfung dar. Damit eine Bedingung mit einer Oder-Verknüpfung wahr ist, muss mindestens eine der Unterbedingungen wahr sein.
XOR
Dieser Operator stellt eine Entweder-Oder-Verknüpfung dar. Damit eine Bedingung mit einer Entweder- Oder-Verknüpfung wahr ist, müssen eine, aber nicht mehrere Unterbedingungen wahr sein.
NOT
Dieser Operator stellt eine Nicht-Verknüpfung dar. Damit eine Bedingung mit einer Nicht-Verknüpfung wahr ist, muss die hinter dem Operator stehende Bedingung falsch sein. Beispiel:
#IF NOT ("foo" EQ "bar")
Durch den Operator wird geprüft, ob die Bedingung im inneren Klammernpaar nicht wahr ist. Da foo nicht gleich bar ist, ist die Bedingung im äußeren Klammernpaar wahr.
[bearbeiten] Vergleichs-Operatoren
Mögliche vergleichende Operatoren sind:
EQ
Dieser Operator prüft, ob zwei Werte gleich sind. Der Code "foo" EQ "foo" ist wahr, "foo" EQ "bar" ist falsch.
NOT EQ (alias NE)
Dieser Operator prüft, ob zwei Werte ungleich sind. Der Code "foo" NOT EQ "bar" ist wahr, "foo" NOT EQ "foo" ist falsch.
CEQ
Dieser Operator prüft, ob zwei Strings, unabhängig von Groß- oder Kleinschreibung, gleich sind. Der Code "foo" CEQ "FoO" ist wahr, aber "foo" EQ "FoO" ist falsch.
NOT CEQ (alias CNE)
Dieser Operator prüft, ob zwei Strings, unabhängig von der Groß- und Kleinschreibung, ungleich sind. Der Code "foo" NOT CEQ "bar" ist wahr, aber "foo" NOT CEQ "FoO" ist falsch.
LT (oder <)
Dieser Operator prüft, ob ein Wert kleiner als ein zweiter Wert ist. Es wird ein alphanumerischer Vergleich vorgenommen, d. h. beim Vergleich zweier Strings wird der String als größer definiert, dessen Buchstaben im Alphabet später erscheinen.
LE (oder <=)
Dieser Operator prüft, ob ein Wert kleiner oder gleich einem zweiten Wert ist.
GT (oder >)
Dieser Operator prüft, ob ein Wert größer als ein zweiter Wert ist.
GE (oder >=)
Dieser Operator prüft, ob ein Wert größer oder gleich einem zweiten Wert ist.
[bearbeiten] Einfache IF-Abfrage
Eine einfache IF-Abfrage überprüft, ob der User ein bestimmtes Textfeld gefüllt hat. Trifft die Bedingung zu, wird zum Beispiel ein Bild angezeigt. Der Code für eine solche IF-Abfrage sieht wie folgt aus:
<input name="MELIN:textfeld1" type="text" size="5" maxlength="50">
#IF ("" EQ "hallo")
<img src="/images/grafik1.gif" width="40" height="20" border="0">
#ENDIF
Die erste Zeile erzeugt das Textfeld, das der User ausfüllen soll. Wird etwas in das Textfeld eingetragen, wird der Text in dem entsprechenden Metafeld gespeichert.
Die zweite Zeile enthält die IF-Abfrage. Hier wird überprüft, ob das Metafeld leer ist. Ist es nicht leer, trifft die Bedingung zu und die darauf folgende Anweisung wird ausgeführt. In unserem Beispiel wird das Bild angezeigt.
Die letzte Zeile schließt die IF-Abfrage ab.
[bearbeiten] IF-Abfrage mit ELSE
Eine IF-Abfrage mit ELSE dient dazu, Anweisungen auch dann ausführen zu lassen, wenn die abgefragte Bedingung nicht zutrifft. Eine mögliche Abfrage wäre:
„Wird ein Textfeld ausfüllt, zeige den eingegebenen Text an, wird das Textfeld nicht ausgefüllt, zeige ein Bild.“
Umgesetzt in Code sähe dieser Satz wie folgt aus:
<input name="MELIN:textfeld1" type="text" size="5" maxlength="50">
#IF ("" EQ "")
<img src="/images/grafik1.gif" border="0">
#ELSE
#ENDIF
Mit der ersten Zeile wird ein Eingabefeld mit dem Namen textfeld erzeugt. Die zweite Zeile beinhaltet die IF-Abfrage. Hier wird geprüft, ob das Textfeld gefüllt ist. Trifft dies zu, wird der eingegebene Text angezeigt.
Ist das Textfeld nicht gefüllt, wird die Anweisung im ELSE-Block ausgeführt und ein Bild angezeigt.
Die letzte Zeile schließt die IF-Abfrage.
Alternativ kann die IF-Abfrage auch folgendermaßen formuliert werden:
#IF NOT ("")
<img src="/images/grafik1.gif" width="40" height="20" border="0">
#ELSE
#ENDIF
Hier wird geprüft, ob das Textfeld nicht gefüllt ist. Trifft dies zu, wird das Bild angezeigt. Im anderen Fall wird der eingegebene Text angezeigt.
[bearbeiten] Und-Verknüpfung
Eine Und-Verknüpfung besteht aus mindestens zwei Bedingungen und trifft nur dann zu, wenn beide bzw. alle Bedingungen erfüllt sind. Die Syntax einer Und-Verknüpfung ist wie folgt:
#IF ((Bedingung1) AND (Bedingung2)) Anweisung1 Anweisung2 #ENDIF
In diesem Fall werden die Anweisungen nur dann ausgeführt, wenn Bedingung1 und Bedingung2 zutreffen.
[bearbeiten] Oder-Verknüpfung
Eine Oder-Verknüpfung besteht ebenfalls aus mindestens zwei Bedingungen und trifft nur dann zu, wenn mindestens eine Bedingung bzw. alle Bedingungen erfüllt sind. Die Syntax einer Oder-Bedingung ist wie folgt:
#IF ((Bedingung1) OR (Bedingung2)) Anweisung1 Anweisung2 #ENDIF
[bearbeiten] Verschachtelte IF-Abfragen
Verschachtelte IF-Abfragen überprüfen Bedingungen in Abhängigkeit von anderen Bedingungen. Verschachtelungen können beliebig tief erfolgen. Beachten Sie jedoch: je tiefer IF-Abfragen verschachtelt sind, desto langsamer werden sie abgearbeitet. Da tief verschachtelte IF-Abfragen sehr unübersichtlich werden und schwer zu pflegen sind, ist es möglich, innerhalb von IF-Abfragen Zeilen oder Bedingungen mit Hilfe von HTML-Kommentaren zu versehen.
Im folgenden ein Beispiel, wie die Überprüfung einer Bedingung in Abhängigkeit von einer anderen Bedingung gestartet wird:
Beispiel: Komplettes Test-Szenario für IF-Abfragen
#IF (("" EQ "EDIT") OR ("" EQ "NEW"))
Hinweise zum Bearbeiten.
#IF(("" EQ "YY"))
Der Wert YY ist gesetzt.
#IF(("" EQ "XX"))
Doppel-X
#ELSE
Kein Doppel-X
#ENDIF
antras
#ENDIF
Ende der Bearbeitungsoptionen
#ELSE
Das ist der Livebetrieb
#ENDIF
Die erste Zeile der IF-Abfrage überprüft in welchem Modus das Template aufgerufen wird.
Wenn der Modus gleich "EDIT" (Bearbeiten einer existierenden Seite) oder "NEW" (der erste Aufruf des Templates) ist wird die IF-Abfrage durchlaufen, ansonsten wird der komplette Block übersprungen und der ELSE-Zweig ausgeführt: im Template erscheint "Das ist der Livebetrieb" wenn es abgespeichert wird oder der Preview aufgerufen wird.
Zur Bestätigung wird der Text "Hinweise zum Bearbeiten" ausgegeben.
Die nächste Abfrage prüft ob der Inhalt der Variablen AA gleich dem String YY ist. Wenn dem so ist wird "Der Wert YY ist gesetzt" ausgegeben und mit der nächsten IF-Abfrage fortgefahren. Wenn nicht wird gleich zum Ende dieser Bedingung gesprungen und nur noch "Ende der Bearbeitungsoptionen" ausgegeben.
Nach der Ausgabe von "Der Wert YY ist gesetzt" wird noch geprüft ob die Variable BB den Wert XX hat. Wenn dies Zutrifft wird "Doppel-X" ausgegeben, ansonsten "Kein Doppel-X".
[bearbeiten] Hinweise beim Bearbeiten
Bei komplexen Themen fühlen sich die Endanwender oft von der Funktionsvielfalt etwas herausgefordert. Daher ist es hilfreich beim Anzeigen eines Templates im EDIT-Modus an geeigneten Stellen Hinweise einzubauen die in der fertigen Seite nicht zu sehen sind. Hierzu bietet sich die IF-Abfrage
#IF (("" EQ "EDIT") OR ("" EQ "NEW"))
Hinweis: hier folgendes beachten
#ENDIF
an die einen Hinweistext nur beim Bearbeiten einer Seite darstellt.
Der Tag kann folgende Werte annehmen
NEW Ein Template wird verwendet um ein neues Dokument anzulegen. Es wurden noch keine Inhalte eingeben.
EDIT Das Template wird verwendet um vorhandene Daten zu bearbeiten.
PREVIEW Das template wird verwendet um dem User eine Vorschau auf die fertige Seite darzustellen (meist identisch mit SAVE)
SAVE Der User hat das bearbeiten des Dokuments beendet und die Seite wird gespeichert.
[bearbeiten] Praxisbeispiel Email-Adresse
Mit Hilfe der IF-Abfragen lassen sich elegante Lösungen schaffen. Hier ein Beispiel um eine Emailadresse in einem Eingabefeld zu erfassen und in der späteren Seite nur einen Link darzustellen:
E-Mail:
#IF (("" EQ "EDIT") OR ("" EQ "NEW"))
<INPUT NAME="MELIN:email" value="ihre-email@hier.de" SIZE=15>
#ELSE
<a href="mailto:">E-Mail</a>
#ENDIF
[bearbeiten] 19. Website Navigation
Das NanoCMS bietet die Möglichkeit dynamisch einen Navigationsbaum in der Seite darzustellen. Der Navigationsbaum basiert auf den Einstellungen im Kategoriebaum. Zum Beispiel kann die Kategorieliste
automatisch im Template umgebaut werden zu
der Template-Code sieht wie folgt aus:
Beispiel für eine Navigationsausgabe
#FOREACH NAVIGATION ENTRY
#IF ("%NAV_LEVEL%" == "1")
<a href="%NAV_LINK%>">%NAV_TEXT%</a>
#ELSIF ("%NAV_LEVEL%" == "2")
<a href="%NAV_LINK%>">%NAV_TEXT%</a>
#ELSE
<a href="%NAV_LINK%>">%NAV_TEXT%</a>
#ENDIF
#ENDFOR
Insgesamt stehen folgende Variablen zur Verfügung (alle aus der structure.xml):
| NAV_LEVEL | Tiefe der Navigation |
| NAV_ID | ID des Eintrags |
| NAV_TEXT | Beschreibungstext |
| NAV_LINK | Verzeichnis |
| NAV_SELECTED | "1" wenn die aktuell erzeugte Seite in diesem Navigationspunkt angelegt wird. |
Die Ausgabe der Navigation wird immer mit dem Kommando
#ENDFOR
eingeleitet und mit
#FOREACH NAVIGATION ENTRY
beendet.
Die Schleife wird der ID nach durchlaufen. Dazwischen stehen ´die genannten Variablen zur Verfügung.
[bearbeiten] 20. Image Generator
Das NanoCMS bietet die Möglichkeit dynamisch Grafiken und Text zu kombinieren. Der Generatortag kann an beliebiger Stelle im Template eingefügt werden und hat folgende Syntax:
BEISPIEL: ImageGenerator Tag
<MELIN action="genimage" name="myimage"
background="/melin/examples/images/background.jpg"
text="Hello World" color="FFFFFF"
font="Cantina" size="96" left="100" bottom="110" />
Beispielausgabe:
Die Bedeutung der Felder im einzelnen:
| action=genimage | Gibt an dass ein Bild generiert werden soll. |
| name | ein beliebiger, eindeutiger Bezeichner
(keine leerzeichen, keine Sonderzeichen). |
| background | Das Bild das als Hintergrundgrafik verwendet werden soll. |
| text | Der einzusetzende Text. kann auch ein Variablenfeld in der Seite sein, z.B. |
| color | Die zu verwendende Schriftfarbe (im Moment wird nur schwarz/000000 und weiß/FFFFFF unterstützt) |
| font | Die zu verwendende Schriftart. Eine Liste der verfügbaren Schriftarten erhält man mit (s. nächste Seite) |
| size | Schriftgröße |
| left | Pixelposition von links an der die Schrift beginnen soll |
| bottom | Fußzeile der Schrift in Pixeln bezogen auf die linke obere Ecke |
Als Ergebnis wird eine Grafik generiert und im Verzeichnis DOCUMENT-ROOT/melin/images/cms/generator abgelegt.
Der Text wird zugleich als ALT-Tag im HTML-Code verwendet (Barrierefreiheit).
Die Größe der Ausgabegrafik entspricht immer der Hintergrundgrafik.
Installierte Fonts ausgeben
Die zur Verfügung stehenden Fonts sind Systemabhängig und werden je nach verwendetem Betriebssystem unterschiedlich installiert.
Eine Liste der zur Verfügung stehenden Schriften kann man sich mit dem Hilfstag
<!--LIST_SYSTEMFONTS-->
ausgeben lassen. Man plaziert diesen an einer beliebigen Stelle im Template und erhält im Edit-Modus eine Liste der verfügbaren Schriften.
Beispielausgabe:
<!--LIST_SYSTEMFONTS--> Cantina CapitalsRegular CenturyGothic CenturyGothic-Bold CenturyGothic-BoldItalic CenturyGothic-Italic Chalkboard
[bearbeiten] 21. Abspeichern
Klickt der Anwender auf Abspeichern wird das Dokument auf dem Schreibtisch des Anwenders abgelegt. Als Beschreibungstext wird das Feld TITLE verwendet (sofern vorhanden).
Technisch betrachtet werden zwei Dateien angelegt
- Eine XML-Datei mit allen Formularwerten und den Feldern directory, template, filename die sich aus der gewählten Kategorie ergeben.
- Eine fertige HTML-Seite (wie die Vorschau)
Die Dateien werden im Verzeichnis SITE-DIR/cms/data/[USER_ID]/content abgelegt (Hosting Version) bezw. im Verzeichnis SITE-DIR/cms/data/1/content (Standalone).
[bearbeiten] 22. Kontrollieren der Exportregeln
Auf dem Schreibtisch haben Sie den Button „Veröffentlichen“ gesehen. Für den Benutzer ist die Funktion sehr einfach gehalten, jedoch laufen im Hintergrund in diesem Moment eine Vielzahl von Prozessen ab und das Dokument kann in die unterschiedlichsten Ziele veröffentlicht werden.
Die Exportregeln werden im Menü „Voreinstellungen“ / „Exportregeln“ definiert. Das Standardziel für Veröffentlichungen ist ein Export der Inhalte in einer XML-Datei die anschließend vom Workflow verarbeitet werden kann:
Jedesmal wenn ein Dokument auf dem Schreibtisch veröffentlicht wird geht Melin diese Liste der Exportregeln durch und wendet diese an sofern diese Regel zutrifft.
Dokumente aus dem NanoCMS können in verschiedene Zielsysteme und -Formate publiziert werden:
- Workflow
- XML
- XML
- SQL
Ein Dokument kann in beliebig viele unterschiedliche Ziele gleichzeitig publiziert werden. Für ein Mailing bietet sich zum Beispiel ein Export in den Melin-Workflow an, damit die Inhalte dort gleich weiter verarbeitet werden können. Zur Einrichtung einer MicroSite mit einem Newsletter-Archiv können die Texte zusätzlich als HTML-Seiten per FTP auf einen weiteren Server kopiert werden.
Komplexere Freischaltregeln
Ob eine Regel ausgeführt wird hängt vom TRIGGER-Feld ab das beim Anlegen einer Regel mit definiert werden kann:
Lässt man dieses Feld leer, wird die Regel immer ausgeführt. Man kann dort jedoch auch ein beliebiges Eingabefeld verwenden oder eine Systemvariable. Die am meisten verwendete Variable ist„TEMPLATE“: in dieser Variable legt Melin das zur Erfassung der Inhalte verwendete Eingabetemplate ab inklusive dem Pfad dahin. Durch den Trigger
TEMPLATE /cms/themes/default
wird die Freischaltregel für alle Dokumente ausgeführt die mit dem Theme „default“ erzeugt wurden.
Eine andere sehr häufig verwendeter Trigger-Variante ist im Eingabe-Template ein verstecktes Feld (HIDDEN Input-Field) zu definieren und den Wert dieses Schlüsselfeldes als Trigger-Wert zu verwenden. Bitte verwenden Sie Großbuchstaben für Trigger-Schlüssel.