Кастомизация модуля Image
Что это за модуль такой и с чем его едят? И какие у него возможности?
Наверное любой, кто знаком с Drupal, хоть раз себе на локальном сервере и не только ставил этот модуль. Я не буду здесь переводить документацию, но просто расскажу об особенностях и удобстве этого модуля.
Входящие модули:
- Image - собственно сам модуль image, который создает новый тип документа image, в котором появляется поле для загрузки изображения.
- Image Attach - Позволяет прикрепить одно изображение к любому документу любого типа. При этом если изображение, которое вы хотели бы показать в документе уже загружалось ранее, можно выбрать его по названию из выпадающего списка.
- Image Gallery - Создает словарь Image Galleries, а галереи, которые вы создадите с помощью модуля, будут являться терминами этого словаря. То есть присутствует множественная вложенность. Галерея может содержать и фотографии, и другие галереи.
- Image Import - Полезный модуль для массового создания документов типа image.
- Загружаете в папку files/image/import ваши фотографии (через FTP клиент),
- переходите на страницу Содержание → Импорт изображений,
- отмечаете те фотографии, которые хотите импортировать флажками (только не забудьте, а-то после того как вы введете названия и описания для каждой, но ничего не отметите, ваши усилия пропадут зря),
- редактируете заголовок и описание ваших фотографий,
- выбираете в какую галерею всех их поместить
- нажимаете на кнопку .
Вот и все. В галерее появятся все эти фотографии, начиная с самой нижней (то есть нижняя в списке при импорте будет на самом верху в галерее)
Остальные модули идут вместе с ним и представляют собой средства, расширяющие главный модуль.
По-моему, идеальный вариант для тех, кто создает много галерей на сайте с одним владельцем. Например, блоггер, рассказывающий о путешествии в дневнике и дающий под фоткой ссылку на галерею, где можно посмотреть остальные фотографии с путешествия.
Итак, что же мы хотим изменить в стандартных возможностях, предоставленных этими модулями?
- Конечно же, добавить ссылку на галерею у прикрепленного изображения. Мол, посмотреть это путешествие можно в такой-то галерее.
- Сделать сносное листание фотографий в рамках одной галереи. Без Ajax, конечно, но чтобы симпатично. Например, основная фотография по центру, а ниже: предыдущая в виду миниатюры слева и следующая в виде миниатюры справа.
- И чтобы было так: в дневнике прикрепленное изображение небольшого размера, а в галерее у всех фотографий максимальный размер, то есть чтобы посмотреть во всю ширину колонки каждый раз не приходилось жать на ссылку "Оригинал".
Не знаю, понятно ли я объяснила последний пункт, но вот что мы имеем в данном модуле по умолчанию:
Существует возможность настроить 3 размера для изображения. Все они хранятся в папке files/image:
- Original (оригинал, можно настроить ресайз, чтобы фотография уменьшалась до ширины основной колонки и не вылезала за края),
- Thumbnail (минитюра, обычно самый маленький размер, используется при просмотре галереи),
- Preview (средний размер).
Настроить их можно на странице Настройка → Изображение. Там же можно указать, показывать ли ссылки на другие размеры (три опции: Same Window, New Window и Hidden, что, соответственно, означает: Открывать в том же окне, Открывать в новом окне (это будет ссылка на файл JPG) или не показывать ссылку вообще.
Также есть возможность указать, в каком размере показывать фотографию в тизере и в полной ноде каждого типа документа, к которому вы прикрепляете изображения с помощью Image Attach. Для этой настройки пройдите на страницу Содержание → Типы документов и нажмите "редактировать".
Допустим, в тизере у нас будет Preview, в полной ноде тот же размер - Preview. Но мы хотим, чтобы при переходе по этой картинке в просмотр изображения в галерее нам показывался не Preview, а Original. И при листании изображении тоже всегда был Original. Стандартно это сделать нельзя. Модуль будет направлять вас на страницу с тем размером, который был в полной ноде. И при листании фотографий тоже будет одно Preview. Только ссылка Original даст возможность посмотреть полную версию фото.
Вот поэтому нужно заглянуть в код модуля Image, чтобы найти функцию вывода изображения и поменять значение на нужное вам.
795 строка файла image.module:
<?php
/**
* Theme a body
*/
function theme_image_body($node, $size) {
return image_display($node, $size);
}
?>Что говорит нам эта функция? Что она отображает фотографию в заданном размере. То есть нам всего лишь нужно заменить размер и вместо theme написать phptemplate:
<?php
/**
* Theme a body of image node
*/
function phptemplate_image_body($node, $size) {
return image_display($node, IMAGE_ORIGINAL);
}
?>Такие функции, предназначенные для вывода информации, можно найти в каждом модуле, и, чтобы не править непосредственно сами файлы модуля, чтобы потом иметь проблемы при обновлении, хорошим тоном будет перекрывать их в файле template.php вашей темы. (За это я очень люблю Drupal!)
Теперь выведем ссылку под фотографией при показе прикрепленного изображения. Для этого нужно знать номер (vid) словаря Image Galleries и перекрыть функцию вывода изображения в полной ноде.
Заходим в папку modules/image/contrib/image_attach, находим файл image_attach.module и в 463 строке видим функцию theme_image_attach_body($node). Немного разобравшись в том, что в ней означает $node->iid, мы получаем:
Я сама начинающий программист. Что мне помогает? Умение искать информацию и смекалка. Я сходила на http://api.drupal.org/, посмотрела функции, содержащие слово term, затем набрала в Поисковике по drupal.org фразу в кавычках "taxonomy_node_get_terms_by_vocabulary" и по примеру написала для себя. Вы тоже так можете если не знаете PHP хорошо.
Ну и напоследок десерт: листание страниц. То, что предлагается в drupal.handbook громоздкое и тяжелое. Я выбрала облегченный вариант и облегчила для себя еще больше. Получился отдельный сниппет.
Что он делает: формирует массив фотографий для отображения внизу документа типа Image. Формирует ссылки на них в виде миниатюры и названия (оно отображается под миниатюрой). И еще определяет, куда ведет ссылка - следующее или предыдущее фото - и облекает в соответствующий div.
Далее создаем для вывода документов типа image node-image.tpl.php (если у вас его нет, то скопируйте node.tpl.php и измените имя).
Рекомендую облечь <?php print $content ?> в div, отличный от того, что по умолчанию в node.tpl.php и прописать у него css {text-align:center;margin:0 0 20px;}, чтобы основная фотография была по центру, и чтобы миниатюры не напирали на нее.
А после закрытия этого div нужно вставить вот такой код:
<?php if ($page != 0 && $terms) { ?>
<div class="pager_img">
<?php print custom_pager_thumbnails($node->nid); ?>
</div>
<?php } ?>Именно он выведет наши миниатюры.
Вот мы и разобрались со всем, что хотели.
Такие возможности есть у нас по умолчанию:
- Возможность создавать неограниченное количество галерей, в том числе вложенных.
- Возможность создавать много документов типа image на лету, при это они все будут помещены в галерею, у каждого будет название и даже описание.
- Возможность прикрепить к другим типам документов изображение - загрузить при создании материала (правда в этом случае нет возможности поместить его в галерею сразу) или выбрать из уже загруженных.
И, дополнительно потрудившись, мы добились:
- Возможность перехода на следующее и предыдущее изображение в галерее по клику на миниатюре.
- Просмотр максимального размера фотографии в галерее без необходимости нажимать на ссылку "Оригинал". Даже если мы пришли на страницу по клику на фотографии небольшого размера.
- Ссылка под прикрепленным изображением приведет нас в галерею, которой оно принадлежит.
Надеюсь, этот материал покажется кому-то полезным.

Очень интересно Вы пишете о Drupal! И это здорово, ведь для этой замечательной системы так мало руководств по тонкой настройке.
> Надеюсь, этот материал покажется кому-то полезным.
Очень полезным! Спасибо.
Спасибо большое. Вот бы еще побольше комментариев оставляли мои читатели, было бы вообще супер!
а перевода этого модуля нет?
Все свежие переводы ищите на Drupaler.ru
А если у нас три типа материала типа имидж:
фото 1 (имидж по умолчанию)
фото 2 (клон 1)
фото 3 (клон 2)
Будет ли тогда работать галлерея?
По крайней мере, у меня сейчас добавляются типы материалов все, а вот галлерея показывает только с типом материала по умолчанию.
А где вообще настраивается вид галлереи?
Ну могу изменить количество фотографий, ну добавить кто запостил...
А вот, если я не хочу чтоб заголовки показывались?
Или ваще у меня превьюхи не показываются...
что тогда?
Я не могу догадаться с какой версией вы работаете, поэтому подсказать по вашим вопросам мне трудно. Если не нашли настроек в модуле для решения ваших задач, тогда берите template.php вашей темы и пытайтесь переопределять функции вывода (как делать на примере показано выше в посте).
Вообще помню что информацию об авторе можно выводить, отметив где-то галку.
Кол-во фото на странице галереи тоже можно настроить в админке.
Насчет клонов типа материала я не знаю...
Версия стоит 5-я.
Меня интересует два вопроса:
1. Где подключаются превьюшки на странице галлерей.
То есть, есть список галлерей, фходим туда, где есть фотки. И там под заголовками стоят превьюшки. То есть должны быть, но их там нет
Просто раньше у меня галлерея была создана на таксономии, но она использует стандартную вьюху. А мне эту вьюху нужно использовать не только для галлереи, но и для вывода различных списков. Поэтому обратился к этой галлереи. Но столкнулся с проблемами.
2. Галлерея работает только с одним типом материалов (имидж). Я создал подобных два. С теми же параметрами и полями. Но если галлерея на основе таксономии работала без проблем (там вьюха все контролировала), то стандартная - нет. А вот три материала как раз и нужны. Для разных типов пользователей.
Вот и мучаюсь. Не знаю что делать
То что галерея пишется по английски как gallery не значит что она пишется так же и по русски))
Модуль image_gallery базируется на таксономии. При создании галереи вы должны будете увидеть в словарях что появился новый словарь. Может быть вам создать еще 2 словаря таких же и чтобы они были настроены на ваши отдельные типы материалов?
Вообще-то я тут вам мало чем помогу... честно я не знаю как сделать.
Почему превьюшки исчезли - может вам пересохранить все материалы типа image?
Аня, Вы филолог?



Я вообще татарин. Как говорится, нам татарам...
Но по работе приходится писать статьи по украински... Хотя русский язык - мой родной
Вообще буду знать как пишется слово "галерея"
К слову. В гугле 3 330 000 запросов по слову "галлерея". Видимо не я один такой безграмотный
Если по делу, то создан словарь Image Galleries
Он привязан к трем типам материала:
Фотография в архив (исходный имидж)
Фотография пользователя (клон)
Фотография в блогах (клон)
Галерея работает только с первый типом. Хотя, если через Импорт, я вставляю фотографии других типов - они в галерею попадают. А если через добавление каждого типа, то в списке нодов они есть, а в галереи - нет
А если модуль image_gallery базируется на таксономии, то какая вьюха за него отвечает? Если б я добрался до нее, то смог бы что-то сделать...
Ой. Писал в тексте ": )", а получил страшную иконку -
Еще вопрос.
"Возможность прикрепить к другим типам документов изображение - загрузить при создании материала (правда в этом случае нет возможности поместить его в галерею сразу) или выбрать из уже загруженных."
Это цитата на этой странице.
Можно подробнее?
что значит нет возможности поместить сразу?
А когда можно?
Что для этого надо сделать?
Возможность прикреплять изображения к другим типам материалов - функционал модуля image_attach. Включаете его, идете в те типы материалов, к которым хотели бы прикреплять картинки, включаете опцию прикреплять изображения, и вуаля. При таком прикреплении создается вторая нода типа image, картинка не лежит ни в одной галерее, поэтому я и сказала, что ее сразу нельзя поместить в галереи. Только если хакнуть модуль image_attach, но я уже не знаю сама как. Это надо в issues к модулю глядеть. Я помню пыталась такое реализовать, но не получилось сходу. Модуль так же позволяет прикреплять к материалам уже загруженные изображения типа image. Тогда появляется выпадающий список со списком ваших картинок. Если их много, то он будет очень длинным.
Вообще насчет разграничений прав к материалам - может быть вам не разные типы контента создавать, а найти модуль по разграничению прав на категории (термины в словаре). Честно не знаю как решить вашу проблему. Спросите насчет того, как сделать вывод картинок разных типов материала в виде галереи с помощью Views на Друпал.ру (без упоминания об image модуле). Я думаю вам помогут
На счет модуля по разграничению прав на категории (термины в словаре) хорошая идея.
Я тоже думал об этом. Спрошу.
Спасибо за ответ и за советы
А можно еще вопрос?
В настройках модуля галереи я могу поменять количество фоток на странице, вывести кто запостил.
А то я еще могу поменять и где это делается?
Например я хочу заголовок поставить под фоткой или еще чего-нибудь.
Может вьюха какая то отвечает за это?
У меня в списках вьюс ничего такого нет
а в блоках есть только Latest image, Random image.
Только эти два параметра и можно редактировать тут - /admin/settings/image_gallery
А чтобы заголовок поставить под фото, надо переопределить функцию вывода theme_image_gallery_img($image, $size) в файле template.php вашей темы. Вместо theme поставьте phptemplate и измените ее тело как вам угодно.
Пример такого изменения написан в посте на этой странице
Я как раз про эти параметры и спрашивал
Привет!
В фукции
function (themename)_image_gallery($galleries, $images)есть код для отображения картинок в галерее:$content .= 'МОЙ ТЕКСТ';$content .= '<div class="images">';
foreach ($images as $image) {
$content .= theme('image_gallery_img', $image, $size);
}
$content .= "</div></center>\n";
}
if ($pager = theme('pager', NULL, variable_get('image_images_per_page', 6), 0)) {
$content .= $pager;
}
if (count($images) + count($galleries) == 0) {
$content .= '<p class="count">'. format_plural(0, 'There is 1 image in this gallery.', 'There are @count images in this gallery.') ."</p>\n";
}
Как можно вставить вместо "МОЙ ТЕКСТ" информацию о галерее (описание, название и т.п.)?
Премного благодарен:) Классная тема, пишите чаше - у вас отлично получается
А вот вопрос такой!!
Друпал 6
Есть блок который выводится в отдельном регионе! И собирает картинки (миниатюры) к ноде (аргумент во view) из n количества галерей принадлежащих одной родительской!
Я ограничил их вывод (5 картинок) и сделал стандартными методами view их пролистывание.
А вот желание другое!
Как вывести список детей (галерей)(отдельным блоком) и при клике пакетом менять в блоке картинки (миниатюры) принадлежащие той или другой категории!
Как вывести блок списка детей (галерей) относящихся к ноде я как нить соображу!!
А Вот Как сделать то что описал выше! Как грубо говоря заменить кнопки туда сюда
ссылками к галереям но выводить их в блоке
Здравствуйте. Нужна помощь. Где и что нужно переписать в image_import что бы он искал галереи не модуля Image, а Node_galery?
вообще PHP не знаю, но если подскажете, то разберусь.
Не работает на Drupal 6.20!
Выдает ошибку:
Unknown column 'f.nid' in 'on clause' query: SELECT DISTINCT n.nid, n.title, f.filepath FROM node n INNER JOIN term_node tn INNER JOIN files f ON n.nid = tn.nid AND n.nid = f.nid WHERE tn.tid = 37 AND n.status = 1 AND f.filename = 'thumbnail' ORDER BY n.sticky DESC, n.created DESC, n.nid DESC в файле template.php в строке 6.
Не понятно, как организована связь с базой files.
Решил проблему.
Благодарю! На одном из сайтов на 6-ке у меня используется такая галерея с модулем image. Ваша статья натолкнула на мысли об её совершенствованиию Спа-си-бо!
Привет, отличная статья, вот думаю браться ли лопатить такой объём работ, может кто даст ссылку на конечный результат?
Комментировать