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

         

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



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




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



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

Как и приложение формата WML, файл MortgageCalc.hdml позволяет пользователю вычислить сумму выплаты по закладной, используя собственный сотовый телефон. Этот файл имеет следующий исходный код:

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

&ltChoice Name=Mortgage Method=Alpha&gt

&ltAction Type=Accept Label=Edit&gt &ltAction Type=Soft1 Label=Calc Task=GO Dest=#CalcPayments&gt

&ltCenter&gtMortgage Calculator&ltbr&gt

&ltCE Task=GOSub Dest=#GetPrincipal Vars=Principal=$Principal Receive=Principal&gt Principal: &dol;$Principal

&ltCE Task=GOSub Dest=#GetInterest Vars=Interest=$Interest Receive=Interest&gt Interest(%): $Interest

&ltCE Task=GOSub Dest=#GetYears Vars=Years=$Years Receive=Years&gt Years: $Years

&lt/Choice&gt

&ltEntry Name=GetPrincipal Default=$Principal Key=Principal Format=NNNNNN*N&gt

&ltAction Type=Accept Task=Return Retvals=$Principal&gt Principal:&dol;

&lt/Entry&gt

&ltEntry Name=GetInterest Default=$Interest Key=Interest Format=NN.NN&gt

&ltAction Type=Accept Task=Return Retvals=$Interest&gt Interest(%):

&lt/Entry&gt

&ltEntry Name=GetYears Default=$Years Key=Years Format=NN&gt



&ltAction Type=Accept Task=Return Retvals=$Years&gt Years:

&lt/Entry&gt

&ltNoDisplay Name=CalcPayments&gt

&ltAction Type=Accept Task=GO Method=Post PostData=$Principal&$Interest&$Years Dest=../waplibcgi/MortgageCalcHDML.pl&gt

&lt/NoDisplay&gt

&lt/HDML&gt

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

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

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

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

После того как пользователь введет и подтвердит всю необходимую информацию, приложение переходит к карте CalcPayments, откуда и вызывается сценарий языка Perl MortgageCalcHDML.pl.



Подробнее о приложении MortgageCalculator



Подробнее о приложении MortgageCalculator

Когда пользователь запускает приложение MortgageCalculator, декаMortgageCalc.wml предлагает пользователю ввести значение основной суммы,ссудный процент и количество лет на выплату ссуды. Далее, приложение запускает сценарий языка Perl (файл MortgageCalcWML.pl). Дека MortgageCalc.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="MortgageCalc"&gt

&ltdo type="accept" label="Edit"&gt &ltnoop /&gt &lt/do&gt

&ltdo type="options" label="Calc"&gt &ltgo href="#CalcPayments" /&gt &lt/do&gt

&ltp align="center"&gt

Mortgage Calculator&ltbr/&gt

&lt/p&gt

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

&ltselect&gt

&ltoption onpick="#GetPrincipal"&gtPrincipal: $$$(Principal)&lt/option&gt &ltoption onpick="#GetInterest"&gtInterest(%): $(Interest)&lt/option&gt &ltoption onpick="#GetYears"&gtYears: $(Years)&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="GetPrincipal"&gt

&ltdo type="accept"&gt &ltgo href="#MortgageCalc" /&gt &lt/do&gt

&ltp align="left"&gt

Principal: $$ &ltinput name="Principal" maxlength="7" format="NNNNNN*N" /&gt

&lt/p&gt

&lt/card&gt

&ltcard id="GetInterest"&gt

&ltdo type="accept"&gt &ltgo href="#MortgageCalc" /&gt &lt/do&gt




&ltp align="left"&gt

Interest(%): &ltinput name="Interest" maxlength="5" format="NN.NN" /&gt

&lt/p&gt

&lt/card&gt

&ltcard id="GetYears"&gt

&ltdo type="accept"&gt &ltgo href="#MortgageCalc" /&gt &lt/do&gt

&ltp align="left"&gt

Years: &ltinput name="Years" maxlength="2" format="NN" /&gt

&lt/p&gt

&lt/card&gt

&ltcard id="CalcPayments"&gt

&ltonevent type="onenterforward"&gt

&ltgo method="post" href="../waplibcgi/MortgageCalcWML.pl"&gt &ltpostfield name="Principal" value="$(Principal)&"/&gt &ltpostfield name="Interest" value="$(Interest)&"/&gt &ltpostfield name="Years" value="$(Years)"/&gt &lt/go&gt

&lt/onevent&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 предназначено для телефона и не может быть измененокаким-либо промежуточным агентом.

Приложение использует индивидуальные карты в деке для основной суммы,ссудного процента и количества лет. Внутри основной карты деки находитсяэлемент <Select> для предоставления пользователю возможности выбрать элемент, который он хочет редактировать. Далее, внутри соответствующей карты,приложение использует элемент <lnput> для возможности ввода пользователемзначения. В элементе <Input> Д|9Л? f011!3* определяет формат данных, принимаемых приложением.

После ввода и подтверждения пользователем необходимых значений, приложение вызывает карту CalcPayment, из которой запускается сценарий языка PerlMortgageCalcWML.pl.


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



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

Как было сказано выше, после того как пользователь вводит всю необходимуюдля вычислений информацию в файле MortgageCalc.hdml, приложение пересылает данные сценарию MortgageCalcHDML.pl. Очевидно, что используемые для отображения информации по выплатам элементы аналогичны элементам сценария,описанного в этой главе выше. Исключение составляют только два момента: каксценарий определяет необходимые ему параметры и как он создает новую декуформата HDML для отображения результата работы приложения. Исходный кодсценария MortgageCalcHDML.pl приведен ниже:

#!/usr/bin/perl

read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});

@data = split(/&/, $Buffer);

$Principal = $data[0]; $Interest = $data[1]; $Years = $data[2];

$MonthInt = ($Interest / 12) / 100; $Months = $Years * 12;

$Payment = $Principal * ($MonthInt / (1 - (1 + $MonthInt) ** (-$Months))); $Payment = $Payment * 100; $Payment = (int $Payment) / 100;

$Deck = "Content-type: text/x-hdml

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

&ltDisplay Name=Result1&gt

&ltAction Type=Accept Label=Done Task=GO Dest=../MortgageCalc/MortgageCalc.hdml&gt

&ltLine&gtPrincipal: &dol;$Principal&ltbr&gt Interest(%): $Interest&ltbr&gt Years: $Years&ltbr&gt Payment: &dol;$Payment

&lt/Display&gt

&lt/HDML&gt";

print $Deck;





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



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

Как было сказано выше, каждый раз после ввода пользователем всей необходимой по закладной информации, карта CalcPayment активизирует сценарий языкаPerl, который вычисляет и отображает информацию по выплате. Этот сценарийMortgageCalcWML.pl имеет следующий исходный код:

#!/usr/bin/perl

require 'DeckUtils.pl';

%cgiVars = &AppUtils::ParseCGIVars();

$Principal = $cgiVars{"Principal"}; $Interest = $cgiVars{"Interest"}; $Years = $cgiVars{"Years"};

$MonthInt = ($Interest / 12) / 100; $Months = $Years * 12;

$Payment = $Principal * ($MonthInt / (1 - (1 + $MonthInt) ** (-$Months))); $Payment = $Payment * 100; $Payment = (int $Payment) / 100;

$Deck = "Content-type: text/vnd.wap.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=\"Result1\"&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../MortgageCalc /MortgageCalc.wml\" /&gt &lt/do&gt

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

Principal: \$\$$Principal&ltbr/&gt Interest(%): $Interest&ltbr/&gt Years: $Years&ltbr/&gt Payment: \$\$$Payment

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck;

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



Приглашение к вводуинформации по закладной



Рисунок 13.1. Приглашение к вводуинформации по закладной