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

         

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



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

Как и приложение, основанное на WML, Restaurant.hdml позволяет отображатьадрес и номер телефона, используя для этого портативное устройство пользователя. Кроме того, при желании, пользователь также может автоматически позвонить в ресторан. Приложение Restauranthdml реализуется с помощью следующего программного кода на HDML:

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

&ltChoice Name=GetRestType Key=RestType&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=$RestType Dest=../waplibcgi/RestCallTypeHDML.pl&gt

&ltCenter&gtRestaurants

&ltCE Value="American"&gtAmerican &ltCE Value="Chinese"&gtChinese &ltCE Value="FastFood"&gtFast Food &ltCE Value="HealthFood"&gtHealth Food &ltCE Value="Italian"&gtItalian &ltCE Value="Mexican"&gtMexican &ltCE Value="Seafood"&gtSeafood

&lt/Choice&gt

&lt/HDML&gt

Первый элемент в файле сообщает браузеру (или другим программистам) информацию о версии спецификации 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



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

&ltChoice Name=GetAmerican Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallAmerHDML.pl&gt




&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtAmerican&ltbr&gt

&ltCE Value=AllStar& gtAll Star Cafe &ltCE Value=MarysDiner&gtMary's Diner &ltCE Value=Timberline&gtTimberline Inn

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "Chinese")

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

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

&ltChoice Name=GetChinese Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallChineseHDML.pl&gt

&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtChinese&ltbr&gt

&ltCE Value=ChinaGarden&gtChina Garden &ltCE Value=GoldenDragon&gtGolden Dragon &ltCE Value=PlumTree&gtPlum Tree Inn

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "FastFood")

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

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

&ltChoice Name=GetFastFood Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallFastFoodHDML.pl&gt

&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtFast Food&ltbr&gt

&ltCE Value=BurgerKing&gtBurger King &ltCE Value=McDonalds&gtMcDonald's &ltCE Value=TopSpot&gtTop Spot

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "HealthFood")

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

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

&ltChoice Name=GetHealthFood Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallHealthFoodHDML.pl&gt



&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtHealth Food&ltbr&gt

&ltCE Value=GeneralNutrition& gtGeneral Nutrition &ltCE Value=HealthExpress&gtHealth Express &ltCE Value=LivingHealthy&gtLiving Healthy

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "Italian")

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

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

&ltChoice Name=GetItalian Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallItalianHDML.pl&gt

&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtItalian&ltbr&gt

&ltCE Value=Marios&gtMario's &ltCE Value=OliveGarden&gtOlive Garden &ltCE Value=PapaMurphys&gtPapa Murphy's

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "Mexican")

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

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

&ltChoice Name=GetMexican Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallMexicanHDML.pl&gt

&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtMexican&ltbr&gt

&ltCE Value=BajaFresh&gtBaja Fresh &ltCE Value=Guadalajara&gtGuadalajara Grill &ltCE Value=LaVilla&gtLa Villa

&lt/Choice&gt

&lt/HDML&gt";

}

elsif ($RestType eq "Seafood")

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

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

&ltChoice Name=GetSeafood Key=RestName&gt

&ltAction Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallSeafoodHDML.pl&gt



&ltAction Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtSeafood&ltbr&gt

&ltCE Value=KPSeafood&gtK & P Seafood &ltCE Value=FishCompany&gtLas Vegas Fish Company &ltCE Value=SevenSeas&gtSeven Seas

&lt/Choice&gt

&lt/HDML&gt";

}

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

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

&ltDisplay Name=KPSeafood&gt

&ltAction Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl&gt

&ltAction Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtSeafood&ltbr&gt &ltLine&gtK & P Seafood&ltbr&gt 111 Main Street&ltbr&gt Las Vegas, NV&ltbr&gt 702-555-1212

&lt/Display&gt

&lt/HDML&gt"; }

elsif ($RestName eq "FishCompany")

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

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

&ltDisplay Name=FishCompany&gt

&ltAction Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl&gt

&ltAction Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtSeafood&ltbr&gt &ltLine&gtLas Vegas Fish Company&ltbr&gt 222 East Sahara&ltbr&gt Las Vegas, NV&ltbr&gt 702-555-1212



&lt/Display&gt

&lt/HDML&gt"; }

elsif ($RestName eq "SevenSeas")

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

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

&ltDisplay Name=SevenSeas&gt

&ltAction Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl&gt

&ltAction Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212&gt

&ltCenter&gtRestaurants&ltbr&gt &ltCenter&gtSeafood&ltbr&gt &ltLine&gtSeven Seas&ltbr&gt 100 Water Street&ltbr&gt Las Vegas, NV&ltbr&gt 702-555-1212

&lt/Display&gt

&lt/HDML&gt"; }

print $Deck;

Элемент <Action> с параметром Task= Call определяет номер, который будетвызывать браузер, когда пользователь нажимает кнопку ввода (Accept), на которой может быть нанесено слово Call (Вызов) или, если телефон поддерживаетпиктограммы, изображение телефона.


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