Программируем картинную галерею на php

 

В проект будут входить два файла: 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 показан результат работы сценария.

 

 

Сергей ПАРИЖСКИЙ

Avatar photo
Robo User
Web-droid редактор

Не пропустите интересное!

Підписывайтесь на наши каналы и читайте анонсы хай-тек новостей, тестов и обзоров в удобном формате!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читайте також Read more




Статьи & тестыArticles

Обзор смартфона Oppo A6 Pro: амбициозный Oppo A6 Pro (CPH2799)

Новый смартфон Oppo A6 Pro — телефон среднего уровня с функциональностью смартфонов премиум-класса. Производитель наделил его множеством характеристик, присущих более дорогим телефонам. Но не обошлось и без компромиссов. Как именно сбалансирован Oppo A6 Pro – расскажем в обзоре.


Игровой руль Logitech G29 с педалями и коробкой: спорткар на столе Logitech G29 Driving Force Racing Wheel

Расскажем про игровой руль Logitech G29 для ПК и PlayStation, а также дополнение в виде 6-ступенчатой коробки скоростей Driving Force Shifter.


НовостиNews
| 18.54
Apple Music, Spotify и YouTube Music будут блокировать российскую музыку в Украине    
concert music

В Украине готовятся к введению ограничений на прослушивание музыки российских исполнителей на популярных стриминговых сервисах, включая Apple Music, Spotify, YouTube Music и другие платформы

| 15.50
Смартфоны скоро могут снова комплектоваться лишь 4 ГБ оперативной памяти из-за дефицита  
Samsung Galaxy S21

Нехватка памяти DRAM заставляет производителей просматривать привычные конфигурации устройств и откладывать переход на большие объемы RAM по меньшей мере до 2027 года.