ColdFusion MX — это новейшая версия и без того фантастического продукта, разработанного Macromedia, возможно, крупнейшим и лучшим производителем веб-программного обеспечения. CFMX, как его обычно называют, построен на основе J2EE (Java 2 Enterprise Edition) и, как результат, гораздо более устойчив, чем предыдущие версии ColdFusion. Если вам интересно, стоит ли обновлять старую версию 3.1, которая у вас еще есть, ответом будет «да»!
Если вы только начинаете, у вас, вероятно, есть куча вопросов. «Что такое ColdFusion? Нужно ли мне знать Java, так как он построен на J2EE? Почему я должен использовать CFMX вместо ASP или другого бесплатного скриптового языка? ». Позвольте мне ответить на эти вопросы по одному:
- Прежде всего, ColdFusion MX — это полнофункциональный сервер приложений. CFMX будет работать в сочетании с наиболее популярным программным обеспечением для веб-серверов, включая Apache, IIS и веб-сайт Deerfield. Подумайте об этом так: допустим, вы используете IIS. В этом сценарии IIS будет играть роль бейсбольной игры. Питчер — веб-пользователь, а ColdFusion — ловец.
В типичной «игре» пользователь «подает» http-запрос на html-страницу, и тесто (это программное обеспечение веб-сервера) отправляет запрос обратно пользователю. С CFMX пользователь «подает» запрос на файл ColdFusion. Веб-сервер делает шаг назад и позволяет сборщику (ColdFusion) принять запрос CFML и передать его обратно пользователю. Я знаю, что эта аналогия немного странная, но она обычно помогает проиллюстрировать, где CFMX вписывается в картину.
Во-вторых, ColdFusion — это мощный серверный язык сценариев. И поверьте мне, он такой же надежный, как и любой другой язык. Этот язык состоит из тегов, похожих на теги HTML, и ФУНКЦИЙ, аналогичных тем, которые можно найти в Visual Basic.
- Третьим в этой строке вопросов является «Почему я должен использовать CFMX вместо другого бесплатного скриптового языка?». Я полагаю, что Бен Форта ответил на этот вопрос с треском в недавнем выпуске ColdFusion Developer’s Journal. Короткая версия — «вы получаете то, за что платите», а CFMX, хотя он и не дешев, предоставляет множество функций, которые во много раз обойдутся вам в CFMX на другом «бесплатном» языке.
- Вам нужно знать Java, чтобы использовать CFMX? Нет. CFML ставит простой и удобный в использовании язык между вами и громоздкой Java.
Хорошо, хватит уже! Давайте получим кодирование!
Я уже говорил, что CFML похож на HTML, но в чем разница между HTML и CFML? Просто. Все теги ColdFusion начинаются с букв «CF», что позволяет вам сказать, что такое статический HTML и что такое код ColdFusion. Когда ColdFusion читает страницу CFML и находит тег ColdFusion, он выполняет заданную задачу и возвращает HTML конечному пользователю. Одна из причин, по которой CFML настолько мощен, заключается в том, что он отлично работает с существующим HTML. Вы можете встраивать теги CF в статический HTML и даже использовать ColdFusion для написания HTML-кода для вас во многих случаях. Давайте попробуем.
Урок 1: Простое искусство CFML
Давайте начнем с самого простого и часто используемого тега ColdFusion:
<CFOUTPUT></CFOUTPUT>
Тег «cfoutput» позволяет серверу ColdFusion «выводить» или отображать данные между этими тегами. Сам по себе <CFOUTPUT>
бесполезен, но если вы объедините его с двойными знаками решетки (##), он станет основой для языковой структуры CFML. Завершенный выводной тег будет выглядеть примерно так:
<CFOUTPUT>#VariableName#</CFOUTPUT>
Примечание. Как правило, вы не можете размещать теги cfoutput внутри других тегов cfoutput. Если вы это сделаете, вы получите сообщение об ошибке, сообщающее, что у вас есть недопустимые вложенные теги cfoutput. Есть способ и причина, чтобы сделать это, но это выходит за рамки этого простого урока.
Теперь давайте создадим простой вывод. С большинством языков программирования. вы всегда, кажется, сначала изучаете скрипт «Hello World», поэтому давайте начнем с этого:
- Убедитесь, что вы установили CFMX .
- Убедитесь, что ColdFusion MX Service работает.
- Создайте новую папку с именем Lesson1 в Webroot на сервере CFMX. C: CFUSIONMXWWWROOTLESSON1
- Откройте Cold Fusion Studio или другой из ваших любимых текстовых редакторов. Я рекомендую ColdFusion Studio или Homesite для этой функции. Вы также можете использовать Dreamweaver MX в режиме просмотра кода. Этот урок не будет относиться ни к одному из визуальных CFML в этом приложении.
- Создайте новую пустую страницу CFML. Он будет выглядеть так же, как пустой документ HTML.
- Сохраните этот файл в новую папку как INDEX.CFM
- Между тегами
<BODY></BODY>
, как в HTML, введите следующий код:<CFSET MyWorld = 'Hello World'> <CFOUTPUT>#MyWorld#</CFOUTPUT>
- Просмотрите страницу, открыв браузер и введя свой IP-адрес (в большинстве случаев 127.0.0.1), затем порт 8500 и папку Lesson1. Это должно выглядеть так:
http://127.0.0.1:8500/Lesson1/
Большой! Теперь давайте разберем этот пример кода:
Разбираем пример кода
<CFSET MyWorld = 'Hello World'>
создает переменную и значение на странице, которую вы просматриваете. В этом конкретном случае мы создали переменную с именем «MyWorld» и присвоили ей значение «Hello World». В ColdFusion, как и во всех языках программирования, переменная равна ее значению. Таким образом, MyWorld будет обрабатываться как «Hello World».Всякий раз, когда вам нужно использовать эту переменную в этом шаблоне и только в этом шаблоне, вы можете «вызвать» переменную в действие с помощью указанного выше блока
CFOUTPUT
. Когда вы покидаете эту страницу, переменная умирает и должна быть либо сброшена с помощьюCFSET
, либо передана через строку запроса.Имя, которое я выбрал, «MyWorld», не волшебное имя ... у него вообще нет никаких мистических свойств программирования. Вы можете назвать свою переменную «клоунские сапоги», если захотите это сделать.
Используя
<CFSET>
как у меня выше, есть несколько основных рекомендаций, которым вы, возможно, захотите следовать.
- Имена переменных ColdFusion НЕ чувствительны к регистру.
- Переменные ColdFusion не имеют типов. Вам не нужно объявлять, является ли переменная строкой, числом и т. Д.
- Подумайте о том, чтобы вводить имена переменных в «заглавном регистре», где каждое слово начинается с заглавной буквы, подобно JackPoe или ColdFusion. Это просто облегчает их чтение. Не стесняйтесь применять любую практику кодирования, которую считаете нужной, однако вы должны выбрать одну практику именования и придерживаться ее с этого момента.
- Никогда не используйте пробелы или знаки препинания в именах переменных ... никогда.
- Имя вашей переменной не должно начинаться с цифры.
- Сделайте ваши имена переменных легко запоминающимися и короткими (когда это возможно). Это делает их легче запомнить и быстрее набирать. Избегайте создания имен переменных, таких как «MyThirdVariableHere». Если вам придется печатать это несколько десятков раз, это быстро устает.
Итак, чтобы быстро подвести итоги и
<CFSET>
диаграмму типичного<CFSET>
:<CFSET MyScript = 'Hello Papa Smurf'> The tag being used The variable name The value you are assigning to the variable
Теперь давайте посмотрим на блок
<CFOUTPUT>
:<CFOUTPUT>#MyScript#</CFOUTPUT>
Вы заметите, что имя переменной заключено в двойные фунты или хеш-знаки: ##. Если вы будете подыгрывать аналогии, это как «отпечатки пальцев» ColdFusion. Сервер ColdFusion «чистит» шаблон, и где бы он ни находил эти «отпечатки пальцев», он говорит: «Ага! Мне нужно что-то сделать здесь».
В этом случае сервер получает запрос на отображение значения переменной с именем «MyWorld». Таким образом, вместо того, чтобы показывать вам слово «MyWorld», он покажет вам значение переменной, в данном случае «Hello World».
Давайте сделаем еще один - на этот раз мы представим две простые функции.
-
Now()
— эта функция получает текущую дату и время с сервера и форматирует их стандартным образом. -
DateFormat(date, 'mask')
— Используя эту функцию, мы переопределим форматирование по умолчанию для даты, созданной с помощьюNow()
, и сообщим ColdFusion, как мы хотим отформатировать ее.
<CFOUTPUT>#DateFormat(Now(), 'MM/DD/YYYY')#</CFOUTPUT>
Эта строка кода возьмет текущую дату и переформатирует ее к чему-то вроде 04/12/2003. Круто то, что вы можете рассматривать весь этот код как обычный текст:
Hello, Today Is <CFOUTPUT>#DateFormat(Now(),'MM/DD/YYYY')#</CFOUTPUT>.
Используя этот код таким образом, вы увидите:
Hello, Today is 04/12/2003
Добавьте этот код на страницу INDEX.CFM и попробуйте. Вы также можете добавить некоторые теги шрифтов или другой формат HTML вокруг этого кода для достижения желаемого эффекта.
Чтобы DateFormat()
больше о возможностях использования и форматирования функции DateFormat()
, обратитесь к справочному разделу по функциям в конце этой статьи.
Вы заметите, что мы вложили функции в этот пример кода.
<CFOUTPUT>#DateFormat(Now(), 'MM/DD/YYYY')#</CFOUTPUT>
ColdFusion позволяет комбинировать или «вкладывать» функции навсегда. Там нет ограничений на количество функций, которые вы можете объединить.
Успех с ColdFusion основан на двух вещах:
- Знай свой код. Потратьте деньги, чтобы купить текущий Справочник по языку CFML и изучить его. Это действительно интересное чтение.
- Практика. Как и во всем, практика делает совершенным.
Обратите внимание, что в некоторых случаях вы можете захотеть отобразить знак фунта для пользователя. Для этого вам нужно «убежать от знака фунта». Это делается путем размещения двух ## вместе без информации между ними. ColdFusion интерпретирует это как один символ, а не переменную, которая будет обработана.
Например, если вы используете <CFOUTPUT>
вокруг таблицы и в своих тегах HTML вы пытаетесь назначить BGCOLOR="#FFFFCC"
, ColdFusion прочитает это как начало процесса. Чтобы правильно избежать этого, вы должны ввести BGCOLOR="##FFFFCC"
Урок 2. Использование ColdFusion для отображения содержимого базы данных
Возможно, самая большая особенность ColdFusion — это удивительно простой способ взаимодействия с базами данных. CFMX может быть связан практически с любой базой данных, которую вы можете себе представить… Oracle, MS SQLServer, MySQL (мой личный фаворит), MS Access, FileMaker, Sybase, Informix (мой наименее любимый!) И многое другое!
Для работы с CFMX и базами данных вам необходимо понимать две вещи. ODBC и SQL.
- ODBC расшифровывается как Open Database Connectivity и является основой, на которой ColdFusion подключается к большинству стандартных баз данных.
- SQL или «See-Quill» — это основной язык, который используется для общения с базами данных. Это простой язык, который может сделать или сломать вас как разработчика. Я предлагаю взять копию Learn SQL за 10 минут от Ben Forta. Этот урок предполагает, что вы не знаете SQL, поэтому я сделаю это проще.
Перво-наперво: нам нужна база данных! Чтобы сэкономить время, я создал очень простую базу данных для загрузки и использования. Требуется как минимум Microsoft Access 2000 — поэтому убедитесь, что он у вас есть, прежде чем продолжить.
Теперь нам нужно создать простое соединение ODBC. Для этого потребуется подключение к CFMX Administrator, панели управления, которая позволяет вам взаимодействовать с сервером приложений ColdFusion.
- Перейдите к 127.0.0.1:8500/cfide/administrator
- Введите ваш пароль. Вы должны знать это … если вы правильно установили сервер. Если вы забыли это, посмотрите на CFFAQ.com для деталей.
- В левой навигационной панели нажмите ссылку «Источники данных».
- В поле «Имя источника данных» введите «CFData» без кавычек.
- Откройте раскрывающийся список, выберите Microsoft Access и нажмите ДОБАВИТЬ.
- Найдите сервер в базе данных или введите путь к файлу вручную.
- Нажмите ОТПРАВИТЬ.
- Если вы все сделали правильно, CFMX отобразит сообщение о том, что источник данных был успешно обновлен, и вы увидите «OK» рядом с вашим источником в списке подключенных источников данных.
Теперь, когда у вас есть соединение ODBC, давайте посмотрим на саму базу данных. Эта база данных настолько проста, насколько это возможно, и содержит только одну таблицу, которая содержит несколько записей. В реальном мире это случается редко.
Если вы не знакомы с реляционными базами данных, Access — это хорошее место для практики, но слово мудрому: Access — не лучшее решение для ваших потребностей в базе данных. Если вы смотрите на низкий трафик и незначительные обновления данных, то вы будете в порядке с Access. Если вы создаете огромную базу данных на основе сотен тысяч записей и / или ожидаете большого использования, подумайте о том, чтобы попробовать MySQL… и если вы можете себе позволить, чтобы они попробовали SQLServer или Oracle.
Наша база данных в этом случае содержит несколько записей в таблице с именем INFO. Если вы не знаете, что такое таблица базы данных, подумайте о ней как о большой электронной таблице, в которой хранятся все ваши данные. Внутри этой таблицы находятся записи, состоящие из данных, хранящихся в столбцах. Это действительно довольно просто.
Эта база данных содержит следующие столбцы:
NAME ADDRESS CITY STATE ZIP PHONE EMAIL NOTES ID
Обратите внимание, что столбец ID — это ваш PRIMARY KEY
. Это стандартный способ, которым Access создает уникальный идентификатор для каждой записи в базе данных.
Теперь мы собираемся использовать CFML, чтобы высосать некоторые из этих данных на экран.
- Создайте новую папку в CFMX Webroot с именем LESSON2.
- В вашем текстовом редакторе создайте новый файл и сохраните его как ALLDATA.CFM
- Теперь, в этом файле, добавьте этот код между тегами BODY:
<CFQUERY DATASOURCE="CFdata" NAME="getall"> SELECT * FROM Info ORDER BY Name ASC </CFQUERY>
- Затем под этим кодом добавьте следующий HTML:
<table align="center" border="1"> <CFOUTPUT QUERY="getall"> <tr> <td>#CURRENTROW#</td> <td>#NAME#</td> <td>#ADDRESS#<BR>#CITY# #STATE#, #ZIP#</td> <td>#PHONE#</td> <td>#EMAIL#</td> <td>#NOTES#</td> </tr> </CFOUTPUT> </table>
- Сохраните страницу и просмотрите ее в своем браузере.
Это еще не красиво — но это работает!
Давайте рассмотрим, что делает этот код.
Тег CFQUERY
— это средство, с помощью которого CFML извлекает данные из базы данных. Указанные нами атрибуты, DATASOURCE
и NAME
, требуются CFMX. Атрибут NAME
этого тега указывается вами и может быть любым словом, которое легко запомнить. Имена запросов не могут содержать пробелов или знаков препинания.
Между открывающим и закрывающим тегом CFQUERY
находится сам SQL-запрос. Это не CFML, это SQL, язык базы данных. Так что же мы сказали базе данных сделать? Давайте посмотрим на это подробно.
-
SELECT *
Это говорит базе данных, чтобы получить записи. Звездочка означает все записи. Итак, вкратце, мы сказали базе данныхSELECT ALL
. -
FROM Info
Итак, теперь, когда в базе данных указано, что нужно получать все записи, нам нужно указать, откуда их взять. Эта строка сообщает базе данных имяTABLE
из которой мы хотим выбрать данные. В этом случае нам нужны данные из нашей таблицы Info. -
ORDER BY Name ASC
Эта последняя строка действительно просто соус. Он сообщает базе данных, что теперь, когда мы выбрали все данные из таблицы Info, мы хотим, чтобы они были организованы по столбцуNAME
в возрастающем алфавитном порядке. Если вы хотите отсортировать данные в порядке убывания, вы должны использовать аббревиатуруDESC
.
Что хорошего в CFML и SQL вместе, так это то, что вы можете легко использовать CFML для дополнения вашего запроса, чтобы получить именно те данные, которые вам нужны … что подводит нас к последней части этого урока.
Урок 3. Использование CFML для поиска в базе данных
Во второй части мы использовали CFML для вывода всей базы данных на экран. Это хорошо работает для небольшой базы данных, но в реальной жизни это редко полезно и может вызвать некоторые серьезные проблемы с производительностью. Самое простое решение — дать пользователям возможность поиска в базе данных, чтобы найти именно то, что им нужно. С CFML это совсем несложно.
- Создайте новый файл в папке lesson2 с именем INDEX.CFM
- Между тегами BODY этого документа добавьте HTML-форму, например:
<div align="center"> <form action="search.cfm" method="POST"> Search for:<input type="text" name="k"> <input type="submit" value="Find!"> </form> </div>
- Теперь создайте еще одну новую страницу с именем SEARCH.CFM
- Между тегами
BODY
мы должны иметь дело с проверкой отправленной формы. Добавьте этот код:<CFIF len(FORM.k) IS 0> Oops!<br> You need to enter some search criteria!<br> <a href="javascript:history.back()">Go back</a> and try again. <CFELSE> <CFQUERY DATASOURCE="CFdata" NAME="findem"> SELECT * FROM Info WHERE Name LIKE '%#FORM.k#%' </CFQUERY> <CFIF findem.recordcount IS 0> Sorry!<br> Your search for <CFOUTPUT>#FORM.k#</CFOUTPUT> did not return any matches.<br> <form action="search.cfm" method="POST"> Search again:<input type="text" name="k"> <input type="submit" value="Find!"> </form> <CFELSE> <!--- display your results ---> <table align="center" border="1"> <tr><td colspan="6" align="center">Your search returned <cfoutput>#findem.recordcount#</cfoutput> matches.</td></tr> <CFOUTPUT QUERY="findem"> <tr> <td>#CURRENTROW#</td> <td>#NAME#</td> <td>#ADDRESS#<BR>#CITY# #STATE#, #ZIP#</td> <td>#PHONE#</td> <td>#EMAIL#</td> <td>#NOTES#</td> </tr> </CFOUTPUT> </table> </CFIF> </CFIF>
- Сохраните страницы и попробуйте их в своем браузере.
Теперь давайте рассмотрим код. В этот раз будет намного больше, поэтому мы рассмотрим его кусками.
На странице INDEX.CFM нет хитростей. Это просто простая форма HTML. Я назвал текстовое поле «k», чтобы обозначить «ключевые слова» … это просто, как я это делаю.
SEARCH.CFM содержит загрузку CFML, которую вы, вероятно, никогда раньше не видели. Первый новый тег, который вы видите, это <CFIF>
. Это стандартный метод, который мы используем для обработки условной обработки в CFML. Этот тег имеет несколько вариантов. Для получения полной информации, проверьте ссылку в конце этой статьи. По сути, это специфическое использование — это остановка пользователей, которые пытаются отправить форму поиска без ввода каких-либо ключевых слов поиска.
Условная обработка позволяет разработчику сказать: «Если небо голубое, сделайте это. В противном случае сделайте это или это». Это позволяет вам отлавливать события и возможные ошибки и контролировать их, чтобы делать именно то, что вам нужно.
<CFIF len(FORM.k) IS 0>
Часть « len(FORM.k) IS 0
» вышеприведенного тега использует функцию LEN()
для определения длины отправленного содержимого поля формы. В этом случае, если длина поля формы равна нулю, мы остановим обработку страницы.
<CFELSE>
Этот тег является условием «иначе». Таким образом, если пользователь отправляет надлежащие критерии поиска, CFMX продолжит обрабатывать страницу.
Давайте внимательнее посмотрим на этот SQL. Первые две строки должны быть знакомы, но эта последняя строка может быть новой.
WHERE Name LIKE '%#FORM.k#%'
Это WHERE CLAUSE
в SQL. Он используется, чтобы сообщить базе данных, какие именно данные вы хотите выбрать. Основной синтаксис: WHERE ColumnName LIKE
‘что-то’. «Что-то», если оно заключено в кавычки, должно представлять собой STRING VALUE
— слово или слова. Без кавычек вы указываете базе данных совпадать по числу. В этом случае мы позволяем ColdFusion заполнить пробел значением поля формы, предоставленным пользователем.
Подстановочные знаки: как и во многих языках, SQL позволяет использовать подстановочные знаки для увеличения эффективности поиска. В приведенном выше коде мы используем символ процента для обозначения подстановочного знака. Внутри знаков процента мы помещаем представленную переменную формы «k». Вот некоторые примеры:
- «
%variable%
» означает СОДЕРЖИТ значение переменной - ‘
variable%
‘ означает START WITH значением переменной и заканчивается чем-либо - «
%variable
» означает ENDS WITH значением переменной и начинается с чего угодно.
Следующий раздел кода результатов, который нам нужно изучить, — это следующий блок CFIF
. Этот код проверяет RECORDCOUNT
запроса, и, если он не равен нулю — то есть запрос возвращает что-либо большее, чем число ноль — страница будет обрабатываться. Далее следует раздел, в котором указано, сколько записей найдено. Обратите внимание, как называется переменная: FINDEM.RECORDCOUNT
. При этом используется переменная запроса RECORDCOUNT
, и она отображается только один раз. Если вы поместите этот код в CFOUTPUT
который содержит атрибут QUERY
, код будет повторяться для каждой найденной записи! Совсем не полезно!
Каждый запрос ColdFusion возвращает три автоматические переменные. CURRENTROW
— это фактическая нумерация каждой записи. Например, если ваш запрос возвращает 50 записей, CURRENTROW
будет CURRENTROW
их 1-50. RECORDCOUNT
возвращает в виде числа количество записей, найденных вашим запросом. COLUMNLIST
возвращает разделенный запятыми список столбцов в COLUMNLIST
таблице.
Так что у вас есть это! Основы ColdFusion и CFML. Как видите, это требует некоторой работы, но CFML — это простой и эффективный способ создания любого веб-приложения, о котором вы только можете подумать. Не спускайте своих глаз, очищенных для больше на CF скоро!
Справочник по тегам и функциям
<CFOUTPUT></CFOUTPUT>
Отображает вывод запроса к базе данных, переменной или другой операции.
Синтаксис:<cfoutput query = "query_name" group = "query_column" groupCaseSensitive = "Yes" or "No" startRow = "start_row" maxRows = "max_rows_output"> </cfoutput>
<CFSET>
Определяет переменную ColdFusion.Синтаксис:
<cfset variable_name = expression>
<CFQUERY></CFQUERY>
Передает запросы или операторы SQL в источник данных.Синтаксис:
<cfquery name = "query_name" dataSource = "ds_name" dbtype = "query" username = "username" password = "password" maxRows = "number" blockFactor = "blocksize" timeout = "seconds" cachedAfter = "date" cachedWithin = "timespan" Either of the following: debug = "Yes" or "No" or: debug SQL statement(s) > </cfquery>
<CFIF></CFIF>
Создает простые и составные условные выражения в CFML. Проверяет выражение, переменную, возвращаемое значение функции или строку. При необходимости используется сcfelse
иcfelseif
.Синтаксис:
<cfif expression> HTML and CFML tags <cfelseif expression> HTML and CFML tags <cfelse> HTML and CFML tags </cfif>
LEN()
Определяет длину строки или двоичного объекта.Синтаксис:
Len(string or binary object)
NOW()
Получает текущую дату и время компьютера, на котором работает сервер ColdFusion. Возвращаемое значение может быть передано в качестве параметра для функций date.Синтаксис:
Now()
DATEFORMAT()
Форматирует значение даты. Поддерживает даты в формате даты США.Синтаксис:
DateFormat("date" [, "mask" ])
Спецификации тегов взяты из справочного руководства по языку ColdFusion MX,
Авторские права Macromedia, Inc.