Рассмотрение Реrl-сценария RealEstateWML.pl
Рассмотрение Реrl-сценария RealEstateWML.pl
После указания пользователем верхней и нижней границы цен в приложенииRealEstate, программа запускает Peri-сценарий для поиска домов, цены которыхпопадают в указанный диапазон. Чтобы выполнить данную обработку, Peri-сценарию уже заранее «известна» информация о некотором ограниченном числедомов (в реальном приложении сценарий получал бы необходимую информациюиз базы данных). Чтобы сравнить стоимость известных ему домов с ценовымдиапазоном, сценарий использует серию ветвлений if-else. Если цена на домпопадает в диапазон, сценарий добавляет дом в опции меню.
Perl-сценарий RealEstateWML.pl реализуется с помощью следующего программного кода:
#!/usr/bin/perl
require 'DeckUtils.pl';
%cgiVars = &AppUtils::ParseCGIVars();
$PriceLow = $cgiVars{"PriceLow"}; $PriceHigh = $cgiVars{"PriceHigh"};
$Price1 = 99500; $Price2 = 149995; $Price3 = 249995; $Price4 = 500000; $Price5 = 1500000;
if (($PriceLow <= 0) ($PriceHigh <= 0) ($PriceLow > $PriceHigh))
{ $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=\"Error\">
<do type=\"accept\" label=\"Back\"> <go href=\"../RealEstate/RealEstate.wml\" /> </do>
<p align=\"left\" mode=\"wrap\">
Error in price range. Please enter a minimum price and a maximum price.
</p>
</card>
</wml>";
}
else
{
$Option = "";
if (($Price1 >= $PriceLow) && ($Price1 <= $PriceHigh)) { $Option = $Option . "<option onpick=\"../RealEstate/GV01234.wml \">GV01234 \$\$99,500</option>"; }
if (($Price2 >= $PriceLow) && ($Price2 <= $PriceHigh)) { $Option = $Option . "<option onpick=\"../RealEstate/LV01234.wml \">LV01234 \$\$149,995</option>"; }
if (($Price3 >= $PriceLow) && ($Price3 <= $PriceHigh)) { $Option = $Option . "<option onpick=\"../RealEstate/LV77711.wml \">LV77711 \$\$249,995</option>"; }
if (($Price4 >= $PriceLow) && ($Price4 <= $PriceHigh)) { $Option = $Option . "<option onpick=\"../RealEstate /BC01234.wml\">BC01234 \$\$500,000</option>"; }
if (($Price5 >= $PriceLow) && ($Price5 <= $PriceHigh)) { $Option = $Option . "<option onpick=\"../RealEstate /LV11711.wml\">LV11711 \$\$1,500,000</option>"; }
if ($Option eq "")
{ $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=\"Error\">
<do type=\"accept\" label=\"Back\"> <go href=\"../RealEstate /RealEstate.wml\" /> </do>
<p align=\"left\" mode=\"wrap\">
No houses match the price range.
</p>
</card>
</wml>"; }
else
{ $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=\"Pick\">
<do type=\"accept\" label=\"View\"> <noop /> </do>
<do type=\"options\" label=\"Back\"> <go href=\"../RealEstate /RealEstate.wml\" /> </do>
<p align=\"left\" mode=\"nowrap\">
Pick a house<br/> ...MLS#....Price..
<select> " . $Option . " </select>
</p>
</card>
</wml>"; }
}
print $Deck;
Выполнение сценария начинается с анализа параметров, передаваемых ему WML-страницей Real Estate.wml. Далее, сценарий присваивает переменным, начиная с$Pricel до $Price5, значения в долларовом выражении. Пять переменныхсоответствуют ценам на пять домов, известных сценарию. Затем сценарийиспользует оператор if, чтобы определить введены пользователем минимальнаяи максимальная цены или нет; если это не сделано, сценарий выводит на экрансообщение об ошибке.
Если же пользователь указал ценовой диапазон, программа сравнивает цену каждого из пяти домов с максимальной и минимальной допустимой ценой. Если ценана дом попадает в указанный диапазон, сценарий добавляет информацию о доме(такую, как списочный номер, цена и соответствующий WML-файл) в переменную$0ption. Далее, когда сценарий обработает данные всех пяти домов, будет создансписок домов с желаемой ценой путем размещения переменной $Option внутриэлемента <select>.
Когда позже пользователь выбирает из списка какой-либо дом, приложение загружает соответствующую WML-страницу. Например, WML-страница LV77711.wmlреализуется с помощью следующего программного кода:
Как можно видеть, WML-страница содержит две карты. Когда WML-страница загружает первую карту, приложение выполняет элементы карты House. При выборе пользователем опции More information (Дополнительные данные), приложениезагружает карту Morelnfо.