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

          

Отображение информациио свободных номерах



Рисунок 17.4. Отображение информациио свободных номерах

Рассмотрение приложения Hotel Info



Приглашение пользователю на ввод данных для регистрации в гостинице



Рисунок 17.3. Приглашение пользователю на ввод данных для регистрации в гостинице

Рассмотрение приложения Hotel Info



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



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

Рассмотрение приложения Hotel Info



Рисунок 17.2. Приглашение пользователю сделать выбор из списка гостиниц

Рассмотрение приложения Hotel Info



Рассмотрение Peri-сценария HotelAvailHDML.pl



Рассмотрение Peri-сценария HotelAvailHDML.pl

После выбора пользователем гостиницы программный код приложения Hotellnfoзапускает сценарий HotelAvailHDML.pl, формирующий на экране приглашениепользователю на ввод регистрационных данных, таких, как число постояльцев,дата заселения и дата выселения. Как и в случае WML-приложения, которое моглобы быть написано с использованием только WML, так и HDML-приложение можнобыло бы запрограммировать, воспользовавшись только HDML. Peri-сценарийHotelAvailHDML.pl реализуется с помощью следующего программного кода:

#!/usr/bin/perl

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

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

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

&ltChoice Name=Avail&gt

&ltAction Type=Accept Label=Edit&gt &ltAction Type=Soft1 Label=Check Task=GO Method=Post PostData=\$HotelCode&\$(CheckInDate:noesc)& \$(CheckOutDate:noesc)&\$NumGuests Dest=CheckAvailHDML.pl&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gt$HotelCode

&ltCE Task=GOSub Dest=#GetCheckIn Vars=CheckInDate=\$CheckInDate Receive=CheckInDate&gt Check In (mm/dd/yy): \$CheckInDate

&ltCE Task=GOSub Dest=#GetCheckOut Vars=CheckOutDate=\$CheckOutDate Receive=CheckOutDate&gt Check Out (mm/dd/yy): \$CheckOutDate

&ltCE Task=GOSub Dest=#GetNumber Vars=NumGuests=\$NumGuests Receive=NumGuests&gt Number of guests: \$NumGuests

&lt/Choice&gt

&ltEntry Name=GetCheckIn Default=\$CheckInDate Key=CheckInDate Format=NN/NN/NN&gt

&ltAction Type=Accept Task=Return RetVals=\$CheckInDate&gt Check In:

&lt/Entry&gt

&ltEntry Name=GetCheckOut Default=\$CheckOutDate Key=CheckOutDate Format=NN/NN/NN&gt

&ltAction Type=Accept Task=Return RetVals=\$CheckOutDate&gt Check Out:

&lt/Entry&gt

&ltEntry Name=GetNumber Default=\$NumGuests Key=NumGuests Format=N*N&gt

&ltAction Type=Accept Task=Return RetVals=\$NumGuests&gt Number of guests:

&lt/Entry&gt

&lt/HDML&gt";

print $Deck;

Как можно видеть, сценарий просто создает HDML-карту, которая принимает регистрационные данные пользователя. Внутри программного кода карты используется элемент <Choice>, обеспечивающий возможность указания пункта регистрационных данных, нуждающегося в редактировании. Затем, основываясь на выборе пользователя, выполняется ветвление программного кода и переход на элемент <Entry>, обеспечивающий отображение приглашения пользователю наввод фактических данных. Поле Format, присутствующее внутри каждого элемента <Entry>, определяет формат соответствующих данных. Наконец, послеввода пользователем данных, приложение вызывает сценарий CheckAvailHDML.pl,который подобно своему WML-аналогу является достаточно простым и выводитна экран одну и ту же информацию, независимо от выбранной гостиницы и введенных регистрационных данных.





Рассмотрение Perl-сиенария HotelAvailWML.pl



Рассмотрение Perl-сиенария HotelAvailWML.pl

После того как пользователь выберет гостиницу, программный код приложенияHotellnfo запускает Peri-сценарий, создающий WML-страницу, которая выводитприглашение пользователю на ввод регистрационных данных. Для приема данной информации приложение могло бы использовать или WML-страницу, илиPeri-сценарий; однако, чтобы облегчить проверку вводимой пользователем информации, предпочтение отдается Peri-сценарию. Peri-сценарий HotelAvailWML.plреализуется с помощью следующего программного кода:

#!/usr/bin/perl

$HotelCode = $ENV{'QUERY_STRING'};

$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=\"Avail\"&gt

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

&ltdo type=\"options\" label=\"Check\"&gt &ltgo method=\"post\" href=\"CheckAvailWML.pl\"&gt &ltpostfield name=\"HotelCode\" value=\" \$(HotelCode)&\"/&gt &ltpostfield name=\"CheckInDate\" value=\" \$(CheckInDate:noesc)&\"/&gt &ltpostfield name=\"CheckOutDate\" value=\" \$(CheckOutDate:noesc)&\"/&gt &ltpostfield name=\"NumGuests\" value=\" \$(NumGuests)\"/&gt &lt/go&gt &lt/do&gt

&ltp align=\"center\"&gt

Web Inns&ltbr/&gt $HotelCode

&lt/p&gt

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

&ltselect&gt

&ltoption onpick=\"#GetCheckIn\"&gtCheck In (mm/dd/yy): \$(CheckInDate)&lt/option&gt &ltoption onpick=\"#GetCheckOut\"&gtCheck Out (mm/dd/yy): \$(CheckOutDate)&lt/option&gt &ltoption onpick=\"#GetNumber\"&gtNumber of guests: \$(NumGuests)&lt/option&gt



&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id=\"GetCheckIn\"&gt

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

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

Check in: &ltinput name=\"CheckInDate\" maxlength=\"8\" format=\"NN/NN/NN\" /&gt

&lt/p&gt

&lt/card&gt

&ltcard id=\"GetCheckOut\"&gt

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

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

Check out: &ltinput name=\"CheckOutDate\" maxlength=\"8\" format=\"NN/NN/NN\" /&gt

&lt/p&gt

&lt/card&gt

&ltcard id=\"GetNumber\"&gt

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

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

Number of guests: &ltinput name=\"NumGuests\" maxlength=\"2\" format=\"N*N\" /&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck;

Сценарий создает карту, содержащую элемент <select>, который обеспечиваетвозможность выбора для редактирования числа постояльцев, даты заселения илидаты выселения. В зависимости от сделанного пользователем выбора выполняется ветвление программного кода и переход на локальную карту, содержащую элемент <input>, который выводит приглашение пользователю на ввод данных. Поле format, присутствующее внутри каждого элемента <input>, определяет формат данных, воспринимаемых приложением. После ввода пользователем требуемых данных приложение вызывает Peri-сценарий CheckAvailWML.pl, отображающий на экране обобщенную информацию по свободным номерам.

В реальном приложении сценарий CheckAvailWML.pl взаимодействовал бы с базой данных, чтобы определить наличие свободных номеров.Затем сценарийсортировал бы свободные номера по типу гостиницы и предоставлял бы пользователю возможность зарезервировать номер из выводимого списка. Для простоты сценарий, запускаемый приложением Hotellnfo, отображает один и тот же список гостиничных номеров, независимо от выбранной гостиницы или введенныхрегистрационных данных.

Рассмотрение приложения Hotel Info



Рассмотрение приложения Hotel Info

При запуске приложения Hotellnfo WML-страница Hotellnfo.wml отображает списокгородов и выводит приглашение пользователю на выбор требуемого города. После выбора пользователем города выполняется ветвление программного кода ивыводится приглашение на выбор в городе определенной гостиницы. WML-страница Hotellnfo.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="Hotel"&gt

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

&ltp align="center"&gt

Web Inns&ltbr/&gt

&lt/p&gt

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

&ltselect&gt

&ltoption onpick="#LasVegas"&gtLas Vegas&lt/option&gt &ltoption onpick="#LosAngeles"&gtLos Angeles&lt/option&gt &ltoption onpick="#Orlando"&gtOrlando&lt /option&gt &ltoption onpick="#SanFrancisco"&gtSan Francisco&lt/option&gt &ltoption onpick="#WashingtonDC"&gtWashington DC&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="LasVegas"&gt

&ltdo type="accept" label="Pick"&gt &ltgo href="../waplibcgi/HotelAvailWML.pl ?$(HotelCode)" /&gt &lt/do&gt

&ltdo type="prev" label="City"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Web Inns&ltbr/&gt Las Vegas

&lt/p&gt

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




&ltselect name="HotelCode"&gt

&ltoption value="LVAirport"&gtAirport&lt/option&gt &ltoption value="LVNorth"&gtNorth&lt/option&gt &ltoption value="LVSouth"&gtSouth&lt/option&gt &ltoption value="LVCenter"&gtCity Center&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="LosAngeles"&gt

&ltdo type="accept" label="Pick"&gt &ltgo href="../waplibcgi/HotelAvailWML.pl ?$(HotelCode)" /&gt &lt/do&gt

&ltdo type="prev" label="City"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Web Inns&ltbr/& gt Los Angeles

&lt/p&gt

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

&ltselect name="HotelCode"&gt

&ltoption value="LAAirport"&gtAirport&lt/option&gt &ltoption value="LANorth"&gtNorth&lt/option&gt &ltoption value="LASouth"&gtSouth&lt/option&gt &ltoption value="LACenter"&gtCity Center&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="Orlando"&gt

&ltdo type="accept" label="Pick"&gt &ltgo href="../waplibcgi/HotelAvailWML.pl ?$(HotelCode)" /&gt &lt/do&gt

&ltdo type="prev" label="City"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Web Inns&ltbr/&gt Orlando

&lt/p&gt

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

&ltselect name="HotelCode"&gt

&ltoption value="ORAirport"&gtAirport&lt/option&gt &ltoption value="ORNorth"&gtNorth&lt/option&gt &ltoption value="ORSouth"&gtSouth&lt/option&gt &ltoption value="ORCenter"&gtCity Center&lt/option&gt



&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="SanFrancisco"&gt

&ltdo type="accept" label="Pick"&gt &ltgo href="../waplibcgi/HotelAvailWML.pl ?$(HotelCode)" /&gt &lt/do&gt

&ltdo type="prev" label="City"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Web Inns&ltbr/&gt San Francisco

&lt/p&gt

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

&ltselect name="HotelCode"&gt

&ltoption value="SFAirport"&gtAirport&lt/option&gt &ltoption value="SFNorth"&gtNorth&lt/option&gt &ltoption value="SFSouth"&gtSouth&lt/option&gt &ltoption value="SFCenter"&gtCity Center&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="WashingtonDC"&gt

&ltdo type="accept" label="Pick"&gt &ltgo href="../waplibcgi/HotelAvailWML.pl ?$(HotelCode)" /&gt &lt/do&gt

&ltdo type="prev" label="City"&gt &ltprev /&gt &lt/do&gt

&ltp align="center"&gt

Web Inns&ltbr/&gt Washington, DC

&lt/p&gt

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

&ltselect name="HotelCode"&gt

&ltoption value="DCAirport"&gtAirport&lt/option&gt &ltoption value="DCNorth"&gtNorth&lt/option&gt &ltoption value="DCSouth"&gtSouth&lt/option&gt &ltoption value="DCCenter"&gtCity Center&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

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


Любая WML-страница, размещаемаяпосле информации о версии, начинается с тега <имя>. В конце каждой WML- страницы должен находиться соответствующий тег </WML>, который завершаетэлементы WML-страницы. Теги <НЕAD> и </HEAD>, располагающиеся после тега<WML>, позволяют указывать данные о WML-странице, включая метаданные и информацию, управляющую доступом. <oto\>

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

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


Рассмотрение приложения HotelInfo.hdml



Рассмотрение приложения HotelInfo.hdml

Как и приложение на основе WML, Hotellnfo.hdml предоставляет пользователювозможность выбирать гостиницу и затем вводить регистрационные данные.Приложение Hotellnfo.hdml реализуется с помощью следующего программного

кода на HDML:

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

&ltChoice Name=Hotel&gt

&ltAction Type=Accept Label=Pick&gt

&ltCenter&gtWeb Inns&ltbr&gt

&ltCE Task=GO Dest=#LasVegas&gtLas Vegas &ltCE Task=GO Dest=#LosAngeles&gtLos Angeles &ltCE Task=GO Dest=#Orlando&gtOrlando &ltCE Task=GO Dest=#SanFrancisco&gtSan Francisco &ltCE Task=GO Dest=#WashingtonDC&gtWashington DC

&lt/Choice&gt

&ltChoice Name=LasVegas Key=HotelCode&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$(HotelCode) Dest=../waplibcgi/HotelAvailHDML.pl&gt

&ltAction Type=Prev Label=City&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gtLas Vegas

&ltCE Value="LVAirport"&gtAirport &ltCE Value="LVNorth"&gtNorth &ltCE Value="LVSouth"&gtSouth &ltCE Value="LVCenter"&gtCity Center

&lt/Choice&gt

&ltChoice Name=LosAngeles Key=HotelCode&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$(HotelCode) Dest=../waplibcgi/HotelAvailHDML.pl&gt

&ltAction Type=Prev Label=City&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gtLos Angeles

&ltCE Value="LAAirport"&gtAirport &ltCE Value="LANorth"&gtNorth &ltCE Value="LASouth"&gtSouth &ltCE Value="LACenter"&gtCity Center

&lt/Choice&gt

&ltChoice Name=Orlando Key=HotelCode&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$(HotelCode) Dest=../waplibcgi/HotelAvailHDML.pl&gt

&ltAction Type=Prev Label=City&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gtOrlando




&ltCE Value="ORAirport"&gtAirport &ltCE Value="ORNorth"&gtNorth &ltCE Value="ORSouth"&gtSouth &ltCE Value="ORCenter"&gtCity Center

&lt/Choice&gt

&ltChoice Name=SanFrancisco Key=HotelCode&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$(HotelCode) Dest=../waplibcgi/HotelAvailHDML.pl&gt

&ltAction Type=Prev Label=City&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gtSan Francisco

&ltCE Value="SFAirport"&gtAirport &ltCE Value="SFNorth"&gtNorth &ltCE Value="SFSouth"&gtSouth &ltCE Value="SFCenter"&gtCity Center

&lt/Choice&gt

&ltChoice Name=WashingtonDC Key=HotelCode&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$(HotelCode) Dest=../waplibcgi/HotelAvailHDML.pl&gt

&ltAction Type=Prev Label=City&gt

&ltCenter&gtWeb Inns&ltbr&gt &ltCenter&gtWashington, DC

&ltCE Value="DCAirport"&gtAirport &ltCE Value="DCNorth"&gtNorth &ltCE Value="DCSouth"&gtSouth &ltCE Value="DCCenter"&gtCity Center

&lt/Choice&gt

&lt/HDML&gt

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

города приложение использует элемент <Choice>. На основе сделанного пользователем выбора выполняется ветвление программного кода и переход на второйэлемент <Choice>, обеспечивающий возможность выбора гостиницы. После тогокак пользователь указывает конкретную гостиницу, приложение запускает Peri-сценарий HotelAvailHDML.pl, который выводит на экран приглашение пользователю на ввод регистрационных данных.