Программируем картинную галерею на 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 A6 Pro: амбициозный
Новый смартфон Oppo A6 Pro — телефон среднего уровня с функциональностью смартфонов премиум-класса. Производитель наделил его множеством характеристик, присущих более дорогим телефонам. Но не обошлось и без компромиссов. Как именно сбалансирован Oppo A6 Pro – расскажем в обзоре.
Игровой руль Logitech G29 с педалями и коробкой: спорткар на столе
Расскажем про игровой руль Logitech G29 для ПК и PlayStation, а также дополнение в виде 6-ступенчатой коробки скоростей Driving Force Shifter.
Apple Music, Spotify и YouTube Music будут блокировать российскую музыку в Украине война музыка сервис события в Украине
В Украине готовятся к введению ограничений на прослушивание музыки российских исполнителей на популярных стриминговых сервисах, включая Apple Music, Spotify, YouTube Music и другие платформы
Смартфоны скоро могут снова комплектоваться лишь 4 ГБ оперативной памяти из-за дефицита оперативная память смартфон
Нехватка памяти DRAM заставляет производителей просматривать привычные конфигурации устройств и откладывать переход на большие объемы RAM по меньшей мере до 2027 года.


