Представляю широкой публике фотогалерею, безвозбезддо, т.е дадом.

Я не «С»-шник, я Дельфофил, посему мыслю именно синтаксисом Дельфи, «С» воспринимаю, как печальную неизбежность наших дней.

И так, внедрение в 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)

 
Новости электроники от РадиоЛоцмана
Вопросы искусственного интеллекта, философия и практика
. @Mail.ru