Рассмотрение Ре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о.