Пособие по написанию WAP-сайтов

         

Отображение списка доступных символов акций



Рисунок 7.3. Отображение списка доступных символов акций




Подробнее о приложении StockQuote.hdml



Подробнее о приложении StockQuote.hdml

Как и приложение формата WML, файл StockQuote.hdml предлагает пользователюввести символ акции. Далее приложение загружает сценарий языка Perl, которыйопределяет, какой символ был введен, и затем отображает информацию о выбранной акции. Файл StockQuote.hdml имеет следующий исходный код:

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltEntry Name=Stock Format=*X Key=Symbol Default=""&gt

&ltAction Type=Accept Task=GO Method=Post PostData=$(Symbol) Dest="../waplibcgi/StockQuoteHDML.pl"&gt

&ltCenter&gtStock Quotes &ltBR&gt&ltBR&gtSymbol: &ltBR&gt(* for all)

&lt/Entry&gt

&lt/HDML&gt

Первый элемент внутри деки сообщает браузеру (или другим программистам),какая версия языка HDML используется приложением. Далее, выражение Markable=True сообщает браузеру, что он может установить закладку в исходной деке,a TTL=0 свидетельствует о невозможности кэширования.

Как и дека формата WML, дека формата HDML использует переменную с именемSymbol для отслеживания имени введенного пользователем символа. Для вводаимени символа, приложение использует элемент <Entry>:

&ltEntry Name=Stock Format=*X Key=Symbol Default=""&gt

Формат *х позволяет пользователю ввести любое число символов, чисел и буквверхнего регистра.

После ввода пользователем имени символа или звездочки (*), приложение использует элемент <Accept> для загрузки сценария языка Perl StockQuoteHDML.pl,передавая ему значение переменной Symbol.



Подробнее о приложении StockQuote.wml



Подробнее о приложении StockQuote.wml



Когда пользователь запускает приложение StockQuote, дека StockQuote.wml запрашивает у пользователя ввода символа акции. Далее, основываясь на выборепользователя, подключается сценарий языка Perl, находящийся в файлеStockQuoteWML.pl. После этого сценарий определяет символ, введенный пользователем, и отображает деку формата WML, соответствующую выбранной акции.Дека StockQuote.wml имеет следующий исходный код:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="Quote" title="Stock Quotes"&gt

&ltonevent type="onenterforward"&gt

&ltrefresh&gt &ltsetvar name="Symbol" value="" /&gt &lt/refresh&gt

&lt/onevent&gt

&ltonevent type="onenterbackward"&gt

&ltrefresh&gt &ltsetvar name="Symbol" value="" /&gt &lt/refresh&gt

&lt/onevent&gt

&ltdo type="accept"&gt &ltgo href="../waplibcgi/StockQuoteWML.pl?$(Symbol)" /&gt &lt/do&gt

&ltp align="center"&gt

Stock Quotes&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="nowrap"&gt

Symbol:&ltbr/&gt (* for all)&ltbr/&gt

&ltinput name="Symbol" maxlength="5" title="Symbol" type="text" format="*X" /&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Так же как и во всех деках формата WML, первые два ее элемента сообщают браузеру, какую из версий спецификации WAP поддерживает данное приложение. Внашем случае WML-страница поддерживает версию 1.0 языка XML и версию 1.1описания типа документа (DTD), разработанного ассоциацией WAP Forum.




&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

Далее, за информацией о версиях, каждый WML-файл начинается с тега <wml>. Вконце каждого файла вводят </wml>, что означает окончание исходного кодаприложения. За <wml> следуют теги <head> и </head>, внутри которых находитсяинформация о самом исходном коде, включая метаданные и информацию обуправлении доступом. Многие программисты называют метаданные «данными оданных». Другими словами, в этом случае метаданные, которые считывает и обрабатывает браузер, сообщают ему, как трактовать данные.

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

Элемент <meta> позволяет точно определить метаинформацию для исходногофайла. В нашем случае строка http-eguiv="Cache-Control" сообщает браузеруWAP, что эта часть метаинформации используется системой кэширования памяти. Аналогично, строка content=max-age=0 сообщает браузеру, что максимальноевремя, в течение которого будет кэшироваться этот файл, равно нулю секунд;значит, браузер не будет кэшировать данные, а загружать данные с сервера каждый раз, когда они будут запрошены. Для этой книги значение нуля было выбрано для содействия процессу обучения читателя. При выборе нуля каждый раз,когда будут происходить изменения, они будут передаваться на телефон. В реальном приложении статическое меню, подобное этому, можно использовать поумолчанию в течение 30 дней. Последняя строка forua="true" определяет, чтозначение Cache-Control предназначено для телефона и не может быть измененокаким-либо промежуточным агентом. <ой \

Далее, за первыми элементами в деке определяется единственная карта, котораяв нашем случае называется Quote. Как вкратце отмечалось выше, основная задачадеки StockQuote.wml - это приглашение пользователю на ввод символа акции, азатем вызов сценария языка Perl для отображения информации о выбранной акции.



Для отслеживания имени символа приложение использует переменную Symbol.Обратите внимание на два элемента в исходном коде недалеко от начала деки. Выувидите два элемента <OnEvent>, которые очищают значение переменной Symbol(символ акции), перед тем как пользователь введет новый символ акции.

Элементы обработки событий <OnEvent> удаляют любое существующее значениепеременной Symbol. Обработка этих событий выполняется перед тем, как пользователем будет введена какая-либо информация. Пакет для разработки про

граммного обеспечения (SDK) запоминает значения переменных при каждомпоследующем запуске программы. В первом элементе <OnEvent> с использованием выражения type="OnEnterForward" удаляется значение переменной, когдапрограмма запускается. Второе выражение type="oneenterbackward" свидетельствует об удалении значения переменной, если пользователь нажал кнопку Back(Назад). Элемент <refresh> обновляет переменные и вид экрана, если какая-либо из переменных отображается в данный момент.

Для передачи введенной пользователем информации в переменную, приложениеиспользует элемент <input>:

&ltinput name="Symbol" maxlength="5" title="Symbol" type="text" format="*X" /&gt

Элемент <input> определяет имя переменной, заголовок, который браузер будетотображать на дисплее телефона для этой переменной, максимальное число символов в переменной (в нашем случае 5), тип данных переменной (text) и форматпеременной. Формат *х позволяет переменной иметь длину не более maxlenthсимволов, цифр или букв верхнего регистра. \

Далее, если вы обратите внимание на экран приложения, показанный на Рисунок 7.1,приложение выводит заголовок StockQuotes и приглашение для ввода символа.Здесь можно ввести звездочку (*) в ответ на приглашение (* for all - * для всех). Вэтом случае приложение отобразит меню символов всех акций из своей базыданных. Для отображения этих текстовых сообщений приложение используеттег абзаца <р> с соответствующим выравниванием и тег <br> для перехода наследующую строку.После того как желаемый символ акции будет введен пользователем, приложение подключает сценарий языка Perl StockQuoteWML.pl, описанный ниже.


Подробнее о сценарии языка Perl StockQuoteHDML.pl



Подробнее о сценарии языка Perl StockQuoteHDML.pl

Итак, когда пользователь вводит имя символа акции в файле StockQuote.hdml,приложение передаст данные сценарию StockQuoteHDML.pl, который, используяпоследовательность конструкций if-else, определяет выбранную пользователемакцию. Очевидно, что содержимое сценария StockQuoteHDML.pl в целом аналоично содержимому файла StockQuoteWML.pl за исключением того, что первыйиспользует в своей работе деки формата HDML.

Аналогично, когда пользователь на запрос имени символа вводит МОК, сценарийязыка Perl загружает файл NOK.hdml, исходный код которого приведен ниже:

&ltHDML Version=3.0 TTL=0&gt

&ltDisplay&gt

&ltACTION Type=Accept Task=Prev Vars=Symbol=&gt

&ltCenter&gtStock Quotes&ltBR&gt

&ltLine&gtNOK&ltTAB&gtNokia Corp &ltLine&gtLast:&ltTAB&gt141 3/4 &ltLine&gtChange:&ltTAB&gt+1 3/4 &ltLine&gtVolume:&ltTAB&gt4.074 mil &ltLine&gtOpen:&ltTAB&gt138 &ltLine&gtHigh:&ltTAB&gt143 &ltLine&gtLow:&ltTAB&gt138 &ltLine&gt52 High:&ltTAB&gt151.62 &ltLine&gt52 Low:&ltTAB&gt47.81

&lt/Display&gt

&lt/HDML&gt

Для отображения информации о выбранной акции дека формата HDML простоиспользует элемент <Line>. Для изменения информации о котировке акций необходимо внести изменения в содержимое соответствующих дек. В идеале вашеприложение должно обращаться к базе данных на сервере для считывания необходимой информации о котировках акций в режиме реального времени.

Если пользователем введено неправильное имя символа, сценарий языка Perl загружает деку BadSYM.hdml, которая имеет следующий исходный код:

&ltHDML Version=3.0 TTL=0&gt

&ltDisplay&gt

&ltACTION Type=Accept Task=GO Dest=../StockQuote/StockQuote.hdml Vars=Symbol=&gt

&ltCenter&gtStock Quotes&ltBR&gt

&ltBR&gtUnknown stock symbol. Try again. &ltBR&gt&ltBR&gtFor this demo the only valid symbols are: &ltBR&gtAIRO &ltBR&gtNOK &ltBR&gtPCS &ltBR&gtPHCM




&lt/Display&gt

&lt/HDML&gt

В этой деке элемент <Display> используется для отображения сообщения обошибке и вывода возможных значений имен символов. Вдобавок к этому, исходный код использует <Action> для удаления неправильно введенного имени символа и возврата к деке StockQuote.hdml, если пользователь нажмет кнопку подтверждения выбора (ОК).

В заключение, если пользователь введет звездочку (*) для просмотра списка всехвозможных имен символов, сценарий языка Perl загрузит деку ShowAll.hdml, исходный код которой приведен ниже:

&ltHDML Version=3.0 TTL=0&gt

&ltChoice&gt

Known Symbols&ltBR&gt

&ltCE Task=GO Dest=../StockQuote/AIRO.hdml Label=AIRO&gtAIRO &ltCE Task=GO Dest=../StockQuote/NOK.hdml Label=NOK&gtNOK &ltCE Task=GO Dest=../StockQuote/PCS.hdml Label=PCS&gtPCS &ltCE Task=GO Dest=../StockQuote/PHCM.hdml Label=PHCM&gtPHCM

&lt/Choice&gt

&lt/HDML&gt

Используя элемент <Choice>, дека сперва отобразит список возможных для выбора символов, которые представлены в ней с помощью элементов <СЕ>. Далее<Choice> определяет, какой из символов введен пользователем, Если, к примеру,пользователь выберет символ NOK, автоматически загрузится дека NOK.hdml.



Подробнее о сценарии языка Perl StockQuoteWML.pl



Подробнее о сценарии языка Perl StockQuoteWML.pl

Как было сказано выше, каждый раз, когда пользователь вводит символ акции,приложение вызывает сценарий языка Perl, который и отображает информациюо выбранной акции. На самом деле для отображения информации о конкретнойакции сценарий загружает другой файл, относящийся непосредственно к выбранной акции. Например, для отображения информации об акциях Nokia (символ NOK), сценарий загружает файл NOK.wml. Сценарий StockQouteWML.pl имеетследующий исходный код:

#!/usr/bin/perl

print "Content-type: text/vnd.wap.wml\n\n";

$Buffer = $ENV{'QUERY_STRING'};

if ($Buffer eq "AIRO") { $FileName = "../StockQuote/AIRO.wml"; } elsif ($Buffer eq "PHCM") { $FileName = "../StockQuote/PHCM.wml"; } elsif ($Buffer eq "PCS") { $FileName = "../StockQuote/PCS.wml"; } elsif ($Buffer eq "NOK") { $FileName = "../StockQuote/NOK.wml"; } elsif ($Buffer eq "*") { $FileName = "../StockQuote/ShowAll.wml"; } else { $FileName = "../StockQuote/BadSYM.wml"; }

open (StockInfo, $FileName);

while (&ltStockInfo&gt) { print; }

close (StockInfo);

В нашем случае сценарий распознает только несколько символов. В реальномприложении вы не сможете разместить информацию о каждой из акций в отдельной карте формата WML. Вы будете должны размещать информацию в базеданных. После этого сценарий должен извлечь нужную информацию из базыданных и создать карту с интересующими вас сведениями в режиме реальноговремени.

Первая строка сценария представляет собой комментарий, сообщающий интерпретатору командной строки, где находится интерпретатор языка Perl. Во второйстроке сценарий помещает информацию для браузера (который перехватываетвывод сценария), какой тип данных будет отображаться. В третьей строке сценарий выделяет параметр, который ему передает исходная дека. В нашем случаеэто имя символа:

$Buffer = $ENV{'QUERY_STRING'};

Далее, сценарий использует последовательность конструкций if-else для определения имени символа.


Например, если пользователь выбрал символ NOK, сценарий будет использовать деку из файла NOK.wml, которая будет выглядеть следующим образом:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="Quote"&gt

&ltdo type="accept" label="Back"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Stock Quotes&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="nowrap"&gt

&lttable align="left" columns="2"&gt

&lttr&gt &lttd&gtNOK&lt/td&gt &lttd&gtNokia Corp&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtLast:&lt/td&gt &lttd&gt141 3/4&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtChange:&lt/td&gt &lttd&gt+1 3/4&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtVolume:&lt/td&gt &lttd&gt4.074 mil&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtOpen:&lt/td&gt &lttd&gt138&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtHigh:&lt/td&gt &lttd&gt143&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gtLow:&lt/td&gt &lttd&gt138&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gt52 High:&lt/td&gt &lttd&gt151.62&lt/td&gt &lt/tr&gt

&lttr&gt &lttd&gt52 Low:&lt/td&gt &lttd&gt47.81&lt/td&gt &lt/tr&gt

&lt/table&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Как видите, в деке жестко указана информация об акциях.


Это значит, что дляизменения информации о них, вам (или другому программисту) необходимо внести изменения непосредственно в файл. В идеале приложение должно получатьэти значения из базы данных, содержащей реальную информацию об акциях наданный промежуток времени и затем использовать эту информацию для создания новых дек в процессе работы.

Для облегчения восприятия выходной информации она организуется в таблицу.Как было сказано выше, если пользователь вводит звездочку в ответ на запрос овводе символа акции, приложение отобразит список всех доступных символов,как показано на Рисунок 7.3. Чтобы обработать введенную звездочку, сценарий языкаPerl вызывает деку из файла ShowAll.wml, исходный код которой приведен ниже:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type="accept"&gt &ltgo href="../StockQuote/StockQuote.wml"/&gt &lt/do&gt

&ltp align="left" mode="nowrap"&gt

Known Symbols&ltbr/&gt

&lta href="../StockQuote/AIRO.wml" title="AIRO"&gtAIRO&lt/a&gt &lta href="../StockQuote/NOK.wml" title="NOK"&gtNOK&lt/a&gt &lta href="../StockQuote/PCS.wml" title="PCS"&gtPCS&lt/a&gt &lta href="../StockQuote/PHCM.wml" title="PHCM"&gtPHCM&lt/a&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

В деке используется тег <а> для отображения имен символов и определения, какую деку загружать после того как пользователь ввел выбранный символ.

Так как пользователь имеет возможность самостоятельного ввода имени символаакции, возможны ошибки при наборе имени или набор имени, несуществующегов базе данных приложения.


Когда сценарий не может определить введеное имя(внутри последовательности конструкций if-else), он загружает деку из файлаBadSYM.wml, которая имеет следующий исходный код:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type="accept"&gt &ltgo href="../StockQuote/StockQuote.wml"/&gt &lt/do&gt

&ltp align="center"&gt

Stock Quotes&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="wrap"&gt

Unknown stock symbol. Try again. &ltbr/&gt&ltbr/&gtFor this demo the only valid sybmols are: &ltbr/&gtAIRO &ltbr/&gtNOK &ltbr/&gtPCS &ltbr/&gtPHCM

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Как вы видите, файл BadSYM.wml отображает сообщение для пользователя о том,что введенный символ неверен. Далее отображается список доступных имен

символов.