Создание галереи фото

Главные вкладки

Аватар пользователя Savva Savva 16 декабря 2007 в 16:09

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

Необходим следующий функционал:
1) Админ создает разделы фотогалереи
2) Авторизованные пользователи могут добавлять свои фотографии в каждую галерею (нужно, чтобы процесс добавления был максимально облегчен), но сами создавать галереи не могут. Доп. возможность (необязательная): выставлять ограничения на добавления кол-ва фотографий за сутки.
3) При нажатии на фотографию в этом же окне появляется ее увеличенное изображение (на JS видимо)

Понравилась реализация пунктов 1 и 2 - http://mctb.ru/?id=195 (но это не друпал)
А здесь пункта 3 - http://martproject.ru/node/67

У кого какие идеи? Может быть кто-нибудь реализовывал подобное?

Комментарии

Аватар пользователя Savva Savva 17 декабря 2007 в 16:39

Думаю, что буду использовать связку модулей image + thickbox.

Теперь возник вопрос по использованию image (не нашел этого нигде на сайте).
Хочу, чтобы под каждой галереей была форма добавления фотографии в эту галерею (как в http://mctb.ru/?id=195 ).
Стандартной реализации этого в модуле нет, поэтому пытаюсь сделать сам. Опытным путем нашел, что форма должна прописываться в функции image_gallery_page() (image_gallery.module) в переменной $content. Вопрос состоит в том, как именно прописать эту форму.

Аватар пользователя Savva Savva 17 декабря 2007 в 17:00

К сожалению, нет. Аудитория сайта не очень просвещенная. Для них понять такой процесс добавления будет невероятно трудно Wink

Да и к тому же хочется, чтобы форма содержала только два поля: file (для загрузки самой фотографии) и text (для ввода названия фотографии).

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 19 декабря 2007 в 18:00

Напишите код формы (его можно взять со страницы добавления image) и вставьте в блок. Блок показывайте только на страницах галереи.

Аватар пользователя Savva Savva 24 декабря 2007 в 17:38

Так и пытаюсь сделать. Вставил в файл image_gallery.module следующий код (все переменные взял со страницы добавления изображений и поставил в hidden, чтобы передать все нужные значения):
<?php

if ($tid) $content= $content."

Название: *
Фотка:

";

?>
В результате - код формы отображается верно, но после нажатия SUBMIT отсылает на node/add/image и при этом не обрабатывает полученные данные (т.е. сама фотография не появляется)

Аватар пользователя Savva Savva 24 декабря 2007 в 17:36

Вобщем, я реализовал так:

1) Создал страницу (node) с full html-кодом:

<br><br>
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100px" valign="top" align="left">
<tr>
<td>
<label for="edit-title">Добавить фотку:</label>
<Br>
<form action="/node/add/image" method="post" enctype="multipart/form-data">
<label for="edit-title">Название: <span class="form-required" title="Это поле необходимо заполнить.">*</span></label>
<input type="text" maxlength="30" name="title" id="edit-title"  size="20" value="" class="form-text required">
&nbsp; &nbsp; &nbsp; &nbsp;
<input type="file" name="files[image]" class="form-file" id="edit-image" size="20">
<input type="hidden" name="taxonomy[1]" value="____TID____">
<input type="hidden" name="changed" value="">
<input type="hidden" name="images[_original]"  value="">
<input type="hidden" name="images[thumbnail]" value="">
<input type="hidden" name="images[preview]"  value="">
<input type="hidden" name="body" value="">
<input type="hidden" name="format" value="1">
<input type="hidden" name="form_token" value="d2b8318fd5de4bbee23af84f1bde3015">
<input type="hidden" name="form_id" value="image_node_form">
<input type="hidden" name="log" value="Adding image by user ____USERNAME____">
<input type="hidden" name="comment" value="2">
<input type="hidden" name="pathauto_perform_alias" value="1">
<input type="hidden" name="path" value="">
<input type="hidden" name="menu[title]" value="">
<input type="hidden" name="menu[description]" value="">
<input type="hidden" name="menu[pid]" value="1">
<input type="hidden" name="menu[path]" value="">
<input type="hidden" name="menu[weight]" value="0">
<input type="hidden" name="menu[mid]" value="0">
<input type="hidden" name="menu[type]" value="86">
<input type="hidden" name="name" value="____USERNAME____">
<input type="hidden" id="edit-name-autocomplete" value="http://mysite.ru/user/autocomplete" disabled="disabled" class="autocomplete">
<input type="hidden" name="date" value="">
<input type="hidden" name="status" value="1">
<input type="hidden" name="promote" value="0">
<input type="hidden" name="sticky" value="0">
<input type="hidden" name="revision" value="0">
<input type="submit" name="op" id="edit-submit" value="Отправить"  class="form-submit">
</form>
</td>
</tr>
</table>

2) Добавил в image_gallery.module функцию:

<?php
function add_simple_form($tid) {
global $user;
// Запрашиваем массив $user (будет нужен для извлечения имени пользователя)

$node_id='999' // Номер node с кодом из пункта 1.

$query = "SELECT node_revisions.body from node_revisions where nid='".$node_id."' ";
// Создаем запрос для извлечения кода из нужной ноды

$result = db_query($query);
$arr = db_fetch_array($result);
$output = $arr['body'];
// Обрабатываем запрос и записываем результат в переменную $output

mysql_free_result($result);
// Убиваем $result

$output=str_replace("____TID____",$tid,$output);
// Заменяем в коде из пункта 1 "____TID____" на номер галереи, в которой используется форма

$output=str_replace("____USERNAME____",$user->name,$output);
// Заменяем в коде из пункта 1 "____USERNAME____" на имя юзера, который использует форму

return $output;
// Возвращаем результат функции
}
?>

3) И затем в самый конец функции image_gallery_page() добавил:

<?php
$content .= add_simple_form($tid); // Добавляем форму в вывод страницы
?>

Плюсы этого метода:
1) Максимально простая форма для "не самых продвинутых" пользователей Wink
2) Удобное добавление фотографий для пользователей, не требующее знаний дерева фотогалерей

Минусы этого метода:
1) Если форма заполнена неверно, то все равно произойдет редирект на node/add/image
2) ... (больше и не придумаю минусов, если есть - пишите)

Теперь думаю над настройкой вывода страницы фотогалереи (хочется сделать таблицей, чтобы большие подписи не выходили за границы рамки сайта (дизайн нерезиновый)).