Quicksilver: фреймворк для CF9
Очень интересный подкаст о Quicksilver – фреймворке, заточенном специально под CF9. Слушайте:
Дебагинг в CFBuilder
Наглядная демонстрация возможностей IDE в части дебагинга: http://blogs.adobe.com/cfbuilder/Debugging/Using%20ColdFusion%20Debugger.swf
WhoIs-клиент
Очень простой WhoIs-клиент для доменов в зоне .com и .net – всего несколько строк кода.
<cfscript>
whois = createObject("java", "org.apache.commons.net.WhoisClient").init();
try {
whois.connect(whois.DEFAULT_HOST);
WriteOutput("<pre>"& whois.query("adobe.com") &"</pre>");
whois.disconnect();
}
catch(IOException e) {
WriteOutput("Error I/O exception: " + e.getMessage());
}
</cfscript>
Даль, что для Рунета не подходит
Работаем с Twitter
Маленькая хитрость. При помощи функции REReplace() мы заменим, к примеру, @riafusion на ссылку на twitter-аккаунт https://twitter.com/riafusion. Это делается очень просто:
<cfset t = "Привет, подружись с @riafusion" /> <cfset t = REReplace(t, '[@]+([A-Za-z0-9-_]+)','<a href="http://twitter.com/\1" rel="nofollow">@\1</a>','ALL') />
Ну вот и всё!
Преобразуем URL-адреса в правильный HTML
Отлично, когда система превращает написанный в тексте URL в “живой” – это всегда удобно. Сделать в ColdFusion это можно следующим образом:
<cfset t_sting = "Зайди на http://cfusion.ru - лучший русскоязычный блог о CF" /> <cfset t_string = REReplace(t_string, "([A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+)", "<a href="\1">\1</a>", "ALL") />
После чего вы получите такую строку:
Зайди на <a href="http://cfusion.ru">http://cfusion.ru</a> - лучший русскоязычный блог о CF
Область применения очень широка, но такой трюк вам обязательно пригодится.
ColdExt RC 1
Вышел первый кандидат-релиз ColdExt – лучшего способа использовать ExtJS в ваших coldfusion-проектах.
CF & Apache Derby
Как вы знаете, CF умеет работать с БД от Apache – Derby. Посмотрите видео о том как это делается:
Получаем MAC-адрес
Как получить Mac-адрес средствами Coldfusion? Легко!
<cfscript> j=createobject("java", "java.net.InetAddress"); m=createobject("java", "java.net.NetworkInterface"); a=j.getLocalHost(); mac=m.getByInetAddress(a).getHardwareAddress(); </cfscript> <cfdump var="#mac#">
Удачи.
Читаем документы MS Office
Сегодня Рей опубликовал отличный пост о том, как при помощи coldfusion читать документы, созданные в MS Office.
Рей, кроме того, приводит и рабочий вариант кода, а также некоторые советы.
SAVA: ваша бесплатная CMS
Да-да, совершенно бесплатная, многофункциональная, современная CMS, написанная на coldfusion – SAVA.
Сколько пользователь тратит времени на просмотр страницы?
Интересный вопрос, и его себе задал Рэй Кэмден в своём посте. И, разумеется предложил наилучшее решение:
<cffunction name="onRequestStart" returnType="boolean" output="false"> <cfargument name="thePage" type="string" required="true"> <cfset var data = ""> <cfif arrayLen(session.pages)> <cfset session.pages[arrayLen(session.pages)].duration = dateDiff("s", session.pages[arrayLen(session.pages)].timestamp, now())> </cfif> <cfset data = {page=getCurrentURL(),timestamp=now()}> <cfset arrayAppend(session.pages,data)> <cfreturn true> </cffunction>
и
<cffunction name="onSessionEnd" returnType="void" output="false"> <cfargument name="sessionScope" type="struct" required="true"> <cfargument name="appScope" type="struct" required="false"> <cfset var data = ""> <cfset var filename = ""> <cfwddx action="cfml2wddx" input="#arguments.sessionScope.pages#" output="data"> <cfset filename = expandPath("./" & replace(createUUID(),"-","_","all") & ".txt")> <cfset fileWrite(filename, data)> </cffunction>
Очень интересное решение!
Полезность №5
Эй, а как средствами coldfusion определить разницу в двух датах? Легче не бывает. Для этого имеется функция datediff(), имеющая такой синтаксис:
datediff("на что сравниваем?", "дата №1", "дата №2")
Сравнивать разницу можно на:
- yyyy: годы;
- q: кварталы;
- m: месяцы;
- y: дни года;
- d: дни;
- w: дни недели;
- ww: недели;
- h: часы;
- n: минуты;
- s: секунды;
В общем случае функция обычно используется так:
//article.published - дата публикации, к примеру, статьи #datediff('d', article.published, now())#
Пригодится!
Полезность №4
Как выбрать из строки имя и фамилию при помощи ColdFusion? Как всегда – легко!
Для этого мы воспользуемся функцией gettoken():
<cfscript>
myname="Алексей Яковенко";
firstname=gettoken(myname, 1);
lastname=gettoken(myname, 2);
</cfscript>
Я немного доработал код до функции, которая очень примитивна, но показывает работу наглядно. Как вы понимаете, имена люди могут писать как без отчества, так и с ним, поэтому и вы можете получать доступ к частям ФИО:
<cfscript> //функция вернёт структуру function extractnames(names,extracttype) { //extracttype: "simple" - для двузначных имён. Или "notsimple" - для полного ФИО exnames=structnew(); if (arguments.extracttype eq "simple") { exnames.fname=gettoken(arguments.names, 1); exnames.lname=gettoken(arguments.names, 2); } else if (arguments.extracttype eq "notsimple") { exnames.fname=gettoken(arguments.names, 1); exnames.mname=gettoken(arguments.names, 2); exnames.lname=gettoken(arguments.names, 3); } else { exnames.error=true; } return exnames; } </cfscript>
Всё готово.
Полезность №3
Как сгенерировать при помощи coldfusion стойкий пароль? Хм… всего пару строк написать и готово:
<cfscript> npass=""; for(i=0; i lte 3; i=i+1) { //Генерируем пароль из букв и цифр, чередуя их. //В конце мы 8-символьный пароль npass=npass & chr(randrange(90,115)) & randrange(0,9); } </cfscript>
Разумеется, вы можете сделать пароль длиннее. А можете доработать этот пример в функцию, которая будет возвращать вам пароль заданной длины:
<cfscript> //параметр "n" - сколько символов должно быть в пароле function makepass(n) { npass=""; for(i=0; i lte ( (arguments.n/2) - 1); i=i+1) { //Генерируем пароль из букв и цифр, чередуя их. //В конце мы 8-символьный пароль npass=npass & chr(randrange(55,115)) & randrange(0,9); } return npass; } </cfscript>
В результате вы получите сгенерированный пароль. Примерно такие:
j480[2e2=6`7 @3f9n9=9L8M0 U8Z6K5>5[9H3 J6Y6X7L6?1^0 I4T2k5\2n7R4
Причём, если вы расширите диапазон генерируемых символов, у вас будут более стойкие комбинации. Но особенно увлекаться не стоит.
Как видите, coldfusion решает поставленную задачу очень быстро и элегантно.
