Сделать простой модуль фотогалереи (без использования базы данных) модуль должен работать следующим образом: 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: ?php ini_set('display_errors', 1); error_reporting(E_ALL); Class Gallary { public $category = []; public $album = []; public function getAllCategory($path) { $cdir = scandir($path); foreach ($cdir as $key => $value) { if($value != '.' && $value != '..'){ $info = new SplFileInfo($value); if($info->getExtension()) { array_push($this->category, $value); } } } return $this->category; } public function getAlbum($name) { $cdir = scandir($name); foreach ($cdir as $key => $value) { if($value != '.' && $value != '..'){ array_push($this->album, $value); } } return $this->album; } } $gallary = new Gallary; ?> <style> .cover { border: 10px solid; width: 300px; display: inline-block; vertical-align: top; border-radius: 10px; margin-top: 20px; } .cover:hover { cursor: pointer; } .center { text-align: center; } </style> <div class="center"> <?php foreach($gallary->getAllCategory('gallery') as $category) : ?> <div class="cover"> <img width="100%" src="gallery/<?= $category;?>"> </div> <?php endforeach; ?> </div> <hr> <div> <?php foreach($gallary->getAlbum($_GET['album'] ?? 'gallery/album1') as $image) : ?> <div class="cover"> <img width="300px" class="album-image" src="<?= $_GET['album'] ?? 'gallery/album1';?>/<?= $image;?>"> </div> <?php endforeach; ?> </div> <script> var covers = document.querySelector('.center'); covers.addEventListener('click', function(e){ if(e.target.hasAttribute('src')){ var cover = e.target.getAttribute('src'); var album = cover.replace(/\.[^.]+$/, ""); document.location.href='/?album='+album; } }); </script>
Это типа ты полностью сделал задачу? Ты уверен, что не нужно сделать возможность создать альбом, загрузить в него фото...? Лучше уточни. JavaScript (который ты написал) не нужен.
Ну ООП для любой задачи подходит. Например, побить, как минимум, на сущности Gallery, Album и Photo...
@Dimon2x, главная задача ООП - расширяемость. Т.е. сегодня галлереи на файлах, а завтра будет ещё и на базах, как сделать, чтоб добавление потребовало минимальных изменений. Понятно, что в реале мало кто пишет так каждую строку. Но, как мне кажется, если дают такое задание, то надо суметь на простой задаче показать, что понимаешь, что такое ООП, паттерны и проч. --- Добавлено --- ООП - это не когда написано слово class в программе, если что. --- Добавлено --- Пример хороший - Imagine, которая позволяет одним и тем же кодом работать с изображениями через разные библиотеки.
Модуль чего? Естественно, всю разметку – в шаблон, действия по работе с адресами для шаблона – в метод вьюшки/какой-нибудь хелпер и т.д., и т.п. --- Добавлено --- Сейчас норм., когда все сущности описываются объектами. «ООП головного мозга» называется
ООП везде, почти. --- Добавлено --- Тебе еще есть, куда расти. Например, каждую картинку можно представить объектом
Я после этой фразы почему-то сразу подумал про загрузку: В общем-то поэтому я и предложил уточнить этот момент.