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

         

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



ГЛАВА 18


Рассмотрение приложения YellowPages
Рассмотрение Peri-сценария YellowPagesWML.pl
Рассмотрение приложения YellowPages.hdml
Рассмотрение Peri-сценария YellowPagesHDML.pl

Сегодня поиск нужного коммерческого предприятия осуществляется, как правило, двумя путями: листая желтые страницы потрепанного телефонного справочника (удел тех, кто не замечает тенденций компьютерного века) или используяпоисковую систему, установленную на личном компьютере. В данной главе выузнаете, как создать приложение Yellow/Pages, предоставляющее пользователямвозможность поиска конкретной компании в конкретном городе. При запускеприложения выводится приглашение пользователю на ввод названия компанииили профиля ее деятельности, как показано на Рис. 18.1. После указания пользователем вида деятельности компании, приложение выводит приглашение дляввода почтового кода (zip) компании, города и штата или, если компания представлена в Интернете, ее Web-адреса, как показано на Рис. 18.2. После ввода дополнительных данных приложение отображает на экране компании, отвечающие условиям поиска, как показано на Рис. 18.3. Если среди выведенных данныхимеется номер телефона, пользователь может прокрутить экран, чтобы выбратьномер телефона и нажать кнопку вызова (Call), после чего приложение автоматически наберет телефонный номер компании. Если пользователь нажмет на сотовом телефоне кнопку Next (Далее), приложение выведет на экран другие компании, отвечающие условиям поиска.



Если вы еще не установили пакет инструментального программного обеспечения (SDK) для разработки WAP-приложений, аналогичный SDK, который вы можете загрузить с Web-cauma www.openwave.com, то проверить работу приложения YellowPages можно с помощью сотовоготелефона с WAP-функциями, набрав в качествеURL waplib.com/YellowPages/YellowPages.hdml илиwaplib.com/YellowPages/YellowPages.wm, в зависимости оттого, какой язык, HDML или WML, поддерживает ваш телефонный браузер.






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





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


После того как пользователь указывает данные о компании в приложенииYellowPages, программа запускает Peri-сценарий для поиска и нахождения компаний, отвечающих введенным требованиям. В реальном приложении сценарийвзаимодействовал бы с базой данных для получения компаний, данные которыхсоответствуют условиям поиска. Затем сценарий создавал бы WML-карты, обеспечивающие отображение на экране результатов поиска в удобном виде. Следующий сценарий, YellowPagesWML.pl, формирует одни и те же результаты поиска, независимо от данных запроса (из-за отсутствия доступной базы данных с адресами компаний). Тем не менее, вы должны отметить для себя, что сценарийсоздает карты, которые для обеспечения возможности автоматического звонка вкомпанию, отображаемую на экране сотового телефона пользователя, используют функции интерфейса приложений для беспроводной телефонной связи(WTAI - Wireless Telephony Application Interface). Кроме того, при просмотре информации по нескольким компаниям приложение может выполнять циклические перемещения, во многом напоминающие навигацию по списку с гиперсвязями. Peri-сценарий YellowPagesWML.pl реализуется с помощью следующего программного кода:
#!/usr/bin/perl


require 'DeckUtils.pl';
%cgiVars = &AppUtils::ParseCGIVars(); $BizName = $cgiVars{"BizName"}; $ZipCode = $cgiVars{"ZipCode"}; $CityName = $cgiVars{"CityName"}; $StateName = $cgiVars{"StateName"}; $Online = $cgiVars{"Online"};
#Do processing here...
$Deck = "Content-type: text/vnd.wap.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=\"Result1\">
<do type=\"accept\" label=\"Next\"> <go href=\"#Result2\" /> </do>
<p align=\"left\" mode=\"nowrap\">
Bridget's Boutique<br/> 1234 Main Street<br/> Cedar City, UT<br/> <a href=\"wtai://wp/mc;14355551212\" title=\"Call\">1-435-555-1212</a>
</p>
</card>
<card id=\"Result2\">
<do type=\"accept\" label=\"Next\"> <go href=\"#Last\" /> </do>
<p align=\"left\" mode=\"nowrap\">
Abigail's Antiques<br/> 1234 Main Street<br/> Cedar City, UT<br/> <a href=\"wtai://wp/mc;14355551212\" title=\"Call\">1-435-555-1212</a>
</p>
</card>
<card id=\"Last\">
<do type=\"accept\" label=\"Done\"> <go href=\"http://waplib.com/YellowPages /YellowPages.wml\" /> </do>
<p align=\"left\" mode=\"wrap\">
For purposes of this example all lookups return the same results.
</p>
</card>
</wml>";
print $Deck;


Работа сценария начинается с анализа параметров, передаваемых ему WML-страницей YellowPages.wml. Далее, строка Do processing here (Выполнять обработку здесь) соответствует месту, где сценарий в обычных условиях взаимодействовал бы с программой базы данных.


Затем сценарий создает три WML-карты с именами Resultl (Результат!), Result2и Last (Последняя). Приложение вначале выводит на экран карту Resultl, отображающую экранную кнопку Next (Далее). Если пользователь выберет кнопкуNext (Далее), приложение загрузит карту Result2. Карта Result2 также отображает кнопку Next (Далее), которая предоставляет связь с картой Last. Если вывыберете карту Last, то обнаружите, что она отображает кнопку Done (Выполнено), возвращающую пользователя обратно в начало приложения YellowPages.


Внутри каждой карты приложения присутствует элемент анкера <а>, которыйобеспечивает возможность автоматической связи с компанией по сотовому телефону:


Код wp определяет, что функция находится в общей библиотеке, а код тс представляет собой имя выполняемой функции (make call - вызов по телефону).





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





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


Как и в случае приложения на WML, сценарий YellowPagesHDML.pl не взаимодействует с базой данных, содержащей названия компаний. Не имея такой возможности, сценарий создает данные по ряду компаний, названия которых пользователь может прокручивать на экране. Так же, как и в случае приложения на WML,пользователь может выделять номер телефона компании и автоматически набирать номер. Peri-сценарий YellowPagesHDML.pl реализуется с помощью следующего программного кода:
#!/usr/bin/perl
read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});
@data = split(/&/, $Buffer);
$BizName = $data[0]; $ZipCode = $data[1]; $CityName = $data[2]; $StateName = $data[3]; $Online = $data[4];
#Do processing here...
$Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=Results1>
<Action Type=Accept Task=GO Dest=#Results2 Label=Next> <Action Type=Soft1 Label=Call Task=Call Number=1-435-555-1212> <Line>Bridget's Boutique<br> 1234 Main Street<br> Cedar City, UT<br> 1-435-555-1212
</Display>
<Display Name=Results2>
<Action Type=Accept Task=GO Dest=#Last Label=Next> <Action Type=Soft1 Label=Call Task=Call Number=1-435-555-1212> <Line>Abigail's Antiques<br> 1234 Main Street<br> Cedar City, UT<br> 1-435-555-1212
</Display>
<Display Name=Last>
<Action Type=Accept Task=GO Label=Done Dest=http://waplib.com/YellowPages/YellowPages.hdml Vars=BizName=&ZipCode=&CityName=&StateName=&Online=>
For purposes of this example all lookups return the same results.
</Display>
</HDML>";
print $Deck;


Сценарий создает три информационных модуля Resultl (Результат!), Result2 иLast (Последний). Если вы рассмотрите элемент <Action>, присутствующийвнутри каждого информационного модуля, то обнаружите метку Next (Далее), спомощью которой выполняется передача управления на последующую карту.Внутри информационного модуля Last вы обнаружите метку Done (Выполнено),которая служит для повторной загрузки приложения YellowPages.





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





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


При запуске приложения YellowPages WML-страница YellowPages.wml выводит наэкран приглашение пользователю на ввод названия компании или рода ее деятельности. Затем пользователю предоставляется возможность указать почтовыйкод (zip), город, штат или электронный адрес. После ввода всех данных, необходимых для поиска, приложение запускает Peri-сценарий, который обрабатываетвведенную информацию. WML-страница YellowPages.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>
<onevent type="onenterforward">
<refresh>
<setvar name="BizName" value="" /> <setvar name="Online" value="True" />
</refresh>
</onevent>
<onevent type="onenterbackward">
<refresh>
<setvar name="Online" value="True" />
</refresh>
</onevent>
<p align="center">
Yellow Pages<br/>
</p>
<p align="left">
Search for:<br/> (Name or type) <input name="BizName" maxlength="15" />
</p>
<p align="left">
Location:<br/>
<select> <option onpick="#ZipCode">Zip Code</option> <option onpick="#CityState">City /State</option> <option onpick="#GetInfo">Online< /option> </select>
</p>
</card>
<card id="ZipCode">
<onevent type="onenterforward">
<refresh>
<setvar name="ZipCode" value="" /> <setvar name="CityName" value="" /> <setvar name="StateName" value="" /> <setvar name="Online" value="" />
</refresh>
</onevent>
<onevent type="onenterbackward">
<refresh>
<setvar name="ZipCode" value="" /> <setvar name="CityName" value="" /> <setvar name="StateName" value="" /> <setvar name="Online" value="" />
</refresh>
</onevent>
<do type="accept"> <go href="#GetInfo" /> </do>
<p align="left">
Enter Zip Code: <input name="ZipCode" maxlength="5" format="NNNNN" />
</p>
</card>
<card id="CityState">
<onevent type="onenterforward">
<refresh>
<setvar name="ZipCode" value="" /> <setvar name="CityName" value="" /> <setvar name="StateName" value="" /> <setvar name="Online" value="" />
</refresh>
</onevent>
<onevent type="onenterbackward">
<refresh>
<setvar name="ZipCode" value="" /> <setvar name="CityName" value="" /> <setvar name="StateName" value="" /> <setvar name="Online" value="" />
</refresh>
</onevent>
<do type="accept"> <go href="#GetInfo" /> </do>
<p align="left">
Enter City: <input name="CityName" maxlength="15" format="*M" /><br/> Enter State: <input name="StateName" maxlength="2" format="AA" />
</p>
</card>
<card id="GetInfo">
<do type="accept" label="Find">
<go method="post" href="../waplibcgi/YellowPagesWML.pl"> <postfield name="BizName" value="$(BizName)&"/> <postfield name="ZipCode" value="$(ZipCode)&"/> <postfield name="CityName" value="$(CityName)&"/> <postfield name="StateName" value="$(StateName)&"/> <postfield name="Online" value="$(Online)"/> </go>
</do>
<p align="left" mode="nowrap">
Search for:<br/> Business: $(BizName)<br/> Zip Code: $(ZipCode)<br/> City/St: $(CityName)$(StateName)<br/> OnLine: $(Online)
</p>
</card>
</wml>


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


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


Если взглянуть на элементы WML-страницы, то можно обнаружить элемент<input>, который формирует приглашение пользователю на ввод наименованиякомпании. После ввода пользователем наименования компании приложение использует элемент <select> для отображения приглашения на ввод почтового кода (zip), города и штата или электронного адреса. На основе сделанного пользователем выбора выполняется ветвление программного кода и переход на локальную карту, использующую элемент <input> для приема соответствующих данных.Наконец, после ввода всех данных выполняется ветвление программного кода ипереход на карту Getinfo, которая запускает Peri-сценарий YellowPagesWML.pl,чтобы обработать введенную информацию.





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





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


Как и приложение на WML, YellowPages.hdml предоставляет пользователювозможности поиска компании по названию, городу и штату, почтовому коду (zip)или электронному адресу. Для выполнения большей части обработки приложение использует Peri-сценарий. Приложение YellowPages.hdml реализуется с помощью следующего программного кода на HDML:
<HDML Version=3.0 Markable=True TTL=0>
<Entry Name=Start Format=15M Key=BizName Default="">
<Action Type=Accept Task=GO Dest=#GetSearch>
<Center>Yellow Pages <br><br>Search for: <br>(Name or type)
</Entry>
<Choice Name=GetSearch Method=Alpha>
Location:
<CE Task=GO Dest=#ZipCode>Zip Code <CE Task=GO Dest=#City>City/State <CE Task=GO Dest=#GetInfo Vars=ZipCode=&CityName=&StateName=&Online=True>Online
</Choice>
<Entry Name=ZipCode Format=NNNNN Key=ZipCode Default="">
<Action Type=Accept Task=GO Dest=#GetInfo Vars=CityName=&StateName=&Online=> Enter Zip Code:
</Entry>
<Entry Name=City Format=15M Key=CityName Default="">
<Action Type=Accept Task=GO Dest=#State Vars=ZipCode=&Online=> Enter City:
</Entry>
<Entry Name=State Format=AA Key=StateName Default="">
<Action Type=Accept Task=GO Dest=#GetInfo> Enter State:
</Entry>
<Display Name=GetInfo>
<Action Type=Accept Task=GO Label=Find Method=Post PostData=$(BizName:noesc)&$(ZipCode)&$ (CityName:noesc)&$(StateName)&$(Online) Dest=../waplibcgi/YellowPagesHDML.pl>
Search for:<br> Business: $BizName<br> Zip Code: $ZipCode<br> City/St: $CityName$StateName<br> Online: $Online
</Display>
</HDML>

Первый элемент в файле сообщает браузеру (или другим программистам) информацию о версии спецификации HDML, поддерживаемой приложением. Крометого, параметр Markable=True определяет, что браузер может устанавливать наHDML-странице закладку, а параметр TTL=0 предписывает браузеру не выполнятькэширование HDML-страницы.
Приложение начинается с элемента <Entry>, обеспечивающего отображениеприглашения пользователю на ввод наименования компании. Затем приложениеиспользует элемент <Choice>, который, при наличии у пользователя желания,позволяет вести поиск по почтовому коду (zip), городу и штату или по электронному адресу. На основе введенной информации выполняется ветвление программного кода и переход на именованный элемент <Entry>, отображающийприглашение пользователю на ввод соответствующих данных. После того какпользователь введет необходимую информацию, выполняется ветвление программного кода приложения и переход на элемент Getlnfo, который, в своюочередь, запускает Peri-сценарий YellowPagesHDML.pl, чтобы обработать данные,введенные пользователем.



Приглашение для ввода названия компании или профиля ее деятельности



Рис.. 18.1. Приглашение для ввода названия компании или профиля ее деятельности





Приглашение для ввода местонахождения компании



Рис.. 18.2. Приглашение для ввода местонахождения компании





Отображение на экране списка компаний отвечающих условиям поиска



Рис.. 18.3. Отображение на экране списка компаний отвечающих условиям поиска