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

         

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



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




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



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




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



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




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




Рассмотрение 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, который выводит на экран приглашение пользователю на ввод регистрационных данных.