|
Программирование >> Программный интерфейс приложений
pa по интересам. Сначала сценарий проверяет наличие в командной строке хотя бы одного аргумента, так как в противном случае ему вообще не надо ничего делать. Затем сценарий соверщает поиск по столбцу interests таблицы table: gARGV or die Задача: ключевое слово interests \n ; search members (shift (@ARGV)) while @ARGV; Добавим с обеих сторон к искомой строке символ % . Это позволит найти строку, являющуюся подстрокой столбца interests. После этого найденные записи распечатываются. sub search members { my ($interest) = shift; my ($sth, $count); print Поиск результатов для ключевого слова: Sinterest\n\n ; Ssth = Sdbh->prepare (qq( SELECT * FROM member WHERE interests LIKE ? ORDER BY last name, first name # поиск строки в любом месте поля interest Ssth->execute ( % . Sinterest . % ); Scount = 0; while (my $hash ref = Ssth->fetchrow hashref ()) ( format entry (Shash ref); ++Scount; print Найдено Scount записей\п\п ; Здесь не показана функция f ormat entry (). Она во многом подобна функции format rtf entry О ИЗ сценария gen dir но без управляющих команд RTF-формата. Размещение каталога Исторической Лиги на Web-узле в следующем разделе Работа с интерфейсом DBI в Web-приложениях мы начнем создавать сценарии, подключающиеся к серверу MySQL для того, чтобы выбирать и записывать информацию в форме Web-страниц на Web- броузере клиента. Эти сценарии динамически генерируют данные в формате HTML в зависимости от запроса клиента. Но до этого попрактикуемся в написании статических HTML-документов, которые будут загружены в дерево документов Web-сервера. Самым подходящим кандидатом является задача создания в формате HTML каталога Исторической Лиги Документ в формате HTML имеет такую структуру: <HTML> <- начало документа <HEAD> <- начало головка документа <TITLE>My Page Title</TITLE><- титул документа </HEAD> <- начало заголовка документа <BODY> <- начало тела документа <Н1>Му Level 1 Heading</m> <- заголовок 1-го уровня тело документа ... </BODY> <- конец тела документа </HTML> <- конец документа Для генерации каталога в этом формате совсем нет необходимости писать весь сценарий. Когда писался сценарий gen dir, мы воспользовались расширяемой оболочкой, что дало нам возможность вставлять программный код для печати каталога в дополнительных форматах. Это значит, что для того, чтобы добавить программный код, генерирующий вывод в формате HTML, необходимо написать профаммный код инициализации документа, функции очистки и функции форматирования отдельных записей. Затем необходимо создать ветвление по этим функциям. Сам документ легко можно разбить на пролог и эпилог, которые можно обработать с помощью функций инициализации и очистки, и на основную часть, которая может быть обработана функцией форматирования записей. Функция инициализации формата HTML генерирует управляющий код, находящийся выше 1-го уровня заголовка, а функция очистки генерирует тэги закрытия </body> и </html>. html init { print <HTML>\n ; print <HEAD>\n ; print <TITLE>CnMCOK членов Исторической Лиги США </TITLE>\n ; print </HEAD>\n ; print <BODY>\n ; print <H1> Список членов Исторической Лиги США </Н1>\п ; sub html cleanup { print </BODY>\n ; print </HTML>\n ; Основная работа, как всегда, заключается в форматировании записей. Скопируем функцию f ormat rtf entry (), проверим, не осталось ли специальных символов и заменим управляющие слова формата RTF на тэги формата HTML. sub format html entry { my ($entry ref) = shift; my {$address); # кодирование специальных слов формата HTML foreach my $key (keys (%{$entry ref})) $entry ref ->{$key} =- s/s/&/g; $entry ref ->{$key} =- s/\ /"/g; $entry ref->{$key} =- s/>/>/g; $entry ref->{Skey} =- s/</</g; printf <STRONG>Name: %s</STRONG><BR>\n , format name {$entry ref ); $address = ; $address .= $entry ref ->{street) if $entry ref ->{street); $address .= , . Sentry ref ->{city} if $entry ref ->{city}; $address .= , . $entry ref ->{state} if $entry ref ->{state); $address .= . $entry ref ->{zip} if $entry ref ->{zip); print Адрес: $address<BR>\n if $address; print Телефон: $entry ref ->{phonel<BR>\n if $entry ref ->{phone}; print Э/п: $entry ref ->{email}<BR>\n if $entry ref ->{email); print Интересы: Sentry ref ->{interests)<BR>\n if Sentry ref ->{interests}; print <BR>\n ; Теперь всего лишь добавим в конструкцию switchbox элемент, который указывает на функцию создания HTML-страниц. Модификацию сценария gendi г можно считать завершенной. # конструкция switchbox, содержащая функции форматирования # для каждого выводимого формата ту (%switchbox) = banquet => # функции для списка на банкет { init => undef, # инициализация не требуется entry => \Sformat banquet entry, cleanup => undef # очистка не требуется rtf => # функции для RTF-формата { init => \Srtf init, entry => \&format rtf entry, cleanup => \Srtf cleanup html => # функции для HTML-формата ( init => \&html init, entry => \&format html entry, cleanup => \&html cleanup Получить список в формате HTML можно, запустив команду и установив полученный файл в дереве документов своего Web-сервера: % gen dir html > directory.html
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |