Ваш первый Сайт С использованием РНР-скриптов
СОЗДАНИЕ СБОРНИКА СТАТЕЙ И ВЫВОД ИХ НА САЙТ
Итак, допустим, вы являетесь администратором сайта, на котором размещаются статьи разных авторов. В таком случае при поступлении новой статьи, если не прибегать к помощи php, вам приходится, помимо размещения на web-cepeepe (или выделенном вам аккаунте) ее самой, еще и обновлять страницу со списком этих статей, добавив ссылку на новоразмещенную web-страницу со статьей - иначе ведь попасть на новую статью с сайта будет невозможно. А если статьи поступают часто? Да еще и не только поступают, но и удаляются, или в них меняется название? Тогда ведь для отслеживания правильности содержания приходится прилагать немало усилий. Создадим программу, которая автоматизировала бы этот процесс. В рабочей папке Htdocs вы должны были создать подпапку Statji. А в этой подпапке создайте еще 6 папок с названиями 1, 2, 3, 4, 5, б, как на рис. 6.4.
Файл Правка Вид Избранное Сервис ^правка Qi Назад - - Поиск (gS Папки J
Адрес! I С: Home_serverApach e2htdocsstat ji|
Tjg|f Просмотреть как слайд-и. оу
^ Заказ отпечатков через
Интернет ||Ь| Печать изображении
^ Копировать все объекты на компакт-диск
В каждой из шести папок будет находиться по статье в виде web(html)- документа. Вы спросите, почему я каждую статью размещаю в отдельной папке? Да потому, что к каждой статье могут прилагаться рисунки. Если все «слить» в одну общую папку, то возникнет путаница. А так у нас каждая статья и прилагающиеся к ней рисунки в отдельной папке. В браузер будут выводиться ссылки на web-страницы со статьями, находящимися в разных папках. Однако для состаЕления списка статей информации только об именах файлов мало. Ведь в таком списке желательно указать хотя бы название статьи и имя ее автора. Чтобы это сделать, можно, например, указывать эти данные в тегах Meta, включаемые в каждый файл со статьей. Эти теги располагают между тегами заголовочной части <Head> и </Head> HTML-документов. Для данного примера я скачал из Интернета шесть HTML-доку-
Ментов с различными статьями. Первый HTML-документ со статьей я разместил в первой папке и назвал его statjal.html. Второй HTML-документ со статьей я разместил во второй папке и назвал его statja2.html и т. д. Вы можете проделать то же самое. В каждом из HTML-файлов со статьей разместим Meta-TQYK, примерно так: <head>
<Пйе>Статья</ше>
<meta name="nazvanie" content^"Название статьи"> <meta name="avtor" content^"Автор статьи"> </head>
Содержимое данных тегов нужно указать в программе, где мы будем выводить названия статей, с помощью функции getmetatags (имя файла со статьей). Функция get meta tags создает массив, элементы которого соответствуют названиям мета-тегов (пате), которые были указаны в файле со статьей (если, конечно, такие meta-теги там есть), а значения этих элементов - соответствующим значениям мета-тегов (content). Строки сценария, вытаскивающие из файла содержимое этих тегов и помещающие их на страницу, будут выглядеть так: $statji="statji/$i";
$meta=get_meta_iags("$statji/$fde");
Echo "<А href=$statji/$file target='_blank'>$meta[nazvanie]</a> $meta[avtor]< br> ";
В переменной Sstatji будет находиться путь к одной из шести папок. В переменной $fiie - название файла со статьей в какой-либо из шести папок. Устанавливаем ссылку на этот файл, выводим название статьи, которое будет в переменной $meta[nazvanie] и (уже без ссылки) автора статьи из переменной $meta[avtor]. В реальной программе, в листинге 6.3, мы все эти названия и авторов разместили для удобства в ячейках таблицы.
После таблицы со статьями разместим книгу отзывов о странице и форму для оценки по пятибалльной шкале. Постарайтесь набрать код сами, после того как в нем разберетесь. Разбор кода сразу после листинга 6.3. В РНР - редакторе создайте новый файл и сохраните его в рабочей панке htdocs под названием statji.php.
Листинг 6.3 (файл Statjiphp) <Html> <Head>
<Ш1Е>Подборка Статей</Ш1Е>
<link rel=" stylesheet" type="text/css" href="stil. css"> </head>
Глава 6. Подборка статей на сайте. Оценка страниц посетителями <Body Bgcolor="Cyan">
<centerxtable widthss"80%M border="2" bordercolor="green"xtr> <td align="CENTER" id= Чо1оЗ">Название статьи<М> <td align="CENTER" id= Чо1оЗ">Автор CTaTbH</td></tr> <?php
For($i=l; $i<=100; {
$statji="statji/$i"; if(!file_exists($statji)) break; $dir=opendir($statji);
$raz=array(".htmr, ".htm", ".shtml", ".php");
While(($file=readdir($dir))!==false)
{
If(($file !=".")&&($fi! e !="..")) {
If(in_array(strrchr($file,"."), $raz)) {
$meta=get_meta_tags("Sstatji/$file"); echo "<trxtd id=loloxa href=$statji/$file
Target='_blank'>$meta[nazvanie]</ax/tdxtd id=lolo>$meta[avtor]</td></tr>"; }
}
}
Closedir(Sdir);
}
Echo "</tablex/center><br>"; $ind=basename($_SERVER|,PHP_SELF'], ".php"); include ("soobshenie. php");
Include ("ocenka. php");
?>
</body> </html>
Разберем этот код: <html> <head>
<title>Подборка статей<///Y/e>
<link rel="stylesheet" type="text/ess" href="stilcss"> - указываем лист стилей, который будем использовать. Файл листа стилей stil.css мы создали раньше. Что это такое и для чего он нужен, было рассказано в гл. 3;
</head>
<body bgcolor="cyan"> - устанавливаем цвет фона страницы;
<center><table width="80%" border="2" bordercolor="green"><tr> - создаем двухколонную таблицу, открываем первую строку, которая будет заголовочной;
<td align="center" id="lolo3">Название cmambu</td> - в центре первой ячейки первой строки выводим текст «Название статьи». Идентификатор 1о1оЗ задает тип и цвет шрифта для вводимого в ячейку текста. Этот идентификатор и его параметры должны быть указаны в файле стилей stil.css. Если такого идентификатора там нет, то создайте его (как это сделать, см. в гл. 3) или здесь вместо 1о1оЗ поставьте другой, который там есть; <td aligns"center" id="lolo3">Автор cmambu</td></tr> - аналогично во второй ячейке верхней строки выводим текст «Автор статьи»;
< ?php - начало РНР-кода;
For($i=l; $i<=100; $i++) - начало цикла, счетчиком которого является переменная $i. Данный счетчик пробегает папки со статьями. Мы не зря дали имена шестерым папкам в виде последовательности чисел (1, 2, 3...). Их так легче считать. Если общее число статей у вас не будет превышать 100, то можно оставить $i<=J00. У нас пока шесть статей, но начиная с 5/=7 цикл в холостую работать не будет, ибо мы его прервем;
1{ - открывается скобка начала цикла. Для удобства скобки попарно нумеруются;
$statji="statji/$i"; - присваиваем переменной Sstatji (назовите как угодно) путь к папке со статьей (например, при $i=l переменной Sstatji будет присвоен путь к первой папке, т. е. $statji=statji/l)',
Ij(!file exists (Sstatji)) break; - проверяется условие, существует или нет такая папка (такой путь к папке). Если такой папки еще нет, например при $i>6, То цикл for прерывается. Если папка существует, то выполнение цикла продолжится дальше;
$dir=opendir(Sstatji); - открываем папку со статьей. Например, при Si=1 от - кроится первая папка, при $i=2 будет открыта уже вторая папка со второй статьей. Открытой папке присваивается идентификатор $dir
$raz=array(".html", ".htm", ".shtml", ".php"); - создаем массив Sraz с расширениями web-файлов со статьями. Зачем это нужно, увидите через пару строк кода. Статьи могут содержаться не только в HTML-файлах, но и в файлах с расширением htm, shtml, php. Я думаю, этого достаточно;
While(($fde=readdir($dir))!==false) - начинается цикл, суть которого была рассмотрена в разд. 6.1-6.2. При каждом выполнении этого цикла переменной Sfile присваивается какой-нибудь файл или каталог, содержащийся в открытой на данный момент папке (при $i=l будет открытая первая папка); 2{
If(($file !=".")&&($fde Г-'..")) - как отмечалось выше, среди выданных функцией readdir имен будут и ссылки на текущий и родительский каталоги. Если переменная $fde не содержит текущий или родительский каталог, то выполнится блок команд за открывающейся фигурной скобкой под номером 3;
If (in array (strchr ($fde, "."), $raz)) - снова проверка условия. Дело в том, что в папке, где содержится файл со статьей, могут также содержаться и другие файлы и каталоги, на которые могут указывать ссылки из данной статьи (картинки, рисунки и т. п.). Мы должны вывести в браузер ссылки только на файлы со статьей, остальные файлы отсечь. Функция strchr, как отмечалось в гл. 4, возвращает часть строки, начиная с символа «.» и до конца строки. Строка находится в переменной $fde. Это название файла с расширением в открытой на данный момент папке. Данная функция возвратит только то, что следует от точки в названии файла, т. е. его расширение, включая точку вначале. Функция in_array, напомню,,ищет значение, полученное при помощи функции strchr, в массиве $raz и возвращает true, если это значение найдено. Иными словами, если расширение файла, содержащегося в переменной $fde, совпадет хотя бы с одним элементом массива $raz (".html", ".htm", ".shtml", ".php"), то общее выражение в круглых скобках после оператора if Будет истинно и выполнится блок команд за открывающейся фигурной скобкой под номером 4;
4{ - этот блок команд внизу выполнится, если выбранный файл имеет расширение либо html, либо him, либо shtml, либо php, т. е. файл со статьей; $meta=get_meta_tags("$statji/$fde"); - вытаскиваем из файла содержимое тегов <meta>. Эти теги должны быть в каждом файле со статьей; Echo "<tr><td id=lolo><a href=$statji/$file target='_blank'>$meta[nazvanie] </a></td><td id-lolo>$meta[avtor]</td></tr> "; - при помощи оператора echo выводим в браузер содержимое тегов <meta>. Сначала открываем новую строку таблицы. В первую ячейку новой строки выводится ссылка на файл со статьей и содержимое тега <meta> с именем name=nazvanie. В нем должно содержаться название статьи. Далее действие ссылки заканчивается (закрывающийся тег </а>). Во вторую ячейку новой строки выводится содержимое тега <meta> с именем name=avtor, т. е. указывается автор данной статьи;
4} - заканчивается блок команд в фигурных скобках под номером 4; 3} - заканчивается блок команд в фигурных скобках под номером 3;
2} - заканчивается блок команд в фигурных скобках под номером 2, т. е. как только заканчиваются файлы в открытой папке, цикл while завершается;
Closedir($dir); - закрываем открытую папку;
1} - завершается самый первый цикл for (см. начало кода) для данного значения переменной $i. После переменная $i увеличится на единицу и цикл снова весь повторится, если, конечно, папка со статьей с таким номером $i существует;
Echo "</table></center><br>"; - закрываем таблицу. Все, таблицу с названиями статей и их авторов вывели. Далее выводим книгу отзывов и форму для оценки;
$ind=basename($_SERVER['PHP_SELF'], ".php"); - элемент суперглобального массива;
S SERVERf'PHP SELF'] возвращает полный путь к текущей странице, где находится данный код (statji.php), а функция basename урезает его до названия страницы без расширения (statji). Все эти функции были рассмотрены в гл. 4. Переменной $ind присваиваем название данной страницы с кодом [statji). Она будет использоваться в кодах для книги отзывов soobshenie.php И для формы оценки ocenka.php. Эти коды мы напишем позже и сделаем их универсальными, т. е. вы можете вставлять их на любые страницы сайта (на разных страницах и переменная $ind будет различной); Include ("soobshenie.php ");
Include ("ocenka.php"); - вставляем коды страниц, которые напишем чуть позже. Пока их еще нет.
Последние 2 строчки лучше пока временно удалить и обратно вставить их после написания всех программ, иначе браузер будет выдавать ошибку!