eMail Marketing und Newsletter Software | BACKCLICK
|
Der Sinn der XML-Import Schnittstelle ist es, bestehende Inhalte mehrfach zu nutzen. Wenn Sie im Besitz eines Content-Management-Systems sind, können Sie XML-Files erstellen bzw. kann das System dies für Sie tun. Wichtig für das System ist die XML-konforme Struktur der Files. Diese spielen Sie in das Verzeichnis ~/XMLImport.
Die importierbaren XML-Files müssen wie das folgende Beispielfile aufgebaut sein:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <FILE> <META NAME="FELDNAME1">Wert1</META> <META NAME="FELDNAME2">Wert2</META> </FILE>
Die erste Zeile ist ein Standard-XML-Header und muss in jedem File, das importiert werden soll, enthalten sein. Als nächster XML-TAG steht der <FILE>-TAG, der zusammen mit dem abschließenden </FILE>-TAG die eigentlich zu importierenden Daten umschließt. Bitte achten Sie auf die Groß-/Kleinschreibung der TAGs, wenn Sie mit XML-TAGs und XML-Files arbeiten.
Die Daten werden in den <META NAME="FELDNAME">WERT1</META>-Blöcken übergeben. Feldname kann ein beliebiger Name einer Variablen sein, auf die Sie später mit Hilfe von GIS_API zugreifen können. Der Feldinhalt wird zwischen den spitzen Klammern übergeben. Achten Sie bitte darauf, dass die Inhalte XML-konform sein müssen. Das heißt, dass die Zeichen <, > und & durch die XML-Entities < > und & ersetzt sein müssen. Diese TAGs sind identisch mit denen, die bei HTML verwendet werden. Die Files, die Sie in das Verzeichnis ~/XMLImport spielen, müssen auch eine bestimmte Namenskonvention erfüllen. Die Namen der Files müssen folgenden Aufbau haben: 123123.xml, hallo.xml etc.,
Mit Hilfe von GIS-API können Sie auf die, über die XML-Schnittstelle eingespielten, Inhalte zugreifen und diese nach bestimmten Regeln automatisch in Ihre Newsletter einarbeiten. Außerdem enthält die Sprache alle Elemente, um Conditionen wie IF ... THEN ... ELSE usw. zu verarbeiten. Dieses Kapitel richtet sich an den Systemadministrator/Programmierer. Wie oben bereits beschrieben, kann dieser den doch recht komplexen Funktionsumfang sehr elegant und einfach anwendbar durch die Funktionalität von GIS-SUBSTITUTION den Redakteuren zur Verfügung stellen. Mehr dazu lesen Sie im Kapitel GIS-SUBSTITUTION. Innerhalb von beliebigen Newslettern können Sie jederzeit GIS_API - Blöcke einfügen. Sämtliche GIS_API-Befehle stehen hierbei zwischen zwei Tags.
<GIS> Hier steht der Code </GIS>
Bitte achten Sie auch hierbei auf die Groß-/Kleinschreibung!
Zwischen dem Start-TAG (<GIS>) und dem End-TAG (</GIS>) stehen die eigentlichen Anweisungen von GIS_API. Diese werden im Folgenden detailliert erklärt. Das generelle Vorgehen besteht darin, bestimmte Feldwerte einzulesen, zu sortieren und zugehörige Daten formatiert auszugeben. Es folgt ein Beispiel, bei dem das Datenbankfeld "UEBERSCHRIFT" eingelesen wird und alle Daten nach Aktualität sortiert ausgegeben werden.
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST FOREACH {PRINT "<<UEBERSCHRIFT>>" } </GIS>
Dies ist ein erstes Beispiel. Im weiteren Verlauf gehen wir davon aus, dass die unten aufgeführten vier XML-Files in BACKCLICK importiert wurden.
File 1:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <FILE> <META NAME="DIRECTORY">/a/b/c</META> <META NAME="FILENAME">ABC.HTML</META> <META NAME="UEBERSCHRIFT">ABC Ueberschrift 1</META> <META NAME="TEXT">ABC_TESTFILE.HTML</META> <META NAME="CONTENT_SOURCE">BACKCLICK</META> <META NAME="CONTENT_ID">1</META> </FILE>
File 2:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <FILE> <META NAME="DIRECTORY">/d/e/f</META> <META NAME="FILENAME">DEF.HTML</META> <META NAME="UEBERSCHRIFT">DEF Ueberschrift 1</META> <META NAME="TEXT">DEF_TESTFILE.HTML</META> <META NAME="CONTENT_SOURCE">BACKCLICK</META> <META NAME="CONTENT_ID">2</META> </FILE>
File 3:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <FILE> <META NAME="DIRECTORY">/g/h/i</META> <META NAME="FILENAME">GHI.HTML</META> <META NAME="UEBERSCHRIFT">GHI Ueberschrift 1</META> <META NAME="TEXT">GHI_TESTFILE.HTML</META> <META NAME="CONTENT_SOURCE">BACKCLICK</META> <META NAME="CONTENT_ID">3</META> </FILE>
File 4:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <FILE> <META NAME="DIRECTORY">/j/k/l</META> <META NAME="FILENAME">JKL.HTML</META> <META NAME="UEBERSCHRIFT">JKL Ueberschrift 1</META> <META NAME="TEXT">JKL_TESTFILE.HTML</META> <META NAME="CONTENT_SOURCE">BACKCLICK</META> <META NAME="CONTENT_ID">4</META> </FILE>
Alle nun folgenden Beispiele werden sich immer wieder auf die Daten aus diesen vier Files beziehen. File 1 ist das älteste File und File 4 ist das jüngste. Um die Resultate selbst nachvollziehen zu können, müssen Sie in BACKCLICK die Files einzeln im Abstand von 2 Minuten ins System überspielen. Das garantiert eine zeitliche Einordnung der Datensätze.Nun müssen Sie in das Menü Newsletter schreiben wechseln und eine beliebigen Verteilerliste auswählen. In das Texteingabefeld geben Sie nun bitte folgendes ein:
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST FOREACH { PRINT "<<UEBERSCHRIFT>>\n" } </GIS>
Bitte rufen Sie nun das Vorschaufenster auf. Sie werden bei aktiviertem personalisieren und individualisieren folgende Ausgabe sehen:
Der READ - Befehl:
Wie im oberen Beispiel deutlich wird, wird der READ-Befehl dafür verwendet, sämtliche Daten des Feldes <<UEBERSCHRIFT>> einzulesen. Die doppelten, spitzen Klammern zeigen GIS_API hierbei an, dass es sich um einen Feldnamen handelt. Dieses Feld wurde über die 4 XML-Files importiert und ist dem System somit verfügbar. Wie mit <<UEBERSCHRIFT>> kann auch mit allen anderen Feldnamen verfahren werden. Wenn zum Beispiel das Feld DIRECTORY eingelesen werden soll, geben Sie einfach
READ <<DIRECTORY>>
ein. Zusätzlich zu den Inhalten des Feldes, welches Sie einlesen lassen, haben Sie mit weiteren Befehlen, die im Folgenden beschrieben werden, auch Zugriff auf sämtliche anderen Felder eines Datensatzes. Wenn mehrere READ-Befehle hintereinander ausgeführt werden, werden sämtliche Ergebnisse in die Trefferliste in der Reihenfolge der READ-Befehle eingefügt.
Der SHRINK - Befehl:
Nun bauen wir unser Beispiel von oben um einen weiteren Befehl aus. Angenommen, Sie möchten nicht alle vier Überschriften ausgeben, sondern nur die ersten beiden, dann haben Sie den Befehl SHRINK zur Verfügung. Dieser reduziert die Ergebnisliste, z. B.:
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST SHRINK "2" FOREACH { PRINT "<<UEBERSCHRIFT>>\n" } </GIS>
Dies hat zur Folge, dass nur die zwei aktuellsten Überschriften ausgegeben werden. Die Ausgabe wäre dann:
JKL Ueberschrift 1
GHI Ueberschrift 1
Durch SHRINK "2" wird die Ergebnisliste auf die ersten zwei Elemente reduziert. Da die Liste nach Aktualität sortiert wurde, besteht die Ausgabe deshalb nur aus den zwei aktuellsten Einträgen, da der Rest der Liste durch den SHRINK-Befehl aus der Ergebnisliste entfernt wird.
Wenn Sie nur den 2. bis 4. Eintrag ausgeben wollen (weil beispielsweise der erste Beitrag gesondert behandelt wird), dann geben Sie folgenden Befehl ein: SHRINK "2" TO "4". Die Ausgabe wäre:
GHI Ueberschrift 1
DEF Ueberschrift 1
ABC Ueberschrift 1
Mit dem Befehl SHRINK BY "FELDNAME" können Sie die Ergebnisliste auf die Einträge reduzieren, die das Feld "FELDNAME" enthalten. Angenommen, File 4 hätte kein TEXT-Feld und Sie würden folgende Befehlssequenz eingeben:
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST SHRINK BY <<TEXT>> FOREACH { PRINT "<<UEBERSCHRIFT>> " } </GIS>
So wäre die Ausgabe:
GHI Ueberschrift 1
DEF Ueberschrift 1
ABC Ueberschrift 1
Jetzt haben Sie nur Datensätze ohne Text-Feld in Ihren Newsletter integriert. Wie Sie sehen können, fehlt File 4, da bei diesem Datensatz das Feld TEXT fehlt. Mit Hilfe des SHRINK-Befehls können Sie noch weitere Einschränkungen realisieren. Mit dem folgenden SHRINK-Befehl ist es möglich, die Trefferliste auf alle Treffer, die ein bestimmtes Feld mit einem Wert innerhalb bestimmter Grenzen haben, zu beschränken.
SHRINK BY <<UEBERSCHRIFT>> IN "A" TO "D"
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST SHRINK BY <<UEBERSCHRIFT>> IN "A" TO "D" FOREACH { PRINT "<<UEBERSCHRIFT>>\n" } </GIS>
Wenn Sie den Befehl wieder in das Beispiel einfügen, wird folgendes ausgegeben:
DEF Ueberschrift 1
ABC Ueberschrift 1
Nach dem READ-Befehl sind in der Trefferliste alle Datensätzen, die das Feld <<UEBERSCHRIFT>> beinhalten, vorhanden. Durch SORT LATEST FIRST wird die Trefferliste nach Aktualität sortiert. Die Zeile mit SHRINK BY <<UEBERSCHRIFT>> IN "A" TO "D" filtert nun alle Datensätze heraus, die nicht mit Buchstaben zwischen "A" und "D" beginnen. Diese Funktion kann dafür verwendet werden, mehrere Abschnitte nach alphabetischer Sortierung zu erstellen. Anstelle des Feldes <<UEBERSCHRIFT>> können Sie natürlich wieder jedes weitere Feld benutzen, um die Trefferliste einzuschränken. An der Reihenfolge der Sortierung ändert dieser SHRINK-Befehl nichts.
Der PRINT-Befehl:
Der PRINT-Befehl ist für die eigentliche Ergebnisausgabe zuständig. Die Befehlszeile
PRINT "<<UEBERSCHRIFT>>"
ist dafür zuständig, dass für jeden Treffer der Wert des Feldes UEBERSCHRIFT im Newsletter angezeigt wird. Um Zeilenumbrüche zu erzwingen, können Sie beliebige Zeilenumbrüche benutzen, z. B.:
PRINT "<<UEBERSCHRIFT>> "
oder
PRINT "<<UEBERSCHRIFT>>\n"
erzwingt nach jeder ausgegebenen UEBERSCHRIFT einen Zeilenumbruch. Sie können anstelle der Anführungszeichen auch geschweifte Klammern verwenden.
PRINT {<<UEBERSCHRIFT>> <<TEXT>> } oder PRINT {<<UEBERSCHRIFT>>\n<<TEXT>>\n}
Das ergibt eine Bildschirmausgabe (wenn Sie diese Befehlszeilen in das Beispiel einfügen), die wie folgt aussieht:
JKL Ueberschrift 1
JKL_TESTFILE.HTML
GHI Ueberschrift 1
GHI_TESTFILE.HTML
DEF Ueberschrift 1
DEF_TESTFILE.HTML
ABC Ueberschrift 1
ABC_TESTFILE.HTML
Der erste Zeilenumbruch hinter <<UEBERSCHRIFT>> bewirkt den Zeilenumbruch zwischen jeder Überschrift und dem Inhalt der <<TEXT>>-Felder. Die zwei Zeilenumbrüche hinter <<TEXT>> sorgen für den Zeilenabstand zwischen den einzelnen Treffern. Alternativ zu einem realen Zeilenumbruch können Sie auch jederzeit die Zeichensequenz \n für einen Zeilenumbruch verwenden.
Der FOREACH - Befehl:
Nachdem eine Trefferliste über den READ-Befehl eingelesen wurde, kann man, nachdem die Liste nach beliebigen Kriterien sortiert (SORT) und gefiltert (SHRINK) wurde, diese Ergebnisliste mittels des FOREACH-Befehls durchgehen und Aktionen (PRINT) mit den jeweiligen Treffern durchführen.
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST SHRINK BY "TEXT" FOREACH {PRINT "<<UEBERSCHRIFT>>\n"} </GIS>
Die FOREACH-Anweisung besteht immer aus dem eigentlichen Befehl FOREACH und den oben fett hervorgehobenen geschweiften Klammern. Die Trefferliste, die mit READ <<UEBERSCHRIFT>> gebildet wurde, wird innerhalb der geschweiften Klammern Eintrag für Eintrag in der entsprechend sortierten Reihenfolge durchgegangen. Alle Anweisungen innerhalb der geschweiften Klammern beziehen sich beim Durchlaufen auf den jeweiligen Eintrag der Trefferliste, das bedeutet, wenn alle Datensätze mit dem Feld <<UEBERSCHRIFT>> eingelesen werden und durch die FOREACH-Schleife gehen, haben Sie Zugriff auf alle Elemente eines Eintrages. So können Sie z. B. zusätzlich zu dem Feld <<UEBERSCHRIFT>> auch gleichzeitig auf alle anderen Datenfelder des jeweiligen Treffers zugreifen. Oben wurde bereits das Beispiel mit den <<TEXT>>-Feldern angeführt. Beim Durchlaufen der Ergebnisliste wird dann nicht nur die Überschrift eines jeden Datensatzes, sondern auch noch das <<TEXT>>-Feld ausgegeben. Sie können generell immer auf ALLE Felder eines Treffers zugreifen. FOREACH-Schleifen können Sie auch beliebig schachteln !!!
Der SORT-Befehl:
Mit Hilfe des SORT-Befehls können Sie Ergebnislisten nach verschiedenen Kriterien sortieren. Oben haben Sie bereits die Befehlszeile
SORT LATEST FIRST
gesehen. Dieser Befehl sorgt für eine Sortierung nach Aktualität. Sie können mit Hilfe des SORT-Befehls nach jedem beliebigen Feld sortieren, z. B.:
SORT BY <<TEXT>>
Dabei wird immer alphabetisch sortiert!
Der VICE VERSA - Befehl:
Um eine Trefferliste in umgekehrte Reihenfolge zu bringen (z. B. um die ältesten Beiträge zuerst oder alles in umgekehrt alphabetischer Reihenfolge auszugeben), benutzen Sie den Befehl VICE VERSA. Wenn wir das Beispiel folgendermaßen abändern:
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST VICE VERSA FOREACH { PRINT "<<UEBERSCHRIFT>>\n"} </GIS>
erhält man folgende Ausgabe:
ABC Ueberschrift 1
DEF Ueberschrift 1
GHI Ueberschrift 1
JKL Ueberschrift 1
Wie Sie sehen können, handelt es sich um das gleiche Ergebnis in umgekehrter Reihenfolge.
Die Befehle COPYLIST & READLIST:
Nachdem Sie eine Trefferliste erzeugt haben, haben Sie die Möglichkeit, mit Hilfe des Befehls COPYLIST eine temporäre Kopie zu erzeugen. Wenn Sie die reguläre Liste mit Hilfe des Befehls CLEAR löschen, können Sie die mit COPYLIST erzeugte Liste wieder mit Hilfe des Befehls READLIST zurücklesen. Das folgende Beispiel verdeutlicht die Funktionalität.
<GIS> READ <<UEBERSCHRIFT>> SORT LATEST FIRST FOREACH {PRINT "<<UEBERSCHRIFT>>\n"} PRINT "\n" COPYLIST CLEAR READ <<TEXT>> SORT LATEST FIRST VICE VERSA FOREACH {PRINT "<<TEXT>>\n"} READLIST PRINT "\n" FOREACH {PRINT "<<UEBERSCHRIFT>>\n"} PRINT "\n" </GIS>
Sie erhalten folgende Ausgabe:
JKL Ueberschrift 1
GHI Ueberschrift 1
DEF Ueberschrift 1
ABC Ueberschrift 1
ABC_TESTFILE.HTML
DEF_TESTFILE.HTML
GHI_TESTFILE.HTML
JKL_TESTFILE.HTML
JKL Ueberschrift 1
GHI Ueberschrift 1
DEF Ueberschrift 1
ABC Ueberschrift 1
Diese Ausgabe wird durch den COPYLIST- und den READLIST-Befehl bewirkt. Nach dem CLEAR-Befehl im Beispiel wird eine andere Liste in einer anderen Sortierreihenfolge eingelesen. Anschließend wird wieder die zuerst eingelesene Trefferliste durch READLIST reaktiviert und deren Inhalt erneut ausgegeben. Sie können auch die Datenfelder erneut über READ einlesen lassen, COPYLIST und READLIST sind jedoch um Größenordnungen schneller! Wenn Sie mehrere Listen parallel abspeichern möchten, so können Sie den Kopien auch Namen geben und anschließend gezielt auf einzelne Listen zugreifen. Angenommen, Sie haben eine Trefferliste eingelesen und möchten sie unter dem Namen "Liste1" abspeichern, so erfolgt dies durch die folgenden Befehlszeilen:
<GIS> READ <<DIRECTORY>> COPYLIST "Liste1" SHRINK "2" FOREACH {PRINT "<<DIRECTORY>>\n"} PRINT "\n\n" READLIST "Liste1" FOREACH {PRINT "<<DIRECTORY>>\n"} </GIS>
Die Ausgabe wäre folgende:
/j/k/l
/g/h/i
/j/k/l
/g/h/i
/d/e/f
/a/b/c
Hier eine Variation:
<GIS> READ <<DIRECTORY>> COPYLIST "Liste1" SHRINK "2" FOREACH {PRINT "<<DIRECTORY>>\n"} PRINT "\n\n" COPYLIST "Liste2" READLIST "Liste1" FOREACH {PRINT "<<DIRECTORY>>\n"} PRINT"\n\n" READLIST "Liste2" FOREACH {PRINT "<<DIRECTORY>>\n"} PRINT"\n\n" </GIS>
Die Ausgabe wäre folgende
/j/k/l
/g/h/i
/j/k/l
/g/h/i
/d/e/f
/a/b/c
/j/k/l
/g/h/i
Die Definition einer Variablen:
Eine Variable muss, um dem System verfügbar zu sein, vorab definiert werden. Dies geschieht durch die folgende Anweisung:
VAR #Name# #Wert#
Wobei #Name# für eine beliebige Zeichenkette, bestehend aus alphanumerischen Zeichen (keine Umlaute, keine Leerzeichen etc.), steht und #Wert# eine Zahl darstellt. Beispiel:
VAR #C1# #0#
Hierbei wird der Variablen C1 der Wert 0 zugewiesen. Beides, Name und Wert, müssen immer in Rauten (#) stehen. Ungültige Variablennamen wären z. B.:
VAR #Hallo Du# #0#
VAR #Hallo#Du# #0#
VAR #Hallo,Du# #0# usw.
GENERELL GILT: SIE KÖNNEN VARIABLEN AN FAST JEDER BELIEBIGEN STELLE ALS PLATZHALTER VERWENDEN !!!
Verändern von VARIABLENwerten:
Um den Wert einer Variable zu erhöhen oder zu verringern, gibt es die beiden Befehle ADDVAR und SUBVAR.
Angenommen, Sie haben durch die folgende Definition die Variable C1 auf den Wert 0 gesetzt.
VAR #C1# #0#
So erhöht die folgende Befehlszeile den Wert von C1 um 5. ADDVAR #C1# #5#
Die Zeile SUBVAR #C1# #3# verringert den Wert von C1 um 3.
Ausgabe von Variablenwerten:
Um den Wert einer Variable auszugeben, gibt es die Befehlssequenz #Name# (wobei #Name# für den Namen der jeweiligen Variable steht). #Name# können Sie in jeder normalen Print-Anweisung verwenden.
Hier ein Beispiel zur Ausgabe von Variablen-Werten:
<GIS> VAR #C1# #0# PRINT "'#C1#' ist der Wert von C1\n" ADDVAR #C1# #2# PRINT "'#C1#' ist der Wert von C1\n" SUBVAR #C1# #1# PRINT "'#C1#' ist der Wert von C1\n" </GIS>
Die Ausgabe wäre folgende:
'0' ist der Wert von C1
'2' ist der Wert von C1
'1' ist der Wert von C1
Spezielle Wertzuweisungen für Variablen:
Mit der Befehlssequenz #C1# LISTLENGTH können Sie der Variablen C1 die aktuelle Länge der Trefferliste zuweisen. Angenommen, Sie haben folgende Zeilen eingegeben:
<GIS> READ <<DIRECTORY>> VAR #C1# LISTLENGTH PRINT "#C1# ist die Länge der Liste\n" </GIS>
Diese Angaben hätten folgende Ausgabe zur Folge:
4 ist die Länge der Liste
Die Länge einer Liste kann für Schleifenkonstrukte nützlich sein. Mit #C1# LISTLENGTH "Listname" können Sie die Länge einer unter dem Namen "Listname" abgespeicherten Liste zuweisen.
IF/ELSE-Anweisungen
Auch bei GIS_API werden Ihnen diese Mechanismen durch IF/ELSE-Konstrukte zur Verfügung gestellt. Die generelle Struktur einer IF/ELSE¬Anweisung sieht wie folgt aus:
IF(BEDINGUNG){ANWEISUNGEN} ELSE{ANWEISUNGEN}
Wenn Sie bereits Programmiererfahrungen haben, wird Ihnen dies sehr vertraut erscheinen.
Der ELSE-Teil ist stets optional und muss nicht explizit angegeben werden!
Der Ablauf richtet sich nach folgendem Schema:
Wenn die Bedingung wahr (TRUE, >=1) ist, werden die Anweisungen im IF-Block ausgeführt, ansonsten im ELSE-Teil (FALSE, <1).
Eine Bedingung (CONDITION) ist eine unäre oder binäre Operation, deren Ergebnis entweder wahr (TRUE, >=1) oder unwahr (FALSE, <1) ist. Eine unäre Operation ist eine Operation mit nur einem Operanden. Eine binäre Operation ist ein Vergleich oder eine beliebige Operation mit zwei Operanden. Innerhalb von Bedingungen können Sie auf beliebige GIS_API -Variablen, auf Datenbank-Feldwerte, EVAL-Blöcke und EXPR-Ausdrücke zurückgreifen, diese beliebig schachteln (Rekursion) und durch Klammerpaare zu komplexeren Bedingungen gruppieren.
Mögliche Operanden: |
Mögliche Operationen: |
<<FELDNAME>> |
AND (b) |
#Wörter# #Buchstaben# |
OR (b) |
#Zahlen# |
NOT (u) |
#VARIABLEN# |
EQUALS (b) |
EXPR-Anweisungen |
LT (less than) (b) |
TRUE |
LE (less equal) (b) |
FALSE |
GT(greater than) (b) |
|
GE(greater equal) (b) |
|
MATCHES (b) |
|
STARTS (b) |
|
ENDS (b) |
Am besten werden diese Sachverhalte anhand folgender Beispiele deutlich:
<GIS> READ <<DIRECTORY>> FOREACH { IF(<<TEXT>>){ PRINT {Der Artikel unter <<DIRECTORY>> enthält den Text \n <<TEXT>>} } ELSE{PRINT "Es gibt keinen Text zu <<DIRECTORY>>" } } </GIS>
<GIS> READ <<FILENAME>> FOREACH { IF(<<DIRECTORY>> OR <<TEXT>>){ PRINT {Das File <<FILENAME>> enthält entweder Daten über das DIRECTORY oder den Text\n"} } ELSE{PRINT "Es gibt keine Daten zu <<FILENAME>>" } } </GIS>
Schachteln von IF/ELSE-Bedingungen:
Wie schon kurz erwähnt, können Sie die Bedingungen mit Hilfe von Klammern beliebig schachteln.
Beispiel:
<GIS> TRUE VAR #C1# #Testing funktioniert# IF( (#ABCDEF# ENDS #DEF#) OR (#123# GT #12#)){ PRINT "TRUE\n" IF(#C1# MATCHES #unktio#){ PRINT "Klappt alles \n\n" } } ELSE{PRINT "FALSE" } </GIS>
Befehls-Übersicht zusätzliche GIS_API-Befehle
Alle kursiven Zeichen sind Namen (Bsp. #Testname#)
SKIP THIS RECIPIENT
Dieser Befehl sorgt dafür, dass der Newsletter nicht an den aktuellen Empfänger verschickt wird. (Dies kann sinnvoll sein, wenn für den Empfänger keine neuen Informationen vorliegen.)
Dieser Befehl gibt das Datum eines Contentdatensatzes aus. Dies wird in dem Format ausgegeben, welches in "FORMAT" definiert wurde. Das Format wird in der Datei gis_cl.conf erläutert. "SPRACHE" gibt an, in welcher Sprache zum Beispiel Monatsnamen ausgegeben werden. Mögliche Werte sind 'de', 'en', 'nl', 'fr'.
"SPRACHE" ist ein optionaler Wert. Wird er nicht angegeben, wird die Sprache angenommen, die als 'DEFAULT-LANG' eingestellt ist.
Auch "FORMAT" ist optional. Wenn dieser Wert weggelassen wird, wird das eingestellte Format aus der Grundkonfiguration beachtet.
IF(SUBSCRIBED){}
Mit diesem Befehl kann man sichergehen, dass ein Abonnent sich nicht im Zeitraum seit dem Versandstart abgemeldet hat.
IF(NOT SUBSCRIBED){}
Der logische Umkehrschluss.
IF(SUBSCRIBED ON MORE THAN 2){}
Mehr als 2 (oder x) abonnierte Newsletter. Als Operator können [ MORE THAN | > | MT ] verwendet werden.
IF(SUBSCRIBED ON MORE EQUALS 2){}
Größer/gleich 2 (oder x) abonnierte Newsletter. Als Operator können [ MORE EQUAL | MORE EQUALS| >= | ME ] verwendet werden.
IF(SUBSCRIBED ON LESS THAN 2){}
Weniger als 2 (oder x) abonnierte Newsletter. Als Operator können [ LESS THAN | < | LT ] verwendet werden.
IF(SUBSCRIBED ON LESS EQUALS 2){}
Weniger/gleich 2 (oder x) abonnierte Newsletter. Als Operator können [ LESS EQUAL | LESS EQUALS| <= | LE ] verwendet werden.
IF(SUBSCRIBED ON 2, 4){}
Wenn ein Abonnent auf exakt den Newslettern 2 und 4 angemeldet ist. Hierbei können beliebige Kombinationen angegeben werden. Generell muss für die Content-Individualisierung in der Verteilerlisten-Verwaltung in der Konfiguration der jeweiligen Newsletter die Option 'Individualisierung' aktiviert werden. Auf die einzelnen Abonnenten-Felder, wie z. B. INTERESSEN, VORNAME etc., wird in GIS-API auch mit Hilfe der $$FELDNAME$$-Notation zugegriffen.
Hier ein paar Beispiele:
IF($$INTERESSEN$$ MATCHES "Sport"){ PRINT"Neues vom Fußball ……\n" } IF($$ANREDE$$ EQUALS "Frau"){ PRINT"Das neue Parfum von XY pour Femme wird Sie ….." }
ACHTUNG: Bitte achten Sie bei bedingten Verzweigungen (IF/ELSE) darauf, Konditionen immer zu gruppieren! Das heißt, dass Sie Gruppen von Operand-Operator-Operand immer in Klammerpaare setzen müssen. Hier ein Beispiel:
IF( ($$VORNAME$$ MATCHES "Peter") AND ($$NAME$$ EQUALS "Test")){}
Die folgenden Befehle werden dazu verwendet, während des Versands eines Newsletters über eine beliebige GIS-API-Logik Daten in das Profil des aktuellen Empfängers zurück zu schreiben. Dieser Mechanismus kann zum Beispiel dazu verwendet werden, im Abonnentenprofil zu speichern, welchen Content er bereits zugeschickt bekam.
INSERT $$FELDNAME$$, "WERT"
INSERT $$FELDNAME$$, #VARIABLENWERT#
Mit diesem Befehl wird ein Wert oder der Wert einer GIS_API-Variable dem Abonnentfeld FELDNAME hinzugefügt. Sollte dieses Feld noch nicht existiert haben, so wird es im Abonnentenprofil automatisch angelegt. Sollten bereits Werte existiert haben, so wird der Wert nur hinzugefügt. Alte Werte werden nicht angetastet.
SET $$FELDNAME$$, "WERT"
SET $$FELDNAME$$, #VARIABLENWERT#
Dieser Befehl funktioniert exakt wie der vorherige, mit dem Unterschied, dass dieser Befehl sämtliche alten Werte von FELDNAME überschreibt. Das Feld FELDNAME enthält am Ende nur den zugewiesenen Wert.
DELETE $$FELDNAME$$, "WERT"
DELETE $$FELDNAME$$, #VARIABLENWERT#
Mit diesem Befehl kann man einen einzelnen Wert aus dem Feld FELDNAME eines Abonnentenprofils löschen. Sämtliche übrigen Werte bleiben erhalten.
REDUCE $$FELDNAME$$, "ZAHL"
REDUCE $$FELDNAME$$, #VARIABLENWERT#
Mit diesem Befehl kann man die Anzahl der Werte des Feldes FELDNAME auf eine bestimmte Anzahl (ZAHL) reduzieren. #VARIABLENWERT# muss hierbei eine Zahl sein! Die übrig gelassenen Werte sind die aktuellsten Werte. Dieser Befehl eignet sich z. B. gut dafür, um ein Feld, dem permanent aktuelle Werte zugeordnet werden, bei einer maximalen Anzahl aktueller Werte zu halten und so die Performance von GIS-API nicht linear zu senken.
Die spezielle Variable #CONTENTKEY# kann beliebig verwendet werden. In ihr steht immer der aktuelle, intern verwendete Schlüssel für einen Content-Datensatz, der in einer FOREACH-Anweisung bearbeitet wird. Diese Variable kann dazu verwendet werden, in das jeweils aktuelle Abonnentenprofil gespeichert zu werden und durch eine bedingte Verzweigung dabei anzuzeigen, ob ein Abonnent den jeweiligen Content schon gelesen hat oder nicht.Das folgende Beispiel hilft dies zu verdeutlichen. Es handelt sich um ein einfaches Beispiel, mit dem verhindert wird, dass ein Abonnent denselben Content mehrfach zugesendet bekommt. Dies ist besonders für vollautomatisch erstellte und versendete Newsletter sehr wichtig.
<GIS> READ <<DIRECTORY>> SORT LATEST FIRST SHRINK 100 VAR #TITEL# ## VAR #COUNTER# #1# FOREACH { IF(#COUNTER# le #10#){ IF( <<TITEL>> EQ ## ){} ELSE{ IF($$PREVCONTENT$$ EQ "#CONTENTKEY#"){ PRINT"Wir möchten Sie nicht mit Dingen belästigen, die Sie schon längst gelesen haben.\nDenn '<<TITEL>>' kennen Sie schon!\n\n" } ELSE{ INSERT $$PREVCONTENT$$, "#CONTENTKEY#" REDUCE $$PREVCONTENT$$, 100 PRINT "#COUNTER#. Diese Artikel haben Sie noch nicht gelesen:\n'<<TITEL>>'\n\n" ADDVAR #COUNTER# #1# } } } } </GIS>