Coldfusion doâs and dontâs 2: rendering
In een vorig artikel heb ik geschreven hoe je in ColdFusion veilig en beter om kunt gaan met de database. In dit artikel zal ik enkele functies bespreken die helpen bij het plaatsen van content om de website met behulp van ColdFusion.
In Nederland maken maar weinig webontwikkelaars gebruik van onder andere ColdFusion, Sigma Solutions is daar één van. Hoewel modernere en betere ontwikkelomgevingen voor handen zijn, zoals .NET van Microsoft, waarin de nieuwste release van het Accessify WCMS is ontwikkeld, zijn er nog altijd websites en applicaties die ontwikkeld zijn in ColdFusion. Sigma Solutions raadt aan deze te migreren naar een nieuwe taal of anders om ze correct te beheren.
ColdFusion is een taal op zich, gebaseerd op Java, met zân specifieke eigenaardigheden. Door de ervaring die Sigma Solutions heeft met ColdFusion, weten wij waar we op moeten letten en wat mogelijke valkuilen zijn.
ColdFusion gebruikt components en templates om informatie te delen met de rest van de wereld. Components worden gebruikt als controller, templates zijn de view.
Uitgebreide tekensets met CFProcessingDirective
Paginaâs (of views) die getoond worden aan de bezoeker hebben een bepaalde encoding. Hiermee kan worden aangegeven welke tekenset getoond kan worden in de browser. De algemeen gebruikte tekenset UTF-8 bezit vele duizenden karakters, maar om deze te gebruiken, dient wel aangegeven te worden dat de pagina deze kan tonen.
Er zijn veel manieren om dit te doen, waaronder via de CF-tag CFPRocessingDirective. Deze tag zet je bovenaan een template en als attribuut geef je op pageEncoding=â<tekenset>â, bijvoorbeeld <cfprocessingdirective pageEncoding=âutf-8â />.
Let op: voor elke ColdFusion-template moet dit worden opgegeven, dus ook als deze via CFINCLUDE is meegenomen.
Daarnaast kan je het attribuut suppressWhitespace gebruiken om alle overbodige witruimte die gegenereerd wordt doorColdFusion te verwijderen.
In CFscript gebruik je hiervoor de volgende methode:
component{
pageencoding "utf-8" ;
Zie http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-76de.html voor meer mogelijkheden.
Content opslaan met Cfsavecontent
Content die door ColdFusion gegenereerd wordt, wordt direct naar de browser geschreven. Er zijn echter gevallen waarbij je de content eerst wilt maken en daarna pas sturen naar de browser, bijvoorbeeld om het te cachen of om bepaalde waardes te vervangen.
Je kunt een variabele maken en met &= tekst toevoegen aan de variabele, bijvoorbeeld:
<cfset tekst = â<h1>Hier wat tekst.</h1>â />
<cfset tekst &= âNog meer tekstâŠ<br />â />
Of:
tekst = â<h1>Hier wat tekst.</h1>â;
tekst &= âNog meer tekstâŠ<br />â;
Deze manier is echter nogal omslachtig, omdat er erg veel code wordt gebruikt om slechts wat content te genereren. Daarnaast is het lastig te onderhouden.
Er is hiervoor een alternatief: Cfsavecontent. Met Cfsavecontent plaats je de content die je in een variabele wilt opslaan tussen het begin en het einde van de tag en hoef je je niet druk te maken om regeleindes. Door <cfoutput> erin te zetten, kun je de content ook nog parsen.
Voorbeeld:
<cfsavecontent variable="tekst" >
#bepaalde tekst#
<cfoutput>
#now()#
</cfoutput>
</cfsavecontent>
<cfoutput>#tekst#</cfoutput>
Of:
<cfscript>
savecontent variable="tekst2" {
WriteOutput("
##bepaalde tekst##
<br />
#now()#
");
}
</cfscript>
<cfoutput>#tekst2#</cfoutput>
Daarnaast is CFSaveContent veel sneller bij het samenstellen van lange stukken tekst, zie Don't optimise your code (annexe).
Veilig tonen informatie van derden
In het volgende artikel wordt uitgelegd welke doâs en donâts er zijn op het gebied van het (veilig) tonen van informatie van derden op je website.