use cfhttp in cfscript version

With the cfhttp Tag (Definition: „Generates an HTTP request and handles the response from the server“) you can easily get content from other URIs.
Here’s a short example how to use cfhttp inside in CFScript, that worked for me very well.
Please note that this example works properly with getting content from username / password protected URIs, too. I’ve tested my Code with Railo 3.3.1 final


//get cfhttp result
string function getCfHttpResult(required string targetUri="") output="false" access="private" hint="returns http result for a given uri" {
try {
http = new http();
http.setMethod("get");
http.setURL("#arguments.targetUri#");
http.setUsername("#getUsername()#");
http.setPassword("#getPassword()#");.
ret = http.send().getPrefix().FileContent;
}
catch (any e) {
ret = 0;
}
}

cfc calling in browsers

If you ever asked yourself how to take a quick look inside a coldfusion cfc directly in a browser, check this out. If your cfc is in the webroot you can call it of course in a browser as usual:

http://www.domain.com/path/example.cfc

If you call a cfc this way the „cfc explorer“ appeares on stage and shows you auto-generated documentation of the cfc.
Additonally you can invoke a function directly in a browser:

http://www.domain.com/example.cfc?method=examplefunction

A request like this will actually invoke the method specified as url-parameter „method“.
Take care: the cffunction access-attribute must be specified as remote.

Coldfusion: Dubletten in einer Liste entfernen (CFML)

Aus aktuellem Anlass, weil ich’s grad mal wieder benötigt habe: ein kleines Code-Snippet zum Eliminieren von Dubletten in Listen. Es kommt ja immer wieder vor, dass man eine Liste hat, die doppelte Werte enthält. Manchmal benötigt man aber zum Weiterverarbeiten eine Liste, in der keine doppelten Einträge mehr vorhanden sind.
Das geht einfach und fix mit einem Loop über ein Struct:

<cfset myListWithDoubles = "1,1,5,4,6,1,4,6,12,4,5" />
<!--- elimate double values via struct --->
<cfset myStruct = StructNew()>
<cfloop index="idx" list="#myListWithDoubles#">
<cfset myStruct[idx] = "">
</cfloop>
<!--- convert back to a list --->
<cfset myListWithoutDoubles = StructKeyList(myStruct)>

CFML-Dokumentation jetzt als AIR-Applikation

Drüben bei cfmldocs.com gibt es nun eine wirklich sehr praktische Sache: eine CFML-Language-Referenz als AIR-Applikation.
Schlicht und schnörkellos, perfekt übersichtlich gemacht und mit schöner Suche, die direkt bei der ersten Buchstabeneingabe alle Funktionen und Tags filtert. Das Teil schlägt alle mir bekannten Online-Docs um Längen, man kommt pfeilschnell zum gesuchten Ziel.

Also unbedingt hinsurfen und installieren: http://cfmldocs.com/air/index.html
Schneller war nachschlagen nie.

AIr-Applikation CFML-Docs

AIr-Applikation CFML-Docs

Verzeichnis auflisten mit cfdirectory und mehrfachen Datei-Filtern

Aus aktuellem persönlichen Anlass hier ein Tipp zum Tag <cfdirectory>, das hat mich durchaus etwas Zeit gekostet: wenn man den Tag verwendet, will man oft auch einen Filter auf bestimmte Dateitypen setzen. Zum ersten Mal musste ich nun nicht nur nach einer Dateiendung, sondern nach mehreren Dateiendungen filtern. Die Lösung hierbei ist das Pipe-Symbol. Das nachstehende Beispiel zeigt die Funktionalität, klappt sowohl unter Railo als auch unter Adobe Coldfusion:

<cfset myPath = ExpandPath( './' ) />
<cfdirectory action="list" name="qFiles" directory="#myPath#" filter="*.txt|*.rtf">
<cfdump var="#qFiles#">

Das Beispiel extrahiert alle .txt- und .rtf-Dateien aus dem aktuellen Verzeichnis.

Reblog this post [with Zemanta]

richtig machen: XML-Objekt mit Coldfusion erzeugen

Ich habe öfters den Eindruck, dass die XML-Funktionen und -Tags, die man in CFML verwenden kann, nicht wirklich das Gelbe vom Ei sind. Wahrscheinlich kann man da drüber streiten, auf jeden Fall wollte ich Euch meine Optimal-Lösung für die Erzeugung eines richtigen XML aus einer Query nicht vorenthalten. Das Beispiel funktioniert sowohl unter Railo als auch unter Adobe Coldfusion:

<cfsilent>
<cfquery name="getCustomers" datasource="#request.datasource#">
select * from customers
</cfquery>
<!--- save xmlstring --->
<cfsavecontent variable="xmlString">
<customerlist>
<cfoutput query="getCustomers">
<customer id="#pkcustomers#">
<firstname><![CDATA[#Trim(firstname)#]]></firstname>
<lastname><![CDATA[#Trim(lastname)#]]></lastname>
</customer>
</cfoutput>
</customerlist>
</cfsavecontent>
<!--- save xml object --->
<cfxml variable="resultXml">
<cfoutput>#xmlString#</cfoutput>
</cfxml>
</cfsilent>
<cfdump var="#resultXml#">

Das Beispiel eignet sich hervorragend, um als Snippet abgelegt zu werden, viel Spass damit

Datepicker für Formulare mit jQuery UI

Immer wieder gestaltet man als Webworker Formulare für Websites, die Felder für Datumswahl beinhalten. Ich zeige in diesem Blogpost auf, wie man diese Aufgabe schnell und elegant mit Hilfe von jQuery UI löst.

Als erstes braucht man natürlich die jQuery-Javascript-Bibliothek in der Applikation (http://jquery.com/), für den produktiven Einsatz wird selbstverständlich die minimierte Version eingesetzt. Zusätzlich benötigt man den UI-Core, der bei Google Code unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.core.js erhältlich ist und zum guten Schluss das Datepicker-Plugin unter http://jquery-ui.googlecode.com/svn/trunk/ui/jquery.ui.datepicker.js.

Auf der HTML-Seite werden die JS-Files nun im Header eingebunden. Ausserdem bindet Ihr ein CSS ein, das Ihr Euch am besten direkt von http://blog.jqueryui.com/2010/02/jquery-ui-download-builderthemeroller-status/ holt:

<html>
<head>
<title>jquery ui form test</title>
<script type="text/javascript" src="/js/jquery-1.4.1.min.js"></script>
<script type="text/javascript" src="/js/jquery.ui.core.js"></script>
<script type="text/javascript" src="/js/jquery.ui.datepicker.js"></script>
<link rel="stylesheet" href="/styles/ui_sunny.css" type="text/css" media="all" />
</head>

Im Body wird das Formular gecodet. Das Vor-Belegen der beiden Formularfelder mit dem aktuellen Datum (und dem aktuellen Datum plus 1 Tag), sowie das Handling für Formular anzeigen/Formular bearbeiten habe ich hier mit Coldfusion gelöst, kann man ja jeweils auch in der Lieblings-Sprache seiner Wahl umsetzen:

<body>
<cfset currentDateFrom = createODBCDate(now()) />
<cfset currentDateFrom = DateFormat(currentDateFrom,"dd-mm-yyyy") />
<cfset currentDateTo = createODBCDate(now()) + 1 />
<cfset currentDateTo = DateFormat(currentDateTo,"dd-mm-yyyy") />


<cfif cgi.REQUEST_METHOD eq "POST">
<cfdump var="#form#">
<cfelse>

<script type="text/javascript">
$(function() {
$("#datepickerFrom").datepicker({ dateFormat: 'dd-mm-yy' });
$("#datepickerTo").datepicker({ dateFormat: 'dd-mm-yy' });
});
</script>
<form name="DateForm" method="post" action="#cgi.script_name#">
<p>
<label for="datepickerFrom">Start-Datum:</label>
<input class="inputDate" id="datepickerFrom" name="datepickerFrom" style="width:100px" value="<cfoutput>#currentDateFrom#</cfoutput>" />
</p>
<p>
<label for="datepickerTo">Ende-Datum:</label>
<input class="inputDate" id="datepickerTo" name="datepickerTo" style="width:100px" value="<cfoutput>#currentDateTo#</cfoutput>" />
</p>
<p><input type="submit" value="Auswertung starten" /></p>
</form>
</cfif>
</body>
</html>

Hier ist der Aufruf des Datepickers an die Formular-Elemente mit den ID’s „datepickerFrom“ und „datepickerTo“ gebunden, als zusätzlicher Paramter wird das Datum in einem bestimmten Format festgelegt. Ein schöne Übersicht aller möglichen Attribute, Events und Methoden ist unter http://jqueryui.com/demos/datepicker/ zu finden. Unter dieser Adresse gibt es auch eine Demo von allen möglichen schicken UI-Themes.

Als Ergebnis erhalten wir also nun ein Formular mit 2 Datumswahl-Feldern, nach dem Abschicken wir nur ein Dump des Formular-Objekts angezeigt. Das sollte als Grundgerüst für den weiteren Ausbau genügen – viel Spass damit.

perfektes Paging von Ergebnissen mit der Pagination.cfc

Abteilung super-praktisch: die Paging-Komponente von Nathan Strutz. Das seitenweise Durchblättern durch Ergebnisse einer Datenbank-Abfrage (oder eines Array, eines Struct), gehört zu den Aufgaben, die für Programmierer immer wiederkehren. Ich selbst habe solche Paging-Funktionalitäten in veschiedenen Ausführungen oft selber entwickelt, das Thema Code-Reuse hatte ich nicht weiter berücksichtigt. Continue reading

CFC zum Erzeugen von Google Sitemaps

Auf RIAForge gibt es eine nette CFC zum Erzeugen von Google XML Sitemaps: den Google Sitemap XML Generator.
Die Komponente erzeugt ein XML-File nach dem Sitemap-Protokoll (http://www.sitemaps.org), das von vielen Suchmaschinen wie Google, Bing und Yahoo unterstützt wird. Die Sitemap ergibt sich dabei aus dem Spidern des Navigationsbaums im Query-Format oder eben als XML-Sitemap.

Hier gehts zum Download der CFC bei RIAForge

Hier gehts zum Downlaod der CFC bei Github

Euer FCKEditor geht plötzlich nicht mehr im Firefox?

Neues aus der Abteilung Kuriositäten: wenn Ihr den FCKEditor einsetzt und Euch wundert, dass dieser plötzlich unter Firefox 3.6 nicht mehr geht, dann hier die Lösung dazu: es liegt eher am Jahr 2010, ist halt unglücklich mit dem Erscheinen des neuen Firefox zusammengefallen. Im Connector werden die Gecko-Browser mit folgender Überprüfung versehen, wenn der Paramter checkBrowser aktiviert ist:

stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );

Prima, also wahrscheinlich so ziemlich das gleiche lustige Problem wie mit den EC-Karten.
Dies müsst Ihr also ersetzen durch eine zeitgemäße Prüfung, wenn Ihr den Editor auch weiterhin verwenden wollt:

stResult = reFind( "gecko/(20[0-9][0-9][0-1][0-9][0-3][0-9])", sAgent, 1, true );

Optional kann man natürlich auch den Browsercheck durch die Deaktivierung des Paramters checkBrowser komplett umgehen.