|
|
|
| Некоторое время назад потребовалось создать фотогалерею для сайта, брать готовую не очень хотелось. Попробовать что-то сделать самому впервые всегда намного интереснее.
Всё вроде бы не плохо работает, но есть один нюанс, по поводу которого, собственно говоря я и хотел бы проконсультироваться у форумчан.
Для каждого альбома создаётся директория и фото хранятся там в виде (Xm.jpg - превьюшка Xb.jpg - оригинал, где X - номер фото). Есть ли более удобный способ хранить файлы? Или мой способ тоже не плох? | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:04)
| | что происходит с нумерацией при удалении / добавлении фотографии?
Способ как способ, если при этом вся остальная функциональность не страдает... | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 00:16)
| | При удалении просто удаляется 2 файла с текущим номером.
При добавлении я делал так:
for($count=0; $count<count(glob($dir.'[0-9]*'.($w == 800?'b':'m').'.{jpeg,jpg,gif,png}', GLOB_BRACE)); $count++);
$file = ($count+1).($w == 800?'b':'m').'.jpg';
|
Неудобство состоит в том, что когда приходит время выводить альбом, то цикл идёт от 1 до (*m.jpg) и приходится делать для каждой фото перед выводом проверку на существование. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:24)
| | count(glob($dir.'[0-9]*'.($w == 800?'b':'m')..... лучше высчитывать до цикла, а не в теле его, ведь у вас это связано со сканированием дериктории, а значит происходит с каждой итерацией цикла. А разве только способом for и по его номеру итерации можно вывести изображения? | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 00:32)
| | ну можно ещё while использовать, а что есть другие предложения? :)
Можно по подробнее, почему count(glob($dir.'[0-9]*'.($w == 800?'b':'m')..... будет вычисляться с каждой итерацией цикла? | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:38)
| | потому что оно вычисляется как часть выражения $count<count(glob(...))
а это выражение вычисляется перед каждым повтором цикла.
Уж коль скоро Вы получили от glob() массив, то почему по этому массиву не пройтись?
Между прочим, если номер фото держать с ведущими нулями (000035), то по циклу даже бежать не потребуется - нужно будет просто взять последний элемент массива.
UPD. Как я понимаю, галерея без БД, и не поддерживает ни комментарии к фотографиям, ни оценки .
Основная масса казусов начнется при попытке прикрутить к ней дополнительные возможности. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 00:47)
| | Галерея с БД, там есть подписи к фото, названия альбомов. А какой смысл проходится по массиву, если есть count()?
Держать фото с ведущими нулями - это ограничение на количество фото, хотя врядли их будет в альбоме больше чем 999 999 :) | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 02:28)
| | Если галерея с БД, то обычно генерация ключа любого объекта возложена на БД.
Имя фото определяется ключом записи таблицы.
И выполнять ресурсоемкие операции по сканированию каталогов не требуется.
>Держать фото с ведущими нулями - это ограничение на количество фото, хотя врядли их будет в альбоме больше чем 999 999 :)
и поскольку в ограничения диска Вы упретесь раньше, им спокойно можно пренебречь. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 08:41)
| | >Если галерея с БД, то обычно генерация ключа любого объекта возложена на БД.
>Имя фото определяется ключом записи таблицы.
>И выполнять ресурсоемкие операции по сканированию каталогов не требуется.
А можно подробнее? Дело в том, что подписи имеются не к каждой фотографии. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 14:25)
| | >Дело в том, что подписи имеются не к каждой фотографии.
А можно подробнее? подписи подписями, но фотографии-то имеются все? | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 14:33)
| | фотографии-то имеются все, но хранятся они не в БД. у меня в базе описание привязывается к номеру фото, под которой оно сохранено. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 14:42)
| | >фотографии-то имеются все, но хранятся они не в БД. у меня в базе описание привязывается к номеру фото, под которой оно сохранено.
А нужно сделать наоборот.
Чтобы фото привязывалось к записи в таблице.
Поле описания в этой записи можно оставить пустым (или пустой строкой), если что.
Генерация html-кода при этом окажется менее затратной. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 14:48)
| | Получается что я выигрываю только в том, что могу взять количество записей в БД для конкретного альбома, а не сканировать директорию на количество файлов, верно? | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 15:16)
| | Когда Вы строите HTML-код с со страницей галереи, Вы сканируете каталог с изображениями?
Не для вывода количества - для вывода самих <img src=... > ?
Да, потому как иначе их имена взять Вам негде.
В случае первичности БД Вам не придется это делать. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 16:25)
| | по сути говоря я сканирую каталог всего один раз, потом заношу количество превьюшек в переменную и использую её. При выводе самих изображений используется функция разбиения на страницы.
Стоит ли оно вообще того? Насколько больше я выйграю в скорости между сканированием директории glob() и одним запросом к БД mysql_query()? | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 18:59)
| | >Стоит ли оно вообще того?
А это уж Вам решать. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 18:59)
| | Это как посмотреть еще.... Все завист от того, что ваша галерея показывает - либо гольные картинки, либо еще в довесок контент к ним и прочие вкусности. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 19:26)
| | Галерея отображает картинки и их увеличенные копии с подписями. Просто хотелось проконсультироваться по поводу того, правильный ли я подход выбрал изначально и какие существуют альтернативные подходы. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 19:37)
| | Вы проконсультировались.
Я изложил Вам альтернативный подход.
Вам он не нужен.
Он понадобится тому, кто будет переделывать галерею после Вас.
Совершенно очевидно, что при нормализованной схеме хранения данных этот разработчик будет материться [на порядок-два] меньше, чем при той, что сейчас.
что может быть добавлено к возможностям, я тоже указал. Оценки, отзывы, голосования.
Ограничения в правах доступа к. Объединения в ленты.
Всё это потребует четкой организации данных, которую без аккуратной схемы БД достичь очень тяжело. | |
|
|
|
|
|
|
|
для: Trianon
(08.07.2009 в 19:41)
| | Да спасибо Вам большое!
Я подумаю, и может-таки переделаю ;) Просто дело в том что сайт информационного характера и в комментариях и оценках фото нет никакого смысла в данном случае. А на будущее обязательно учту сей полезный факт. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:38)
| | А как вы думаете? Условия прописанные в for будут вычислятся при каждой итерации цикла, и если они затратные, то не стоит загружать этими вычислениями цикл. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 00:48)
| | Ясно, просто думал что условие выхода из цикла считается один раз на первой итерации | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:50)
| | Тогда оно окажется истинным и (если его не пересчитывать) цикл никогда не закончится. | |
|
|
|
|
|
|
|
для: Keyses
(08.07.2009 в 00:50)
| | $i=0; $i<35; $i++ - можете писать, и на быстродействие это не скажется, но вот $i<чего там Х, будет вычисляться, и если это внутри функции происходит, а не вне ее, скажется на быстродействии. Можете проверить два варианта и сравнить. | |
|
|
|
|
|
|
|
для: sim5
(08.07.2009 в 00:58)
| | уже осознал :) | |
|
|
|