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

         

Рассмотрение Ре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 &lt= 0) ($PriceHigh &lt= 0) ($PriceLow &gt $PriceHigh))

{ $Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt



&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard id=\"Error\"&gt

&ltdo type=\"accept\" label=\"Back\"&gt &ltgo href=\"../RealEstate/RealEstate.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

Error in price range. Please enter a minimum price and a maximum price.

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

}

else

{

$Option = "";

if (($Price1 &gt= $PriceLow) && ($Price1 &lt= $PriceHigh)) { $Option = $Option . "&ltoption onpick=\"../RealEstate/GV01234.wml \"&gtGV01234 \$\$99,500&lt/option&gt"; }




if (($Price2 &gt= $PriceLow) && ($Price2 &lt= $PriceHigh)) { $Option = $Option . "&ltoption onpick=\"../RealEstate/LV01234.wml \"&gtLV01234 \$\$149,995&lt/option&gt"; }

if (($Price3 &gt= $PriceLow) && ($Price3 &lt= $PriceHigh)) { $Option = $Option . "&ltoption onpick=\"../RealEstate/LV77711.wml \"&gtLV77711 \$\$249,995&lt/option&gt"; }

if (($Price4 &gt= $PriceLow) && ($Price4 &lt= $PriceHigh)) { $Option = $Option . "&ltoption onpick=\"../RealEstate /BC01234.wml\"&gtBC01234 \$\$500,000&lt/option&gt"; }

if (($Price5 &gt= $PriceLow) && ($Price5 &lt= $PriceHigh)) { $Option = $Option . "&ltoption onpick=\"../RealEstate /LV11711.wml\"&gtLV11711 \$\$1,500,000&lt/option&gt"; }

if ($Option eq "")

{ $Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard id=\"Error\"&gt

&ltdo type=\"accept\" label=\"Back\"&gt &ltgo href=\"../RealEstate /RealEstate.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

No houses match the price range.

&lt/p&gt

&lt/card&gt

&lt/wml&gt"; }

else

{ $Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt



&lt/head&gt

&ltcard id=\"Pick\"&gt

&ltdo type=\"accept\" label=\"View\"&gt &ltnoop /&gt &lt/do&gt

&ltdo type=\"options\" label=\"Back\"&gt &ltgo href=\"../RealEstate /RealEstate.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"nowrap\"&gt

Pick a house&ltbr/&gt ...MLS#....Price..

&ltselect&gt " . $Option . " &lt/select&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt"; }

}

print $Deck;

Выполнение сценария начинается с анализа параметров, передаваемых ему WML-страницей Real Estate.wml. Далее, сценарий присваивает переменным, начиная с$Pricel до $Price5, значения в долларовом выражении. Пять переменныхсоответствуют ценам на пять домов, известных сценарию. Затем сценарийиспользует оператор if, чтобы определить введены пользователем минимальнаяи максимальная цены или нет; если это не сделано, сценарий выводит на экрансообщение об ошибке.

Если же пользователь указал ценовой диапазон, программа сравнивает цену каждого из пяти домов с максимальной и минимальной допустимой ценой. Если ценана дом попадает в указанный диапазон, сценарий добавляет информацию о доме(такую, как списочный номер, цена и соответствующий WML-файл) в переменную$0ption. Далее, когда сценарий обработает данные всех пяти домов, будет создансписок домов с желаемой ценой путем размещения переменной $Option внутриэлемента <select>.

Когда позже пользователь выбирает из списка какой-либо дом, приложение загружает соответствующую WML-страницу. Например, WML-страница LV77711.wmlреализуется с помощью следующего программного кода:

Как можно видеть, WML-страница содержит две карты. Когда WML-страница загружает первую карту, приложение выполняет элементы карты House. При выборе пользователем опции More information (Дополнительные данные), приложениезагружает карту Morelnfо.


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