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

         

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



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

Как и приложение, основанное на WML, Restaurant.hdml позволяет отображатьадрес и номер телефона, используя для этого портативное устройство пользователя. Кроме того, при желании, пользователь также может автоматически позвонить в ресторан. Приложение Restauranthdml реализуется с помощью следующего программного кода на HDML: <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetRestType Key=RestType> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=$RestType Dest=../waplibcgi/RestCallTypeHDML.pl> <Center>Restaurants <CE Value="American">American <CE Value="Chinese">Chinese <CE Value="FastFood">Fast Food <CE Value="HealthFood">Health Food <CE Value="Italian">Italian <CE Value="Mexican">Mexican <CE Value="Seafood">Seafood </Choice> </HDML>
Первый элемент в файле сообщает браузеру (или другим программистам) информацию о версии спецификации HDML, поддерживаемой приложением. Крометого, параметр Markable=True определяет, что браузер может устанавливать наHDML-странице закладку (Bookmark), а параметр TTL=0 предписывает браузеру невыполнять кэширование HDML-страницы. Для предоставления пользователювозможности указывать тип предпочитаемой кухни приложение использует элемент <Choice>. Затем приложение запускает Peri-сценарий RestCallTypeHDML.pl,чтобы отобразить на экране список названий ресторанов, из которых пользователь может сделать свой выбор. Peri-сценарий RestCallTypeHDML.pl реализуется спомощью следующего программного кода: #!/usr/bin/perl read (STDIN, $RestType, $ENV{'CONTENT_LENGTH'}); if ($RestType eq "American") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetAmerican Key=RestName>

<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallAmerHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>American<br> <CE Value=AllStar>All Star Cafe <CE Value=MarysDiner>Mary's Diner <CE Value=Timberline>Timberline Inn </Choice> </HDML>"; } elsif ($RestType eq "Chinese") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetChinese Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallChineseHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Chinese<br> <CE Value=ChinaGarden>China Garden <CE Value=GoldenDragon>Golden Dragon <CE Value=PlumTree>Plum Tree Inn </Choice> </HDML>"; } elsif ($RestType eq "FastFood") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetFastFood Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallFastFoodHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Fast Food<br> <CE Value=BurgerKing>Burger King <CE Value=McDonalds>McDonald's <CE Value=TopSpot>Top Spot </Choice> </HDML>"; } elsif ($RestType eq "HealthFood") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetHealthFood Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallHealthFoodHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Health Food<br> <CE Value=GeneralNutrition>General Nutrition <CE Value=HealthExpress>Health Express <CE Value=LivingHealthy>Living Healthy </Choice> </HDML>"; } elsif ($RestType eq "Italian") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetItalian Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallItalianHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Italian<br> <CE Value=Marios>Mario's <CE Value=OliveGarden>Olive Garden <CE Value=PapaMurphys>Papa Murphy's </Choice> </HDML>"; } elsif ($RestType eq "Mexican") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetMexican Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallMexicanHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Mexican<br> <CE Value=BajaFresh>Baja Fresh <CE Value=Guadalajara>Guadalajara Grill <CE Value=LaVilla>La Villa </Choice> </HDML>"; } elsif ($RestType eq "Seafood") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Choice Name=GetSeafood Key=RestName> <Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallSeafoodHDML.pl> <Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml> <Center>Restaurants<br> <Center>Seafood<br> <CE Value=KPSeafood>K & P Seafood <CE Value=FishCompany>Las Vegas Fish Company <CE Value=SevenSeas>Seven Seas </Choice> </HDML>"; } print $Deck;
Сценарий анализирует параметр, после этого присваивает тип ресторана переменной $RestType. Далее программа использует серию ветвлений if-else дляопределения выбранного типа ресторана, в этом месте программного кода сценарий создает HDML-страницу, отображаемую браузером в виде списка соответствующих ресторанов. После выбора пользователем некоторого конкретного ресторана вновь созданная HDML-страница запускает соответствующий типу кухниPeri-сценарий, подобный RestCallSeafoodHDML.pl, приводимому здесь: #!/usr/bin/perl read (STDIN, $RestName, $ENV{'CONTENT_LENGTH'}); if ($RestName eq "KPSeafood") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Display Name=KPSeafood> <Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl> <Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212> <Center>Restaurants<br> <Center>Seafood<br> <Line>K & P Seafood<br> 111 Main Street<br> Las Vegas, NV<br> 702-555-1212 </Display> </HDML>"; } elsif ($RestName eq "FishCompany") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Display Name=FishCompany> <Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl> <Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212> <Center>Restaurants<br> <Center>Seafood<br> <Line>Las Vegas Fish Company<br> 222 East Sahara<br> Las Vegas, NV<br> 702-555-1212 </Display> </HDML>"; } elsif ($RestName eq "SevenSeas") { $Deck = "Content-type: text/x-hdml <HDML Version=3.0 Markable=True TTL=0> <Display Name=SevenSeas> <Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl> <Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212> <Center>Restaurants<br> <Center>Seafood<br> <Line>Seven Seas<br> 100 Water Street<br> Las Vegas, NV<br> 702-555-1212 </Display> </HDML>"; } print $Deck;
Элемент <Action> с параметром Task=Call определяет номер, который будетвызывать браузер, когда пользователь нажимает кнопку ввода (Accept), на которой может быть нанесено слово Call (Вызов) или, если телефон поддерживаетпиктограммы, изображение телефона.



Содержание раздела