Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 [ 227 ] 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

19.14. Программа: chemiserie

Сценарий CGI из примера 19.9 предназначен для заказа футболок и свитеров через Web. В нем использованы приемы, описанные в рецепте 19.12. Вывод не отличается особой элегантностью или красотой, но продемонстрировать многостраничную работу в короткой программе слишком сложно, чтобы заботиться об эстетике.

Подпрограммы shirt и sweater проверяют значения соответствующих элементов формы. Если цвет или размер окажется неправильным, в элемент заносится первое значение из списка допустимых цветов или размеров.

Пример 19.9. chemiserie

#i/usr/bin/perl -w

и chemiserie - простой сценарий CGI для заказа футболок и свитеров use strict;

use CGI qw(.standard);

use CGIiCarp qw(fatalsToBrowser);

my %States; # Хэш состояний - связывает страницы

tt с функциями my $Current Screen; # Текущий зкран

# Хэш страниц и функций.

%States = (

Default => \&front page,

Shirt => \&shirt,

Sweater => \&sweater,

Checkout => \&checkout,

Card => \&credit card,

Order => \&order,

Cancel => \&front page,

$Current Screen = param(".State") "Default;

die No screen for $Current Screen" unless $States{SCurrent Screen>;

tt Сгенерировать текущую страницу.

standard header();

while (my($screen name, Sfunction) = each %States) { $function->($screen narae eq $Current Screen);

standard footer(); exit;

uuuttttuttttttttuuttuttttuuttttttuttttuuuuttuutttt



19.14. Программа: chemiserie 699

# Колонтитулы формы, функции меню

тшшпппппшпттптппш

sub standard header {

print headerO, start html(-Title => "Shirts-, -BGCOLOR=>"White"); print start form(); # start multipart form() if file upload

sub standard footer { print end form(), end html() }

sub shop menu {

print p(defaults("Empty My Shopping Cart"), to page("Shirt"), to page("Sweater"), to page("Checkout"));

# Подпрограммы для каждого экрана

#№»т»№шпишп»ттп»тип№и

# Страница по умолчанию, sub front page {

my Sactive = shift; return unless Sactive;

print "<H1>Hi!</H1>\n";

print "Welcome to our Shirt Shop Please make your selection from "; print "the menu below.\n";

shop menu();

# Страница для заказа футболок, sub shirt {

my Sactive = shift;

my ©sizes = qw(XL L M S);

my ©colors = qw(Black White);

my (Ssize, Scolor, Scount) =

(param("shirt size"), param("shirt color"), param("shirt count"));

# Проверка if (Scount) {

Scolor = ScolorsCO] unless grep { S eq Scolor } ©colors; Ssize = $sizes[0] unless grep { $ eq Ssize } ©sizes; param("shirt color", Scolor); param("shirt size", Ssize);



700 Глава 19 • Программирование CGI Пример 19.9 (продолжение)

unless (Sactive) {

print hidc(en( shirt size ) if $size, print hidden( shirt color ) if $color, print hidden( shirt count ) if Scount, return,

print h1( T-Shirt ),

print p( What a shirt This baby is decked out with all the options It comes with full luxury interior, cotton trim, and a collar , to make your eyes water Unit price \S33 00 ),

print h2( Options )

print p( How Many , textfield( shirt count )), print p( Size , popup menu( shirt size , \@sizes ), Color , popup menu( shirt color , \@colors)),

shop menu(),

# Страница для заказа свитеров sub sweater {

my Sactive = shift,

my @sizes = qw(XL L M),

my ©colors = qw(Chartreuse Puce Lavender),

my (Ssize, Scolor, Scount) =

(param( sweater size ), param( sweater color ), param( sweater count ))

# Проверка If (Scount) {

Scolor = $colors[0] unless grep { S eq Scolor } ©colors, Ssize = $sizes[0] unless grep { $ eq Ssize } ©sizes, param( sweater color , Scolor), param( sweater size , Ssize),

unless (Sactive) {

print hidden( sweater size ) if Ssize, print hidden( sweater color ) if Scolor, print hidden( sweater count ) if Scount, return,

print h1( Sweater ),

print p( Nothing implies pretty elegance more than this fine , sweater Made by peasant workers from black market silk, , It slides onto your lean form and cries out Take me, , for I am a god Unit price \$49 99 ),



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 [ 227 ] 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242