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

 | 14.56

В проект будут входить два файла: index.php и img.dat, также сразу возьмите несколько рисунков, чтобы потом проверить работу нашей галереи. Файл данных img.dat будет иметь такой синтаксис:

1.jpg::Первая фотография

logo.gif::Logo для PHP

Каждая строчка в файле данных отвечает за один рисунок. Сначала пишется имя файла, затем разделитель :: (два двоеточия), после чего идет описание, которое будет находиться под выводимым рисунком. В первой строке мы сначала указываем имя файла — 1.jpg, а затем описание к нему — Первая фотография. Во второй строке идет аналогичная шаблонная запись, только изменено имя файла и установлено соответствующее описание к нему. Как видим, формат рисунка не имеет значения, главное, чтобы он поддерживался вашим браузером.

Теперь напишем сценарий, который будет работать с файлом данных img.dat. Создайте сценарий index.php и напишите в нем такой код:

;lthtml;gt

;lthead;gt

;lttitle;gtГалерея;lt/title;gt

;lt/head;gt

;ltbody;gt

;ltp align=»center»;gt

 

;lttable width=»600″ border=»1″ cellspacing=»0″ cellpadding=»5″ align=center;gt

 ;lttr;gt

 ;lttd valign=»top»;gt

   ;ltb;gt;ltcenter;gtГалерея;lt/center;gt;lt/b;gt

 ;lt/td;gt

 ;lt/tr;gt

 

;lt?php

if ($QUERY_STRING == «» || ereg(«^img»,$QUERY_STRING)): /*проверка передачи параметрам сценарию*/

?;gt

 ;lttr;gt

 ;lttd;gt

   ;lttable width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″;gt;lttr;gt;lttd width=»50%» align=»center»;gt

    Рисунки:

    ;lt?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=;gt$string) //перебираем массив в цикле

      {

/*удаляем разделитель и отделяем имя от описания рисунка в массивы $name и $comment*/

      list($name[],$comment[])= explode(«::»,»$string»);

      $j=$i+1; //запоминаем номер рисунка

/*Делаем ссылки для перехода в конец и начало галереи соответственно*/

      if ($img ;lt $i && $img ;gt= ($i-5)):

        echo «;lta href=»index.php?img=$i» title=»$comment[$i]»;gt$j;lt/a;gt «;

        if ($img == ($i-5)): echo «;lta href=»index.php?img=$cnt» title=» в конец «;gt;gt;gt;lt/a;gt «;

          endif;

      elseif ($img == $i):

        echo «;ltb;gt$j;lt/b;gt «;

      elseif ($img ;gt $i && $img ;lt= ($i+5)):

        if ($img == ($i+5)): echo «;lta href=»index.php?img=0″ title=» в начало «;gt;lt;lt;lt/a;gt «;

          endif;

        echo «;lta href=»index.php?img=$i» title=»$comment[$i]»;gt$j;lt/a;gt «;

      endif;

      }

    endif;

    ?;gt

   ;lt/td;gt

   ;lttd width=»20%» align=»center»;gtВсего: ;lt?php

 echo $cnt+1; /*выводим общее количество рисунков в галереи, добавляем 1, так как отсчет начинался с нуля*/

?;gt

   ;lt/td;gt

   ;lt/tr;gt;lt/table;gt

 ;lt/td;gt

 ;lt/tr;gt

 ;lttr;gt

 ;lttd valign=»top»;gt

   ;lttable width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″;gt

    ;lttr;gt

     ;lttd align=»center»;gt

     ;lt?php

//вывод рисунка

     if (isset($name)): //если определен массив с именами рисунков

     foreach($name as $i=;gt$value) //перебираем весь массив

       {

//при нахождении рисунка, который соответствует текущей странице

       if ($img == $i)

echo «;ltimg src=»$name[$i]»;gt»; //выводим рисунок

       }

     endif;

     ?;gt

     ;lt/td;gt

    ;lt/tr;gt

    ;lt/table;gt

   ;lt/td;gt

 ;lt/tr;gt

 ;lttr;gt

   ;lttd;gt

    ;lttable width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″;gt

     ;lttr;gt

     ;lttd align=»center»;gt

     ;lt?php

//вывод комментария

     if (isset($comment)):

//перебираем весь массив комментариев

     foreach($comment as $i=;gt$value)

       {

       if ($img == $i) //если найден комментарий для текущей страницы

echo «$comment[$i]»; /*выводим комментарий из массива, с индексом текущей страницы*/

       }

     endif;

     ?;gt

     ;lt/td;gt

     ;lt/tr;gt

    ;lt/table;gt

   ;lt/td;gt

 ;lt/tr;gt

 ;lttr;gt

   ;lttd;gt

    ;lttable width=»595″ border=»0″ cellspacing=»2″ cellpadding=»4″;gt

     ;lttr;gt

     ;lttd align=»center»;gt

     ;lt?php

     if ($img == 0): //если выводится первая страница

        echo «;lt;lt назад;lt/font;gt»; /*делаем «;lt;lt назад» обычным текстом, а не ссылкой*/

     else: //иначе

        $prev = $img-1; //узнаем номер предыдущей страницы

/*делаем ссылку на предыдущую страницу с текстом «;lt;lt назад»*/

        echo «;lta href=»index.php?img=$prev»;gt;lt;lt назад;lt/a;gt «;

     endif;

     echo » | «; //разделитель для перехода на следующую страницу

     if ($img ;lt $cnt): //если текущая страница не последняя

        $next = $img+1; //узнаем индекс следующей страницы

//делаем ссылку «вперед ;gt;gt» для перехода на следующую страницу

        echo «;lta href=»index.php?img=$next»;gtдалее ;gt;gt;lt/a;gt «;

     elseif ($img == $cnt): //если текущая страница является последней

        echo «далее ;gt;gt;lt/font;gt»; //выводим «вперед ;gt;gt» как обычный текст

     endif;

     ?;gt

     ;lt/td;gt

     ;lt/tr;gt

    ;lt/table;gt

   ;lt/td;gt

 ;lt/tr;gt

;lt?php

endif;

?;gt

;lt/body;gt

;lt/html;gt

Все, галерея полностью готова, теперь давайте проверим ее работу. Скопируйте в каталог со сценарием index.php несколько рисунков и опишите их соответствующим образом в файле данных img.dat, по шаблону:

полное имя файла :: любой текст для описания рисунка

После этого посмотрите на вывод в браузере страницы index.php. Все должно работать на ура. На рис. 1 показан результат работы сценария.

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

Robo User
Web-droid editor

Додати коментар

Ваша email адреса не буде опублікована.