Программирование >>  Программный интерфейс приложений 

1 ... 120 121 122 [ 123 ] 124 125 126 ... 264


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/&amp;/g; $entry ref ->{$key} =- s/\ /&quot;/g;



$entry ref->{$key} =- s/>/&gt;/g; $entry ref->{Skey} =- s/</&lt;/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



1 ... 120 121 122 [ 123 ] 124 125 126 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика