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

         

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



ГЛАВА 21

Рассмотрение приложения CurrencyScript.wml
Рассмотрение файла сценария CurrencyScriptlwrnls

В Главе 5 вы узнали, как скомбинировать WML-страницу и Peri-сценарий для создания приложения, предоставляющего пользователям возможности по пересчетуденег из одной валюты в другую. В данной главе вы будете использовать WMLScriptдля обработки данных, которую в Главе 5 выполнял Peri-сценарий. Как вы ужезнаете, WMLScript не имеет эквивалента для HDML, поэтому если необходимо автоматизировать HDML-приложение, то вы, по-прежнему, будете вынуждены использовать Perl. При запуске приложения CurrencyScript сотовый телефон отображает приглашение пользователю на ввод исходного типа валюты, как показанона Рис. 21.1. Используя кнопки стрелок, направленных вверх и вниз, пользователь может выделить определенный тип валюты. Затем приложение выводитприглашение пользователю на ввод суммы денег в указанной валюте, как показано на Рис. 21.2. Наконец, приложение отображает сумму денег, пересчитанную вдругие валюты, как показано на Рис. 21.3.



В настоящее время приложения, написанные на языке сценариевWMLScript, можно только просматривать, причем для этого необходимо использовать самые последние версии некоторых пакетов инструментального программного обеспечения (SDK) дляразработки WAP-приложений, аналогичных SDK, который выможете загрузить с Web-caOma www.openwave.com. Пока вСША не существует сотовых телефонов с поддержкойWMLScript. Если вы скачаете и установите SDK, поддерживающий WMLScript, то, чтобы проверить работу приложенияCurrencyScript, необходимо будет набрать в качестве URLwaplib.com/CurrencyScript/CurrencyScript.wml.






Рассмотрение файла сценария CurrencyScriptl .wmls





Рассмотрение файла сценария CurrencyScriptl .wmls


Как уже упоминалось ранее, при первоначальном запуске приложения вызывается функция Initialize (Инициализация), находящаяся в файлеCurrencyScriptl.wmls. Позже, когда пользователь выбирает тип валюты, приложение вызывает вторую функцию из WMLScript-файла, которая выводит приглашение пользователю на ввод суммы денег, пересчитываемой затем приложениемв другие валюты. В настоящее время WMLScript-код необходимо размещать в отдельном файле и предварять имя каждой функции ключевым словом extern.Сценарий CurrencyScriptl .wmls реализуется с помощью следующего программного кода:
extern function Initialize()
{
var EuroToDollar = "1.02982"; var PoundToDollar = "1.64649"; var YenToDollar = "0.00947277";


WMLBrowser.setVar("EuroToDollar", EuroToDollar); WMLBrowser.setVar("PoundToDollar", PoundToDollar); WMLBrowser.setVar("YenToDollar", YenToDollar);
var USDollar = 100.00; var Euro = USDollar / Lang.parseFloat(EuroToDollar); var UKPound = USDollar / Lang.parseFloat(PoundToDollar); var JapanYen = USDollar / Lang.parseFloat(YenToDollar);
USDollar = String.format("%3.2f", USDollar); Euro = String.format("%3.2f", Euro); UKPound = String.format("%3.2f", UKPound); JapanYen = String.format("%3.2f", JapanYen);
WMLBrowser.setVar("USDollar", USDollar); WMLBrowser.setVar("Euro", Euro); WMLBrowser.setVar("UKPound", UKPound); WMLBrowser.setVar("JapanYen", JapanYen);
WMLBrowser.refresh();
}
extern function GetUSDollar()
{
var EuroToDollar = WMLBrowser.getVar("EuroToDollar"); var PoundToDollar = WMLBrowser.getVar("PoundToDollar"); var YenToDollar = WMLBrowser.getVar("YenToDollar");
var USDollar = WMLBrowser.getVar("USDollar"); USDollar = Dialogs.prompt("US Dollars", USDollar);
var Euro = Lang.parseFloat(USDollar) / Lang.parseFloat (EuroToDollar); var UKPound = Lang.parseFloat(USDollar) / Lang.parseFloat (PoundToDollar); var JapanYen = Lang.parseFloat(USDollar) / Lang.parseFloat (YenToDollar);
USDollar = String.format("%3.2f", Lang.parseFloat(USDollar)); Euro = String.format("%3.2f", Euro); UKPound = String.format("%3.2f", UKPound); JapanYen = String.format("%3.2f", JapanYen);
WMLBrowser.setVar("USDollar", USDollar); WMLBrowser.setVar("Euro", Euro); WMLBrowser.setVar("UKPound", UKPound); WMLBrowser.setVar("JapanYen", JapanYen);
WMLBrowser.refresh();
}
extern function GetEuro()
{
var EuroToDollar = WMLBrowser.getVar("EuroToDollar"); var PoundToDollar = WMLBrowser.getVar("PoundToDollar"); var YenToDollar = WMLBrowser.getVar("YenToDollar");
var Euro = WMLBrowser.getVar("Euro"); Euro = Dialogs.prompt("Euro", Euro);
var USDollar = Lang.parseFloat(Euro) * Lang.parseFloat (EuroToDollar); var UKPound = USDollar / Lang.parseFloat(PoundToDollar); var JapanYen = USDollar / Lang.parseFloat(YenToDollar);
USDollar = String.format("%3.2f", USDollar); Euro = String.format("%3.2f", Lang.parseFloat(Euro)); UKPound = String.format("%3.2f", UKPound); JapanYen = String.format("%3.2f", JapanYen);
WMLBrowser.setVar("USDollar", USDollar); WMLBrowser.setVar("Euro", Euro); WMLBrowser.setVar("UKPound", UKPound); WMLBrowser.setVar("JapanYen", JapanYen);
WMLBrowser.refresh();
}


Внутри функции Initialize каждому типу валюты присваивается значение коэффициента пересчета. В реальном приложении, сценарий получал бы текущиекурсы валют из базы данных. После того как функция присвоила коэффициентыпересчета своим переменным, программа должна с помощью функцииWMLBrowser. setVar сделать значения переменных видимыми за пределамифункции (другими словами, в результате этой операции значения переменныхстановятся видимыми для программного кода WML-страницы). Затем функцияInitialize форматирует коэффициенты пересчета валют для отображения втаблице, вызывая для этого функцию String. format.


Как упоминалось ранее, всякий раз, когда пользователь выбирает тип валюты,приложение вызывает соответствующую выбранной валюте функцию, котораявыполняет пересчет в другие валюты. Например, если пользователь выбираетевро (Euro), приложение вызывает функцию GetEuro, которая, в свою очередь,активизирует функцию Dialogs. prompt, чтобы принять вводимые пользователем данные. Затем программа выполняет пересчет, присваивает результаты переменным, которые приложение отображает в таблице. Активизируя функциюWMLBrowser. refresh, приложение отдает браузеру команду обновить информацию на экране сотового телефона.


Как обсуждалось выше, из-за ограничений, накладываемых WML-браузерами наразмер WML-страницы, приложение разбивает сценарий на два файла. Например, сценарий CurrencyScript2.wmls реализуется с помощью следующего программного кода:
extern function GetUKPound()
{
var EuroToDollar = WMLBrowser.getVar("EuroToDollar"); var PoundToDollar = WMLBrowser.getVar("PoundToDollar"); var YenToDollar = WMLBrowser.getVar("YenToDollar");
var UKPound = WMLBrowser.getVar("UKPound"); UKPound = Dialogs.prompt("UK Pounds", UKPound);
var USDollar = Lang.parseFloat(UKPound) * Lang.parseFloat (PoundToDollar); var Euro = USDollar / Lang.parseFloat(EuroToDollar); var JapanYen = USDollar / Lang.parseFloat(YenToDollar);
USDollar = String.format("%3.2f", USDollar); Euro = String.format("%3.2f", Euro); UKPound = String.format("%3.2f", Lang.parseFloat(UKPound)); JapanYen = String.format("%3.2f", JapanYen);
WMLBrowser.setVar("USDollar", USDollar); WMLBrowser.setVar("Euro", Euro); WMLBrowser.setVar("UKPound", UKPound); WMLBrowser.setVar("JapanYen", JapanYen);
WMLBrowser.refresh();
}
extern function GetJapanYen()
{
var EuroToDollar = WMLBrowser.getVar("EuroToDollar"); var PoundToDollar = WMLBrowser.getVar("PoundToDollar"); var YenToDollar = WMLBrowser.getVar("YenToDollar");
var JapanYen = WMLBrowser.getVar("JapanYen"); JapanYen = Dialogs.prompt("Japan Yen", JapanYen);
var USDollar = Lang.parseFloat(JapanYen) * Lang.parseFloat (YenToDollar); var UKPound = USDollar / Lang.parseFloat(PoundToDollar); var Euro = USDollar / Lang.parseFloat(EuroToDollar);
USDollar = String.format("%3.2f", USDollar); Euro = String.format("%3.2f", Euro); UKPound = String.format("%3.2f", UKPound); JapanYen = String.format("%3.2f", Lang.parseFloat(JapanYen));
WMLBrowser.setVar("USDollar", USDollar); WMLBrowser.setVar("Euro", Euro); WMLBrowser.setVar("UKPound", UKPound); WMLBrowser.setVar("JapanYen", JapanYen);
WMLBrowser.refresh();
}



Дополнительную информацию по операторам и функциям WMLScriptможно найти в Приложении С, «Справочник по WMLScript».





Рассмотрение приложения CurrencyScript.wml





Рассмотрение приложения CurrencyScript.wml


При запуске приложения Currency Script браузер загружает WML-страницу, содержащуюся в файле CurrencyScript.wml, которая вначале инициализирует курсы пересчета валют. Если вы просмотрите WML-страницу, то обнаружите, что в нейимеется много ссылок, подобных приводимой ниже. Эта ссылка активизируетфункцию, находящуюся в отдельном WMLScript-файле:


<go href=" CurrencyScriptI.wmls#Initialize()" />


В данном случае элемент отдает браузеру команду выполнить ветвление и перейти к функции Initialize (Инициализация), находящейся в файлеCurrencyScriptI .wmls. После того как функция выполнит обработку, для которойона предназначена, управление возвращается в текущее место программного кода. Как вы увидите, функция Initialize присваивает значения курсов пересчетафунтов, йен и евро в доллары.


По мере знакомства с WML-страницей вы также встретите ряд элементов, примеркоторых приводится ниже. Здесь элемент ссылается на значение хранимое в переменной:


<td<a href="CurrencyScriptl.wmls#GetUSDollar()" title="Edit">US


Dollars :</aX/td>


<td>$USDollar<td>


В данном случае программный код ссылается на переменную USDollar, котораясодержит результат последнего преобразования в доллары США. ПриложениеCurrencyScript.wml реализуется с помощью следующего программного кода:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>
<card id="CurrencyScript">
<onevent type="onenterforward">
<go href="CurrencyScript1.wmls#Initialize()" />
</onevent>
<p align="center">
Currency Converter
</p>
<p align="left" mode="nowrap">
<table align="left" columns="2">
<tr> <td><a href="CurrencyScript1.wmls #GetUSDollar()" title="Edit">US Dollars:</a></td> <td>$USDollar</td> </tr>
<tr> <td><a href="CurrencyScript1.wmls #GetEuro()" title="Edit">Euro:</a></td> <td>$Euro</td> </tr>
<tr> <td><a href="CurrencyScript2.wmls #GetUKPound()" title="Edit">UK Pounds:</a></td> <td>$UKPound</td> </tr>
<tr> <td><a href="CurrencyScript2.wmls #GetJapanYen()" title="Edit">Japan Yen:</a></td> <td>$JapanYen</td> </tr>
</table>
</p>
</card>
</wml>
Как и во всех WML-страницах, первые два элемента рассматриваемой WML-страницы сообщают WAP-браузерам (а также программистам) версию WAP-спецификации поддерживаемой приложением. В данном случае WML-страницасовместима с XML 1.0 и описанием типа документа (DTD) версии 1.1, разработанным ассоциацией WAP Forum
Любая WML-страница, размещаемая после информации о версии, начинается стега <WML>. В конце каждой WML-страницы должен находиться соответствующийтег </WML>, который завершает элементы WML-страницы, Теги <HEAD> и </HEAD>,располагающиеся после тега <WML>, позволяют указывать данные о WML-странице, включая метаданные и информацию управляющую доступом. Многиепрограммисты рассматривают метаданные как «данные о данных». Другими словами, метаданные в нашем примере, считываемые и обрабатываемые браузером,сообщают браузеру, что надо делать с данными карт.
Элемент <meta> позволяет определять для WML-страницы метаинформацию. Внашем случае параметр http-equiv=Cache-Control сообщает WAP-браузеру, чтоданная часть метаинформации относится к системе кэширования памяти. Аналогично, параметр content=max-age=0 сообщает браузеру, что максимальное время, в течение которого должно выполняться кэширование WML-страницы, равнорулю секунд; то есть, браузер должен не запоминать, а повторно загружать данные с сервера каждый раз, когда поступает запрос. Для данной книги нулевоезначение было выбрано, чтобы помочь читателю в разработке программы. Привыборе нулевого значения каждый раз, когда происходит изменение, это изменение передается на телефон. В реально эксплуатируемом приложении статическое меню, подобное рассматриваемому здесь, по-видимому, должно использовать интервал хранения, установленный по умолчанию, равным 30 дням. Наконец, параметр forua="true" определяет, что данное значение Cache-Controlпредназначено для телефона и не должно удаляться каким-либо промежуточнымагентом.
Затем приложение создает таблицу, элементы которой указывают на функции вWMLScript-файлах. Так как многие WML-браузеры накладывают ограничение намаксимальный размер WML-страницы, приложение размещает функции в двухотдельных файлах. В частности, функции выводят приглашение на ввод суммыденег в долларах, фунтах, йенах или евро. Затем, основываясь на введенныхпользователем данных, WMLScript преобразует указанную сумму денег в другиевалюты и присваивает полученные результаты переменным $USDollar, $Euro,$UKPound и $ JapanYen, которые потом приложение отображает в таблице.



Приглашение на выбор вида валюты из приводимого списка



Рис.. 21.1. Приглашение на выбор вида валюты из приводимого списка





Приглашение пользователю на ввод суммы денег в указанной валюте



Рис.. 21.2. Приглашение пользователю на ввод суммы денег в указанной валюте





Отображение суммы денег, пересчитанной в другие валюты



Рис.. 21.3. Отображение суммы денег, пересчитанной в другие валюты