За последние 24 часа нас посетили 22404 программиста и 1148 роботов. Сейчас ищут 566 программистов ...

простой модуль фотогалереи

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 24 окт 2019.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Сделать простой модуль фотогалереи (без использования базы данных)
    модуль должен работать следующим образом:

    1 папка - это 1 альбом
    все файлы в папке - это фотографии в альбоме
    чтобы создать обложку для альбома - нужно использовать такое же название картинки как и у папки, например:
    3 альбома:
    album1.jpg
    album1/
    1.jpg 2.jpg
    3.jpg

    album2.jpg
    album2/
    1.jpg
    2.jpg
    3.jpg

    album3.jpg
    album3/
    1.jpg
    2.jpg
    3.jpg

    album3/ - это папка альбома
    все вложенные в папку файлы - это и есть фотографии альбома
    album3.jpg - это обложка альбома

    дизайн свободный

    для просмотра фотографий можно использовать любой просмотрщик фотографий

    написать с использованием ООП в PHP

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Вот что я сделал, я так понял со временем, что в классе не должно быть html кода.

    PHP:
    1. ?php
    2.  
    3. ini_set('display_errors', 1);
    4. error_reporting(E_ALL);
    5.  
    6. Class Gallary {
    7.    
    8.     public $category = [];
    9.     public $album = [];
    10.    
    11.     public function getAllCategory($path)
    12.     {
    13.         $cdir = scandir($path);
    14.         foreach ($cdir as $key => $value)
    15.             {
    16.                 if($value != '.' && $value != '..'){
    17.                     $info = new SplFileInfo($value);
    18.                     if($info->getExtension()) {
    19.                         array_push($this->category, $value);
    20.                     }
    21.                 }
    22.             }
    23.            
    24.          return $this->category;
    25.     }
    26.    
    27.     public function getAlbum($name)
    28.     {
    29.          $cdir = scandir($name);
    30.            foreach ($cdir as $key => $value) {
    31.                 if($value != '.' && $value != '..'){
    32.                     array_push($this->album, $value);
    33.                 }
    34.             }
    35.             return $this->album;  
    36.         }
    37.  
    38. }
    39.  
    40. $gallary = new Gallary;
    41. ?>
    42.  
    43. <style>
    44.     .cover {
    45.         border: 10px solid;
    46.         width: 300px;
    47.         display: inline-block;
    48.         vertical-align: top;
    49.         border-radius: 10px;
    50.         margin-top: 20px;
    51.     }
    52.    
    53.     .cover:hover {
    54.         cursor: pointer;
    55.     }
    56.     .center {
    57.         text-align: center;
    58.     }
    59. </style>
    60.  
    61.  
    62. <div class="center">
    63.    <?php foreach($gallary->getAllCategory('gallery') as $category) : ?>
    64.            <div class="cover">
    65.            <img width="100%" src="gallery/<?= $category;?>">
    66.            </div>
    67.    <?php endforeach; ?>
    68.  
    69. </div>
    70. <hr>
    71. <div>
    72.      <?php foreach($gallary->getAlbum($_GET['album'] ?? 'gallery/album1') as $image) : ?>
    73.            <div class="cover">
    74.            <img width="300px" class="album-image" src="<?= $_GET['album'] ?? 'gallery/album1';?>/<?= $image;?>">
    75.            </div>
    76.    <?php endforeach; ?>
    77. </div>
    78.  
    79. <script>
    80.     var covers = document.querySelector('.center');
    81.    
    82.  
    83.     covers.addEventListener('click', function(e){
    84.         if(e.target.hasAttribute('src')){
    85.              var cover = e.target.getAttribute('src');
    86.              var album = cover.replace(/\.[^.]+$/, "");
    87.              document.location.href='/?album='+album;
    88.            
    89.         }
    90.      
    91.     });
    92.    
    93. </script>
     
  2. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Это типа ты полностью сделал задачу?
    Ты уверен, что не нужно сделать возможность создать альбом, загрузить в него фото...? Лучше уточни.
    JavaScript (который ты написал) не нужен.
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @brevis Я думал про загрузку, но в описании нету. И не понимаю, для чего для такой задачи ООП.
     
  4. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Ну ООП для любой задачи подходит.
    Например, побить, как минимум, на сущности Gallery, Album и Photo...
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    @Dimon2x, главная задача ООП - расширяемость. Т.е. сегодня галлереи на файлах, а завтра будет ещё и на базах, как сделать, чтоб добавление потребовало минимальных изменений.

    Понятно, что в реале мало кто пишет так каждую строку. Но, как мне кажется, если дают такое задание, то надо суметь на простой задаче показать, что понимаешь, что такое ООП, паттерны и проч.
    --- Добавлено ---
    ООП - это не когда написано слово class в программе, если что.
    --- Добавлено ---
    Пример хороший - Imagine, которая позволяет одним и тем же кодом работать с изображениями через разные библиотеки.
     
    #5 mkramer, 24 окт 2019
    Последнее редактирование: 24 окт 2019
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    тебе он зачем ? есть фун glob
     
  7. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    А если уж говорить про ООП -- есть DirectoryIterator.
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @mkramer я это знаю, что использование классов !== ООП
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    есть много чего, а смысл один и тот же со скандиром - с его дотами и лишними движениями
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Модуль чего? Естественно, всю разметку – в шаблон, действия по работе с адресами для шаблона – в метод вьюшки/какой-нибудь хелпер и т.д., и т.п.
    --- Добавлено ---
    Сейчас норм., когда все сущности описываются объектами. «ООП головного мозга» называется :)
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @miketomlin в смысле сейчас нормально?
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    ООП везде, почти.
    --- Добавлено ---
    Тебе еще есть, куда расти. Например, каждую картинку можно представить объектом :)
     
  13. brevis

    brevis Активный пользователь

    С нами с:
    23 июл 2019
    Сообщения:
    69
    Симпатии:
    20
    Я после этой фразы почему-то сразу подумал про загрузку:
    В общем-то поэтому я и предложил уточнить этот момент.