Фотогалерея для PHP-копателей
Представляю широкой публике фотогалерею, безвозбезддо, т.е дадом.
Я не «С»-шник, я Дельфофил, посему мыслю именно синтаксисом Дельфи, «С» воспринимаю, как печальную неизбежность наших дней.
И так, внедрение в Joomlo –модулей галереи имени Пчока мне не удалось. Всё бесплатное страдает безобразным описанием, по сему напрягся и сделал свою галерею. Конечно не без ошибок и глупостей, но она работает, и для искателя решений попытаюсь объяснить доходчиво что надо, чтобы сие заработало у всякого.
- MySql – не нужно
- Пополнение фотогалереи с помощью ftp-доступа, ибо тот, кто хочет сделать у себя галерею должен обладать правами на общение с хостингом.
- Текстовое описание к каждой фотографии
- Фотография отражается поверх окна
- Навигация щелчком мыши по правой стороне фото – вперед, и по левой стороне, соответственно - назад.
Пример, как это выгладит здесь:
http://www.ironcop.keklab.ru/materials/manpup_img/index.php
Текст на PHP и на Javascript:
http://www.keklab.ru/buf/prog/galery.zip
Прежде всего на хосте надо сделать директорию:
www.hostname.ru/myphoto - здесь расположены рисунки кнопок навигации:
left_0.png
left_1.png
right_0.png
right_1.png
exit_0.png
Директория, посвященная конкретной теме:
www.hostname.ru/myphoto/myfamily - Здесь лежит файл «index.php». Все эти названия директорий не отражены пока в тексте, а вот далее идет привязка к названиям директорий:
www.hostname.ru/myphoto/myfamily/gallery/ - Там лежат фотоматериалы. Их количество в моем случае не превышало сотни. Ведь они посвящены определенной теме, а тем может быть сколько угодно в других таких же по структуре директориях.
www.hostname.ru/my_photo/myfamily/gallery/mini - Здесь лежат фотоматериалы, уменьшенные, так, что высота изображения равна 80 пикселям.
В каком порядке будут отражаться фотографии? В том, как вы их назовете: 00.jpg, 01.jpg и т. д. Это важно, так как подписи к фотографиям должны быть расположены в файле «msg.txt» в директории «gallery». Структура файла «msg.txt» проста: Первая строка название темы, далее строки сочетаются с названием файла. Если названия к фоткам не нужно, то и обзывать файлы не придется и они будут показываться в очередности, которая будет достигнута при сортировке названий, порядок всегда при этом какой-то есть. Переменная enable_caption_image = true; - разрешает показ текста под фотографиями.
Всё, структура создана. Единственный вопрос, как ресайзить фотки, если их много? Я пользовался Quick Photo Resizer. Теперь по тексту. Комментарии писать нет времени но по крупным вехам пройдусь. Вначале идет PHP-шный код. Надо ведь что-то сделать на серваке, а именно сосчитать количество файлов изображений, определить их названия, отсортировать эти названия и составить массив:
- $msgimg[] – подписи к фотографиям из файла «msg.txt»
- $images[] - названия файлов изображений
Далее сформировать и определить переменные в клиентской части, которые неизменны и будут работать в скриптах.
function showBigImage(ppp) – основная феня, подсмотрел у человека и понял как это живет, человек, конечно хотел заработать на этом, мы ему крылья-то подрежем…
function refresh_screen() – когда читатель вдруг захотел уменьшить окно почему-то, надо и фотки расположить опять по центру вновь образованной области.
function SetNaviImg() – это все красоты для. Навигационные кнопки живут своей жизнью и показывают, что мол конец, фотки кончались и такать в правую кнопку больше не надо, а то мышь сдохнет…
function shiftNavi(dir) – морочился с этой штукой. Суть в том, что количество файлов может быть любым, а представить маленькие фотографии в строго регламентированном месте (в данном случае в таблице 6 Х 4) надо… И сдвигать всю эту кучу фоток надо правильно, и пустые места надо оформлять. Вот как сделать, чтоб изображение не показывалось в ячейке? Я не нашел ничего лучше, чем сделать фото с width = 0. Наверняка есть более элегантный способ, но искать замаешься…
"<table border="0" style="width: 884px;" id="table1">" - с этого места создается таблица и в каждой её ячейке создается маленькое изображение из директории «mini»
Вот две строки вельми важные, тоже подсмотрел, тут слои создаются:
echo'<div id="previewBgDiv" onclick="hideBigImage()"></div>
<div id="previewCanvaDiv" style="display:none;position:absolute;" onclick="imouse_click()">';
Бился с этим долго. Одни браузеры хотят показывать, другие нет, все дело в этой фразе: " style="display:none;position:absolute;" Да и черт с ней с полупрозрачностью, и так пойдет. Ну и под конец, конечно «Mozilla firefox» дал жару. Ведь как корабль назовешь, так он и поплывет, кто придумал слово такое Мозила? Короче промазал это браузер, не хочет обрабатывать переопределенное событие нажатия клавиши мыши function imouse_click() . Ну, промазал и промазал и черт с ним, его этого Мазилы от силы 5% в мире. На этом все. Чего бы хотелось в перспективе добавить:
- Ну ресайзинг тоже можно в PHP сочинить, задал параметры размера маленькой картинки и все.
- Если картинки разного размера и формфактора, то начинается свистопляска. Выскакивает таблица, потом старая фотография уезжает в край экрана, потом, когда подтягивается нужное изображение все встает. Надо во всем этом разобраться, с последовательностью исполнения кода каждым браузером, запрещать показ, пока грузится фотка. А лучше всего сделать плавное микширование, это будет высший пилотаж!
- Ну и с Мазилой разобраться.
Вот здесь ошибку выдает отладчик при первой загрузке документа, не знаю что ему нужно… function imouse_click(). Но все и так работает…
Отдельное спасибо Круглову: http://www.kruglov.ru/. Он попытался сделать кроссбраузерную идею, я пока не внедрил его знания, но решение там для Мозилы есть.
Удачи всем искателям ява скриптов, будь они не ладны эти скрипты!P.S. Вот честно, кто в Дельфях программировал, тот поймет. Ну ублюдочный язык, не нашел нормального отладчика по шагам, который бы и PHP сочетал и java script. В Дельфях, например, ты не знаешь очередность событий, запустил отладчик, поставил точки останова и все узнал, здесь черт ногу сломить… А этот синтаксис убогий! Сишники красноглазые все наровят побыстрей и покороче написать:
Вот что это за фраза? screenWidth = isDOM ? document.body.clientWidth : innerWidth; Не знаю и знать не хочу! Там где побыстрей напишешь, там и ошибки плодятся, это факт. А Сишники потому красноглазые, что ночами сидят и ошибки свои исправляют и спать им некогда…ошибок очень много в их убогом птичьем языке.
Обновлено (23.02.2011 07:13)