|
Программирование >> Программный интерфейс приложений
функция displayevents о написана следующим образом: sub display events { my ($sth, $url); print Выберите экзамен, щелкнув на его номере:<BR><BR>\n ; # получить список экзаменов $sth = $dbh->prepare {qq{ SELECT event id, date, type FROM event ORDER BY event id >); $sth->execute (); # отобразить таблицу с окаймлением print <TABLE BORDER>\n ; # имена столбцов используются как заголовки print <TR>\n ; foreach my $col name (@{$sth->{NAME}П { display cell ( TH , $col name, 1); print </TR>\n ; # Связать идентификатор каждого события со ссьшкой, # которая покажет # оценки по экзамену; возвратит результаты через хэш, # что резко упростит ссылку на значение столбца event id # по имени. while (my $hash ref = $sth->fetchrow hashref ()) { print <TR>\n ; $url = $cgi->script name (); $url .= sprintf ( ?event id=%s , Scgi->escape ($hash ref->{event id})); display cfcil ( TD , $cgi->a ({-href => $url}, $hash ref->{event id}) , 0); display cell ( TD , $hash ref->{date), 1); display cell ( TD , Shash ref->{type), 1); print </TR>\n ; $sth->finish 0; print </TABLE>\n ; Последовательность работы такова: пользователь выбирает экзамен, броузер посьшает запрос с выбранным значением идентификатора экзамена сценарию score browse. Сценарий score browse находит набор данных по параметру event id и вызывает функцию display scores () для получения списка заданного экзамена. Страница также имеет ссылку Show Event List в качестве ссьшки на первую страницу, что позволяет вернуться на нее. URL этой ссылки ссылается на сценарий score browse, но не определяет значения параметра event id. Функция display scores () представлена в следующей распечатке: sub display scores { my ($event id) = shift; my ($sth); # URL без параметра event id # вызовет отображение списка экзаменов. print $cgi->a ((-href => $cgi->script name {)>, Show Event List ); print <BR><BR>\n ; # - выбрать оценки для заданного экзамена sth = $dbh->prepare (qq{ SELECT student, name, event, date, score, score, event. Type FROM student, score, event WHERE student. student id = score. student id AND score. event id = event. event id AND event .event id = ? ORDER BY event, date ASC, event, type ASC, score, score DESC $sth->execute ($event id); # передать идентификатор экзамена # как маркер значения print <В>Оценки по экзамену $event id</B><BR>\n ; # отобразить таблицу с окаймлением print <TABLE BORDER>\n ; # использовать имена столбцов в качестве заголовков print <TR>\n ; foreach my $col name-, (@ {Ssth->{NAME}}) ( display cell ( TH , $col name, 1); print </TR>\n ; while (my @ary = $sth->fetchrow array {)) { print <TR>\n ; display cell ( TD , shift (Sary), 1) while @ary; print </TR>\n ; $sth->finish(); print </TABLE>\n ; Создаваемый сценарием display scores () запрос во многом аналогичен запросу, который был нами разработан в главе 1, Знакомство с СУБД MySQL и SQL , в которой объясняется, как создавать объедине- ния. Там мы запрашивали оценки для заданных дат, так как даты более информативны, чем идентификаторы экзаменов. Наоборот пользуясь сценарием score browse, нам станет известен точный идентификатор экзамена. И совсем не потому, что мы мыслим в терминах идентификаторов экзаменов (совсем нет), а потому, что сценарий снабжает нас списком для их выбора. Очевидно, что этот тип интерфейса уменьшает необходимость знать конкретные детали. Совсем не надо знать идентификатор события, нам только нужно распознать нужный нам экзамен. Подбор членов Исторической Лиги по общности научных интересов Сценарии samp browse и score browse позволяют пользователю делать осознанный выбор из* списка на начальной странице, где каждый элемент выбора является ссылкой, вызывающей сценарий с определенным значением параметра. Существует еше один способ произвести выбор: сделать это в форме страницы, содержащей редактируемое поле. Это уместно в том случае, когда диапазон возможных значений не ограничивается достаточно просто определяемым набором значений. Наш следующий сценарий демонстрирует метод запроса значений. В разделе Подготовка интерфейса к работе в этой главе был создан сценарий, работающий из командной строки, главной задачей которого являлся подбор членов Исторической Лиги по их научным интересам. Но сами члены Исторической Лиги не могут иметь доступа к такому сценарию. Принцип работы такого сценария другой: секретарь сам запускает этот сценарий, а затем отсылает по почте результат члену Исторической Лиги , запросившему список. Конечно, гораздо лучше сделать эту возможность более доступной, так чтобы члены этой организации сами могли производить такой выбор. И единственный способ - создать соответствующий Web-сценарий. Этот сценарий, назовем его interests, сначала предлагает небольшую форму, куда пользователь сможет ввести ключевое слово, по которому будет производиться выборка из таблицы member для подбора членов и отображения результатов. Этот поиск производится с добавлением шаблона I с двух сторон для того, чтобы ключевое слово было найдено в любом месте столбца interests. Форма ввода ключа отображается на каждой странице, таким образом пользователь может начать новый поиск немедленно, даже со страниц, которые отображают результаты поиска. Кроме того, строка поиска с предыдущей страницы будет отображаться в форме запроса ключа. Таким образом, если пользователю требуется повторить запрос, строка может быть отредактирована, т.е. отпадает необходимость в длительном вводе данных. # параметр поиска ту (Sinterest) = $cgi->param ( interest );
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |