WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Вывод списка статей

Вывод списка статей


Дата публикации: 28-02-2011

Теперь, когда у вас есть работающая база данных с пресс-релизами, можно без особых проблем подключить ее к Web-странице. Начнем с создания простейшей страницы, которая отображает список всех имеющихся пресс-релизов. Заметьте, что по умолчанию Web-сервер Apache «думаеть», что все ваши документы должны находится в его директории htdocs, а исполняемые файлы — в cgi-bin. Следовательно, необходимо поместить все файлы с расширением .pl в каталог cgi-bin. В свою очередь, создаваемые файлы HTML-шаблонов нужно разместить в каталоге tpl. Иерархия каталогов будет выглядеть следующим образом:

/ (корень любого диска)
/local
/local/usr
/local/usr/bin
/local/usr/cgi-bin
/local/usr/htdocs
/local/usr/tpl

Для систем DOS/Windows путь к cgi-bin может выглядеть так:

c:\local\usr\cgi-bin

Шаг 1

Используя свой любимый текстовый редактор, создайте файл pr-list-tpl.htm:

15. <html>
16. <head>
17. <title>Пресс-релизы 2001</title>
18. </head>
19. <body>
20. @BLOCK@
21. </body>
22. </html>

Этот файл предназначен для отображения списка всех доступных пресс-релизов.

Шаг 2

Создайте файл pr-list-block-tpl.htm, который будет отображать каждый блок с найденным пресс-релизом в виде таблицы:

23. <table border="1" width="400" cellpadding= _
"2" cellspacing="1">
24. <tr><td width="400"><a href= _
"/cgi-bin/@READ@?id=@NUMBER@">@TITLE@</a></td></tr>
25. <tr><td width="400"><i><b>@AUTHOR@</b>,    _
@DATE@</i></td></tr>
26. </table>

Шаг 3

Создайте файл pr-content-tpl.htm, который будет отображать содержание пресс-релиза:

27. <html>
28. <head>
29. <title>Press-releases 2001: @TITLE@</title>
30. </head>
31. <body>
32. <h2>@TITLE@</h2>
33. <table>
34. <tr><th align="left">@TITLE@</th></tr>
35. <tr><td><i>Author: <b>@AUTHOR@</b> Date: @DATE@</i></td></tr>
36. <tr><td>@BODY@</td></tr>
37. </table>
38. <a href="/cgi-bin/@LIST@">Show the list of press-releases..</a>
39. </body>
40. </html>

Шаг 4

Создайте Perl-скрипт pr-list-dbi.pl, который будет читать данные из базы данных db_website и, используя шаблонные HTML-файлы, отображать список пресс-релизов (текст этого скрипта вы сможете найти на нашем компакт-диске).

А теперь пройдемся по листингу кода и рассмотрим, как работает программа вывода списка пресс-релизов.

Строки 1-9 представляют собой как бы инициализирующий блок, в котором объявляются все глобальные переменные и константы:

41. #!/local/usr/bin/perl
42. 
43. use DBI;
44. $dbh = DBI->connect(‘dbi:mysql:db_website’,’root’,’’);
45. $path = "/local/usr/tpl";
46. $TPL_LIST = "$path/pr-list-tpl.htm";
47. $TPL_LIST_BLOCK = "$path/pr-list-block-tpl.htm";
48. 
49. print "Content-type:text/html\n\n";

Сперва мы сообщаем Web-серверу Apache путь, указывающий, где находится интерпретатор Perl, который запускается при запросе скрипта, проверяет его на ошибки и затем выполняет его. Далее мы объявляем модуль DBI (DataBase Interface), методы которого будут использоваться в программе для взаимодействия с базой данных (строка 3). Затем мы устанавливаем соединение с нашей базой данных db_website (4), указывая в качестве входного имени пользователя root (администратор), а в качестве пароля пустую строку (значение, принятое по умолчанию). В переменной $path указываем путь, по которому находятся файлы HTML-шаблонов (5). В переменных $TPL_LIST и $TPL_LIST_BLOCK соответственно указываем их имена (6, 7). Потом, сообщаем Web-серверу, что все исходящие данные должны представляться в MIME-формате text/html для вывода HTML-потока в пользовательский браузер (9).

Строки 11-22 представляют собой тело программы:

50. 
51. open (L, "$TPL_LIST");
52. while ($line1=<L>) {
53. chomp($line1);
54. if ($line1=~/\@BLOCK\@/) {
55. read_db();
56. ins_data();
57. } else {
58. print "$line1\n"; 
59. }
60. }
61. close(L);
62. 
63. $dbh->disconnect;

Открываем файл-шаблон pr-list-tpl.htm (11) и в цикле (12-20) просматриваем его, записывая каждую считанную строку в переменную $line. Во время каждой итерации производим проверку на наличие в этой строке ключевого слова @BLOCK@ (14-19), означающего, что в данном месте надо вставить блок с пресс-релизом. Как только оно найдено, вызываем процедуры read_db() и ins_data().

Строки 26-39 — тело процедуры read_db(), предназначенной для считывания содержимого таблицы tbl_news_items, в которой хранятся наши пресс-релизы:

64. 
65. 
66. sub read_db {
67. $c=0;
68. my($sql) = "SELECT * FROM tbl_news_items";
69. $rs = $dbh->prepare($sql);
70. $rs->execute;
71. while (my $ref = $rs->fetchrow_hashref()) {
72. $id[$c] = "$ref->{‘col_id’}";
73. $title[$c] = "$ref->{‘col_title’}";
74. $author[$c] = "$ref->{‘col_author’}";
75. $date[$c] = "$ref->{‘col_date’}";
76. $c++;
77. }
78. $rs->finish();
79. }

Инициализируем счетчик $c=0, составляем запрос выборки всех данных из таблицы (28), выполняем запрос (29, 30) и получаем данные в рекордсет (recordset — набор записей) $rs. Затем в цикле (31-37) извлекаем данные из рекордсета, используя метод fetshrow_hashref и возвращая ссылку на ассоциативный массив %ref (31), содержащий имена и значения полей текущей записи. Записываем извлеченные данные (32-35) в соответствующие их типам обычные массивы @id, @title, @author и @date. Закрываем рекордсет (38).

Строки 41-53 — тело процедуры ins_data(), реализующей вставку извлеченных из БД данных в исходящий поток данных; строки 55-63 — тело процедуры pr_block(), вызываемой в цикле из процедуры ins_data():

80. 
81. sub ins_data {
82. $toread = "pr-read-dbi.pl";
83. for ($i=0; $i<$c; $i++) {
84. $line = &pr_block;
85. 
86. $line =~ s/\@NUMBER\@/$id[$i]/;
87. $line =~ s/\@TITLE\@/$title[$i]/;
88. $line =~ s/\@AUTHOR\@/$author[$i]/;
89. $line =~ s/\@DATE\@/$date[$i]/;
90. $line =~ s/\@READ\@/$toread/;
91. print "$line";
92. }
93. }
94. 
95. sub pr_block {
96. my($block) = ‘’;
97. open (B, "$TPL_LIST_BLOCK");
98. while ($line=<B>) {
99. $block = $block.$line;
100. }
101. close(B);
102. return ($block);
103. }

Итак, получив в результате выполнения процедуры read_db() максимальное значение счетчика $c, в цикле (43-52) мы запускаем процедуру pr_block(), которая читает содержимое HTML-шаблона pr-list-block-tpl.htm и записывает его в переменную $block (59), значение которой затем возвращается (62) в переменную $line (44) процедуры ins_data(). Далее в этом же цикле мы заменяем (46-50) найденные в исходящем потоке $line ключевые слова @NUMBER@, @TITLE@, @AUTHOR@, @DATE@, @READ@ на соответствующие данной итерации цикла ($i) значения массивов @id, @title, @author, @date и переменной $toread.

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 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

Друзья сайта



Случайная цитата

Alan J. Perlis:

"FORTRAN — это не цветок, а сорняк: он вынослив, иногда расцветает и произрастает в каждом компьютере."

Опрос

Как Вам новый дизайн сайта?

Отлично
Неплохо
Нормальный
Ужасно