Рассмотрение Peri-сценария RealEstateHDML.pl
Рассмотрение Peri-сценария RealEstateHDML.pl
Как и в случае приложения на WML, сценарий RealEstateHDML.pl не взаимодействует с базой данных, содержащей информацию о недвижимости. Вместо этогоиспользуются данные пяти домов, для которых известны цены и информация опродаже. Peri-сценарий RealEstateHDML.pl реализуется с помощью следующегопрограммного кода:
#!/usr/bin/perl
read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});
@data = split(/&/, $Buffer);
$PriceLow = $data[0]; $PriceHigh = $data[1];
$Price1 = 99500; $Price2 = 149995; $Price3 = 249995; $Price4 = 500000; $Price5 = 1500000;
if (($PriceLow <= 0) ($PriceHigh <= 0) ($PriceLow > $PriceHigh))
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=Error>
<Action Type=Accept Label=Back Task=GO Dest=../RealEstate/RealEstate.hdml>
<Wrap>Error in price range. Please enter a minimum price and a maximum price.
</Display>
</HDML>";
}
else
{
$Option = "";
if (($Price1 >= $PriceLow) && ($Price1 <= $PriceHigh)) { $Option = $Option . "<CE Task=GO Dest=../RealEstate/GV01234.hdml>GV01234 &dol;99,500"; }
if (($Price2 >= $PriceLow) && ($Price2 <= $PriceHigh)) { $Option = $Option . "<CE Task=GO Dest=../RealEstate/LV01234.hdml>LV01234 &dol;149,995"; }
if (($Price3 >= $PriceLow) && ($Price3 <= $PriceHigh)) { $Option = $Option . "<CE Task=GO Dest=../RealEstate/LV77711.hdml>LV77711 &dol;249,995"; }
if (($Price4 >= $PriceLow) && ($Price4 <= $PriceHigh)) { $Option = $Option . "<CE Task=GO Dest=../RealEstate/BC01234.hdml>BC01234 &dol;500,000"; }
if (($Price5 >= $PriceLow) && ($Price5 <= $PriceHigh)) { $Option = $Option . "<CE Task=GO Dest=../RealEstate/LV11711.hdml>LV11711 &dol;1,500,000"; }
if ($Option eq "")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=Error>
<Action Type=Accept Label=Back Task=GO Dest=../RealEstate/RealEstate.hdml>
<Wrap& gtNo houses match the price range.
</Display>
</HDML>";
}
else
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=Pick>
<Action Type=Accept Label=View> <Action Type=Soft1 Label=Back Task=GO Dest=../RealEstate/RealEstate.wml>
<Line>Pick a house<br> ...MLS#....Price..
" . $Option . "
</Choice>
</HDML>"; }
}
print $Deck;
Как можно видеть, сценарий использует пять переменных, от $Pricel до$Price5, чтобы отслеживать цены домов, которые известны сценарию. Как и впредыдущем сценарии, для определения факта попадания цены дома в указанныйдиапазон, в программном коде используется серия операторов if. После того какпросмотрены цены всех пяти домов, приложение формирует HDML-страницу, которая с помощью элемента <Choice> создает меню из опций, отвечающих условиям поиска (опции сценарий сохраняет в переменной $0ption). Когда пользователь позднее выбирает из списка некоторый конкретный дом, HDML-приложение загружает HDML-страницу, соответствующую выбранному дому. Например, файл 77711 .hdml содержит следующий программный код:
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=House>
<Action Type=Accept Label=Back Task=PREV>
<Line>MLS #:LV77711<br> &dol;249,995<br> Las Vegas<br> 4 BR / 2 Ba<br> 4100 SF<br> <A Task=GOSUB Dest=#MoreInfo>More Info</A>
</Display>
<Display Name=MoreInfo>
<Action Type=Accept Label=Back Task=RETURN>
<Line>Lot Size: 400X400<br> Year Built: 1998<br> Fireplace: Yes<br> Patio: Yes<br> Pool: Yes<br> Spa: Yes
</Display>
</HDML>
Когда HDML-страница запускает первую карту, браузер выполняет программныйкод, располагающийся внутри элемента House. Если пользователь выбирает опцию More Information (Дополнительная информация), выполняется ветвлениепрограммного кода и переход (с использованием задания GOSUB) на элементMorelnfо.