Программируем картинную галерею на php
06.04.09
В проект будут входить два файла: index.php и img.dat, также сразу возьмите несколько рисунков, чтобы потом проверить работу нашей галереи. Файл данных img.dat будет иметь такой синтаксис:
1.jpg::Первая фотография
logo.gif::Logo для PHP
Каждая строчка в файле данных отвечает за один рисунок. Сначала пишется имя файла, затем разделитель :: (два двоеточия), после чего идет описание, которое будет находиться под выводимым рисунком. В первой строке мы сначала указываем имя файла — 1.jpg, а затем описание к нему — Первая фотография. Во второй строке идет аналогичная шаблонная запись, только изменено имя файла и установлено соответствующее описание к нему. Как видим, формат рисунка не имеет значения, главное, чтобы он поддерживался вашим браузером.
Теперь напишем сценарий, который будет работать с файлом данных img.dat. Создайте сценарий index.php и напишите в нем такой код:
<html>
<head>
<title>Галерея</title>
</head>
<body>
<p align=»center»>
<table width=»600″ border=»1″ cellspacing=»0″ cellpadding=»5″ align=center>
<tr>
<td valign=»top»>
<b><center>Галерея</center></b>
</td>
</tr>
<?php
if ($QUERY_STRING == «» || ereg(«^img»,$QUERY_STRING)): /*проверка передачи параметрам сценарию*/
?>
<tr>
<td>
<table width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″><tr><td width=»50%» align=»center»>
Рисунки:
<?php
$data_file = «img.dat»; //имя файла данных
if (file_exists($data_file)): /*проверяем, существует ли указанный файл данных*/
$data_array = file($data_file); /*заносим строки файла в массив $data_array*/
else:
$error[] = «Файл $data_file не существует»; /*если файла не существует, добавляем в массив ошибок соответствующее сообщение*/
endif;
$cnt = count($data_array)-1; //определяем количество выводимых рисунков
if(!isset($img)) $img=0; /*если не указана страница, то показывать будем первую*/
if (isset($data_array)): /*если массив, содержащий строки файла данных, определен*/
foreach($data_array as $i=>$string) //перебираем массив в цикле
{
/*удаляем разделитель и отделяем имя от описания рисунка в массивы $name и $comment*/
list($name[],$comment[])= explode(«::»,»$string»);
$j=$i+1; //запоминаем номер рисунка
/*Делаем ссылки для перехода в конец и начало галереи соответственно*/
if ($img < $i && $img >= ($i-5)):
echo «<a href=»index.php?img=$i» title=»$comment[$i]»>$j</a> «;
if ($img == ($i-5)): echo «<a href=»index.php?img=$cnt» title=» в конец «>>></a> «;
endif;
elseif ($img == $i):
echo «<b>$j</b> «;
elseif ($img > $i && $img <= ($i+5)):
if ($img == ($i+5)): echo «<a href=»index.php?img=0″ title=» в начало «><<</a> «;
endif;
echo «<a href=»index.php?img=$i» title=»$comment[$i]»>$j</a> «;
endif;
}
endif;
?>
</td>
<td width=»20%» align=»center»>Всего: <?php
echo $cnt+1; /*выводим общее количество рисунков в галереи, добавляем 1, так как отсчет начинался с нуля*/
?>
</td>
</tr></table>
</td>
</tr>
<tr>
<td valign=»top»>
<table width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″>
<tr>
<td align=»center»>
<?php
//вывод рисунка
if (isset($name)): //если определен массив с именами рисунков
foreach($name as $i=>$value) //перебираем весь массив
{
//при нахождении рисунка, который соответствует текущей странице
if ($img == $i)
echo «<img src=»$name[$i]»>»; //выводим рисунок
}
endif;
?>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″>
<tr>
<td align=»center»>
<?php
//вывод комментария
if (isset($comment)):
//перебираем весь массив комментариев
foreach($comment as $i=>$value)
{
if ($img == $i) //если найден комментарий для текущей страницы
echo «$comment[$i]»; /*выводим комментарий из массива, с индексом текущей страницы*/
}
endif;
?>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″>
<tr>
<td align=»center»>
<?php
if ($img == 0): //если выводится первая страница
echo «<< назад</font>»; /*делаем «<< назад» обычным текстом, а не ссылкой*/
else: //иначе
$prev = $img-1; //узнаем номер предыдущей страницы
/*делаем ссылку на предыдущую страницу с текстом «<< назад»*/
echo «<a href=»index.php?img=$prev»><< назад</a> «;
endif;
echo » | «; //разделитель для перехода на следующую страницу
if ($img < $cnt): //если текущая страница не последняя
$next = $img+1; //узнаем индекс следующей страницы
//делаем ссылку «вперед >>» для перехода на следующую страницу
echo «<a href=»index.php?img=$next»>далее >></a> «;
elseif ($img == $cnt): //если текущая страница является последней
echo «далее >></font>»; //выводим «вперед >>» как обычный текст
endif;
?>
</td>
</tr>
</table>
</td>
</tr>
<?php
endif;
?>
</body>
</html>
Все, галерея полностью готова, теперь давайте проверим ее работу. Скопируйте в каталог со сценарием index.php несколько рисунков и опишите их соответствующим образом в файле данных img.dat, по шаблону:
полное имя файла :: любой текст для описания рисунка
После этого посмотрите на вывод в браузере страницы index.php. Все должно работать на ура. На рис. 1 показан результат работы сценария.
Сергей ПАРИЖСКИЙ
Web-droid редактор
Не пропустите интересное!
Підписывайтесь на наши каналы и читайте анонсы хай-тек новостей, тестов и обзоров в удобном формате!


Oppo Pad SE: планшет на долгий день



Новый планшет Oppo Pad SE отличается качественным экраном и большим аккумулятором. Он удобен как при домашнем использовании так и в путешествиях. Расскажем подробнее

Наушники Beyerdynamic Aventho 100 работают 60 часов и имеют ANC Bluetooth наушники
Beyerdynamic Aventho 100 оснащены 4,5-мм динамиками, Bluetooth 5.4 и значительно увеличенное время автономной работы
Ploopy Knob — высокоточный контроллер для прокрутки на ПК компьютер
Ploopy Knob — миниатюрный энкодер предназначенный для точного управления параметрами в профессиональных приложениях