Impressum | Kontakt | Jobs
Aufdringliche Selbstdarstellung seit 1996
Homepage
von
Alexander
Auer

COLD FUSION (TEIL II)

Nach dem ersten Teil, der sich mit dem Grundsyntax und allgemeineren Informationen zu Cold Fusion befasst hat, gehen wir mit dem 2. Teil in die Praxis. Die wichtigsten und nützlichsten Funktionen und Befehle, sowie Datenbankinteraktion sollen den Einstieg in die Arbeit mit Cold Fusion erleichtern.

Um mit einer neuen Programmiersprache effektiv zu arbeiten, sollte man sich von Anfang an mit den am häufigsten verwendeten Befehlen bzw. Funktionen vertraut machen. Ist dieser Einstieg geschafft, kann man in den Hilfe-Dateien nach weiteren nützlichen Tags stöbern.

Grundlegende Befehle
Wie wir schon im ersten Teil der Serie gesehen haben, werden Cold Fusion Befehle direkt in den HTML-Code geschrieben. Sie werden ebenfalls wie HTML in spitzen Klammern geschrieben und sind daran erkennbar, daß sie mit dem typischen vorangestellten 'cf' beginnen.
Cold Fusion Code kann prinzipiell mit jedem beliebigen Textverarbeitungsprogramm oder HTML-Editor erstellt werden, es empfiehlt sich jedoch Allaires Cold Fusion Studio, schon wegen der farbigen Tag-Kennzeichnung.
Wichtig ist noch zu erwähnen, daß Cold Fusion mit einer Fehlermeldung aufwartet, wenn die logische Struktur des Dokuments fehlerhaft ist (z.B. <CFIF> nicht geschlossen). Anders als HTML, das fehlerhafte oder unbekannte Befehle einfach ignoriert, wird das Dokument in Cold Fusion gar nicht erst aufgebaut.

Die wichtigsten Befehle im Überblick:
<CFSET>: Wird benötigt um Variablen zu definieren. Bsp. <CFSET X='0'> oder <CFSET X=#Var1#> (letzteres stellt eine dynamische Zuweisung eines Wertes da, der z.B. aus einer Datenbankabfrage kommt) <CFOUTPUT>: Dient zur Bildschirmausgabe von Variablen. Muss mit </CFOUTPUT> geschlossen werden, um die logische Integrität des Dokuments zu gewährleisten. Bsp.:
<CFOUTPUT>#VARIABLE 1#</CFOUTPUT>, gibt den Wert der Variable 1 aus. Auch Datenbankabfragen können mittels <CFOUTPUT QUERY="name der query"> Zeilen für Zeile ausgegeben werden. <CFOUTPUT> Befehle dürfen nicht ineinander verschachtelt werden.
<CFINCLUDE TEMPLATE="template_name">: Mittels CFINCLUDE kann der Inhalt von Dateien in das aktuelle Dokument eingebunden werden. Dabei sollte der logische Pfad zum Dokument angeben werden. Bsp.: <CFINCLUDE TEMPLATE="/bin/script/header.cmf">
<CFABORT>: Stößt Cold Fusion bei der Bearbeitung einer Datei auf CFABORT, so bricht es an dieser Stelle die weitere Bearbeitung ab. Sehr nützlich v.a. bei der Fehlersuche, da man genau verfolgen kann, bis zu welcher Stelle im Dokument der Code korrekt bearbeitet wird.
<CFLOCATION URL="url">: Automatische Weiterleitung an eine andere Adresse . Bsp: <CFLOCATION URL="http://www.privatseite.com">
<CFIF><CFELSEIF><CFELSE>: Bedingung die zu erfüllen ist. Muss mit </CFIF> geschlossen werden, sonst kommt es zu einer Fehlermeldung. Bsp.:
<CFIF VAR1 is "0">
Variable 1 ist 0!
<CFELSEIF VAR1 is "1">
Variable 1 = 1!
<CFELSE>
Variable 1 ist weder 1 noch 0!
</CFIF>
Wichtig: Wie man an diesem Beispiel sehen kann, braucht Cold Fusion bei Vergleichen ein 'is' statt einem '='! Nur bei zuweisungen wird '=' verwendet.
<CFLOOP index="i" start=1 stop=5>: Wiederholt die Anweisung zwischen <LOOP> und </LOOP> (ähnlich einer For-Schleife). Die Index-Variable kann direkt im Loop angesprochen werden und z.B. als Zähler verwendet werden.
Ebenfalls möglich ist eine Loop-Schleife, die an eine Kondition gebunden ist (while-Schleife): <CFLOOP condition="#Var1# < 10"> oder eine Loop-Funktion über eine Datenbankabfrage. Dabei können optional Start- und Endwert der Abfrage festgelegt werden. Bsp.: <CFLOOP QUERY="query_name" STARTROW="row_num" ENDROW="row_num">

Für einen kompletten Überblick, über alle verfügbaren Cold Fusion-Tags, bietet Allaire eine hervorragende Hilfe-Funktion, die bereits im Umfang von Cold Fusion Studio inkludiert ist.

Funktionen
Nach einem kurzen Überblick über die wichtigsten Befehle wenden wir uns jetzt den Funktionen zu.
Allgemein ist zu sagen, daß Funktionen, so wie Variablen, in Raute-Zeichen eingebettet werden. Bsp.: #Trim(Var1)# Sind die Raute-Zeichen einmal gesetzt, darf die Variable, auf die sich die Funktion bezieht, nicht nochmals eingebettet sein.
IsDefined("variable_name"): Mit dieser Funktion lässt sich feststellen, ob eine Variable gesetzt ist oder nicht. Sehr nützlich, um fehlende Eingabewerte abzufangen.
Zur Manipulation von Zeichenketten, stellt Cold Fusion ähnliche Funktionen wie die meisten anderen Programmiersprachen zur Verfügung:
Trim(string): Entfernt etwaige Leerzeichen links und rechts von der Zeichenkette. Auch getrennt möglich mittels Ltrim und Rtrim.
Replace(string, substring1, substring2): Liefert als Ergebnis die Variable 'String', wobei alle auftretenden 'substring1' durch 'substring2' ersetzt werden. Optionale Parameter sind 'one', wenn nur das erste Auftreten ersetzt werden soll, oder 'all'.
Len(string): Anzahl der Zeichen in der Zeichenkette. Round(number): Rundung auf die nächste Ganzzahl.
URLEncodedFormat(string): Wandelt Sonderzeichen in 'String' so um, daß die Variable als URL verwendet werden kann.

Häufig muss man beim Programmieren mit Zeitwerten hantieren. V.a. Zeitvergleiche stellen oft eine Hürde in der Umsetzung dar. Cold Fusion hingegen stellt relativ einfache Möglichkeiten zur Verfügung, um mit vorhandenen Funktionen diese Problemstellungen zu lösen.
Der erste Schritt ist die Erstellung der Variablen und deren Befüllung mit Zeitwerten:
<cfset Datum1=# CreateDateTime(year, month, day, hour, minute, second)#>
<cfset Datum2=#now()#>
<cfset Ergebnis= #DateCompare(Datum1, Datum2)#>

Die Werte in CreateDateTime können entweder fix sein, oder als Variablen, z.B. aus einer Datenbankabfrage stammen. Mittels DateCompare werden die beiden Daten miteinander verglichen.
Ist Wert 1 (Datum1) größer als Wert 2 (Datum2) bekommt man das Ergebnis '1' als Rückgabe, ist Wert 1 kleiner als Wert2 '-1'. Sind beide Daten gleich, so ist das Ergebnis '0'. Mit Zusatzattribute lässt sich die Genauigkeit des Vergleichs steuern (Default: auf die Sekunde genauer Vergleich).
Ebenfalls wichtig ist das richtige Formatieren von Zeitwerten. Hierfür stellt Cold Fusion die Funktion DateFormat bereit. Ein Beispiel, um die Ausgabe des aktuellen Datums im Format Tag.Monat, Jahr darzustellen:
<cfset HEUTE=#DateFormat(now(), ' dd.mm, yyyy')#>

Auch für das Arbeiten mit Arrays bietet Cold Fusion einige Sonderfunktionen.
Zuerst muss ein Array mittels 'ArrayNew(dimension)' initialisiert werden, wobei 'Dimension' eine Ausprägung zwischen 1 und 3 haben darf. Daten werden anschließend mittels <CFSET NameDesArrays[1][1][1] = Wert> importiert, wobei die Position innerhalb des Arrays natürlich auch dynamisch generiert werden kann. Die Werte können innerhalb des Arrays sortiert werden ('ArraySort(array, sort_type)', wobei sort type 'numeric', 'text' oder 'textnocase' sein kann. Als Zusatzparameter stehen asc (aufsteigend) oder desc (absteigend)) zur Verfügung. Auch Summen (ArraySum(array)) oder Durchschnittswerte (ArrayAvg(array)) können gebildet werden.
Besonders nützlich kann es sein, gegebene Listen in ein Array zu konvertieren. dafür verwendet man ListToArray(list [, delimiter ]), mit 'delimiter' als vorgegebenes Trennzeichen. Umgekehrt ist auch ArrayToList(array) möglich.

Datenbankabfragen
Datenbankabfragen und -aktionen geschehen in Cold Fusion über den <cfquery> - Befehl. Jeder Query muss ein Name gegeben werden, damit auf sie referenziert werden kann.
Außerdem muß die Datasource, in der die Query stattfinden soll, spezifiziert sein. Festgelegt werden Datasources und dazugehörige Usernamen bzw. Passwörter im Managing-Modul von Cold Fusion.
Die Grundstruktur einer Abfrage sieht folgendermaßen aus:
<CFQUERY NAME="query_name" DATASOURCE="ds_name">
SQL statements
</CFQUERY>

Das Ergebnis der wird in einem Array gespeichert. Um es am Bildschirm anzuzeigen, greift man auf <cfoutput> zurück.
Damit Cold Fusion weiß, daß es sich um das Ergebnis der Abfrage handelt bekommt der Output-Befehl als zusätzlichen Parameter den Namen der Abfrage.
Bsp.:
<CFQUERY NAME="TESTABFRAGE" DATASOURCE="TESTDATENBANK">
select test_id, test_date from testtabelle
</CFQUERY>
<cfoutput name="TESTABFRAGE">
TestID=#test_id#, Testdate=#test_date#<br><br>
</CFOUTPUT>

Hiermit veranlassen wir die Ausgabe aller gefundenen Einträge aus 'Testtabelle'. <cfoutput> wird so oft durchgeführt, bis alle Resultatwerte ausgegeben wurden. Diese Variante empfiehlt sich, wenn mehrere Variablen ausgegeben werden sollen, da man sich Tipparbeit erspart.
Eine andere Möglichkeit, auf Abfrage-Resultate zuzugreifen:
<cfoutput>#TESTABFRAGE.test_id'</cfoutput>.
Hierbei wird der Query-Namen direkt vor den Variablennamen geschrieben.
Zusätzliche Parameter in <cfquery> helfen, die Abfrage zu kontrollieren:
DBTYPE: Definiert welcher Datenbanktreiber verwendet wird. Defaultwert ist 'ODCB', weiters möglich sind Oracle, Sybase, OLEDB, DB2 und Informix
MAXROWS: Limitiert die maximale Anzahl an Ergebnisreihen einer Query (z.B. maxrows="10")
TIMEOUT: Anzahl in Millisekunden, bis die Query ohne Ergebnis abgebrochen wird und eine Fehlermeldung zurückgibt (z.B. Timeout="1000")

Weiterführende Informationen & Links
- Überblick über zahlreiche Anleitungen
http://www.cftutorials.com/

- Übersichtliche Quick-Reference
http://rtb.home.texas.net/cf/index.htm

- Cold Fusion Tutorial
http://www.npac.syr.edu/users/gcf/coldfusionjan98/


Zurück zur Übersicht