
ColdFusion Functions? oder eine Abwandlung des Fusebox Standards!
Einer der großen Nachteile von ColdFusion gegenüber PHP ist, das es
keine Funktionen gibt.
Nun ja mit einem Kniff, kann man eine ähnliche Funktionalität erreichen.
Die Idee kam mir als ich mich mal wieder mit Php und ColdFusion
auseinandergestzt habe.
Die Situation:
Bei Php werden die Funktionen per "Include" in das aktuelle Template
geladen und sind dann unter deren Namen aufrufbar.
ColdFusion bietet über den Befehl die Möglichkeit ebenfalls
Dateien in die aktuelle Datei zu laden, das Problem ist jedoch wie kann
man in diesen eingebetteten Dateien bestimmte Codestücke als "Funktion"
definieren und dann geziehlt zur Ausführung bringen?
Der Lösungsansatz:
in der Include Datei werden die so gennanten Funktionen mit
voneinander getrennt, so läßt sich jedem Codestück ein "Funktionsname"
zuweisen.
Diese könnte folgendermaßen aussehen:
<cfswitch expression="#action#">
<cfcase value="counter_show">
CODE UM COUNTER ANZUZEIGEN
</cfcase>
<cfcase value="counter_stats">
CODE UM COUNTERSTATISTIK ANZUZEIGEN
</cfcase>
</cfswitch>
Ist eine solche "Funktions Bibliothek" eingerichtet stellt sich die
Frage wie man diese einbindet. Ich sehe hier zwei Möglichkeiten, beide
haben Ihre Vorzüge und Nachteile.
1. Per <CFINCLUDE> und Variable
Da der <CFINCLUDE> Befehl keine Attribute zuläßt muß man hier einen
Kompromiss schließen, man verwendet Variablen. Im konkretem sieht das
dann so aus:
<CFSET action="counter_show">
<CFINCLUDE TEMPLATE="functions.cfm">
Der Vorteil dieser Variante liegt daran, das die Variablen die in der
"Funktion" vorkommen direkt verwendbar sind. Dies ist auch gleich der
größte Nachteil, da mit Funktionen auch Variblen "verstellt" werden
können, die später noch gebraucht werden könnten, hier ist es daher SEHR
WICHTIG auf einen sauberen Programmierstiel zu achten. Ein weiterer
Nachteil liegt darin, das vor Aufruf immer eine Variable gesetzt werden
muß.
2. Per Customtag
Im Gegensatz zum <CFINCLUDE> - Befehl erlaubt es ein Customtag direkt
Attribute anzugeben und ist damit flexibler. Ein Aufruf würde dann so
aussehen:
<CF_FUNCTIONS action="counter_show" variable1="1">
Zu bemerken gibt es, das Custom Tags einen anderen Variablenbereich
haben, um Zugriff auf die Variablen der aufgerufenen Datei zu bekommen
müßen diese mit dem CALLER Atrribut versehen werden (z.B.
CALLER.countername) ob dies als Vorteil oder Nachteil anzusehen ist, ist
jedem selber überlassen.
Ich möchte mit diesem Artikel keinen Anspruch auf Sinngehalt nehmen, da
hier die Meinungen auseinandergehen. Ich möchte nur denjenigen die noch
nicht so weit sind, damit Lösungswege aufzeigen, die vorher vielleicht
noch nicht bekannt waren.
Tim Köhler tim.koehler@direct-place.com - 27.03.2001