Media Gallery + Colorbox - перелистывание фото в colorbox

Как известно, по умолчанию, в Media Gallery при клике на фото в colorbox открывается фотография на отдельной странице. Многие в связи с этим задают вопрос: как сделать так, чтобы в Colorbox при клике на фото появлялась следующая фотография в том же colorbox?
В комментариях к посту со скринкастом по Media Gallery некто Андрей предложил решение, найденное на drupal.org. Проверила - работает (можете убедиться в этом, полистав фотки в моей фотогалерее).
А вот и само решение:
Нам надо переопределить функцию template_preprocess_media_gallery_media_item_thumbnail .
В файле template.php вашей темы (если нет такого - создать) вставляем следующий код:
-
function THEMENAME_preprocess_media_gallery_media_item_thumbnail(&$variables) {
-
$element = $variables['element'];
-
-
// Attach the colorbox javascript if the format calls for it.
-
$format = $element['#media_gallery_entity']->media_gallery_format[LANGUAGE_NONE][0]['value'];
-
$lightbox = is_numeric(strpos($format, 'lightbox')) ? TRUE : FALSE;
-
-
if ($lightbox) {
-
$element['file']['#attached']['js'][] = drupal_get_path('module', 'media_gallery') . '/colorbox-display.js';
-
$element['file']['#attached']['js'][] = drupal_get_path('module', 'media_gallery') . '/colorbox-behavior.js';
-
}
-
// Get the rendered file without annoying DIV wrappers.
-
$element['file'] = array('#theme' => 'media_gallery_file_field_inline', '0' => $element['file']);
-
$image = drupal_render($element['file']);
-
-
$gallery_id = $element['#media_gallery_entity']->nid;
-
$media_id = $element['#file']->fid;
-
-
// Add a class that is a more targeted version of what template_preprocess()
-
// automatically adds for this theme hook, to enable per-type (e.g., video vs.
-
// image) styling.
-
$variables['classes_array'][] = drupal_html_class('media_gallery_media_item_thumbnail_' . $element['#file']->type);
-
-
// Add a class for the wrapper.
-
$variables['classes_array'][] = 'media-gallery-item-wrapper';
-
-
// Create an array of variables to be added to the main thumbnail link.
-
$link_vars = array();
-
$link_vars['image'] = $image;
-
$link_vars['link_path'] = "media-gallery/detail/$gallery_id/$media_id";
-
$link_vars['classes'] = $lightbox ? array('media-gallery-thumb', 'cbEnabled') : array('media-gallery-thumb');
-
$link_vars['title'] = $element['#bundle'] == 'image' ? t('View larger image') : t('Watch video');
-
// Add the image as a link to the detailed view
-
$variables['media_gallery_item'] = theme('media_gallery_item', $link_vars);
-
-
// Set the variables to theme the metadata.
-
$meta_vars = array();
-
$meta_vars['location'] = $element['#media_gallery_entity']->media_gallery_image_info_where[LANGUAGE_NONE][0]['value'];
-
$meta_vars['title'] = isset($element['media_title']) ? $element['media_title'][0]['#markup'] : '';
-
$meta_vars['link_path'] = $link_vars['link_path'];
-
-
// Theme the metadata.
-
$variables['media_gallery_meta'] = theme('media_gallery_meta', $meta_vars);
-
}
Создаем файлик colorbox-behavior.js и кидаем его в папку модуля. Содержимое файлика:
-
(function ($) {
-
Drupal.behaviors.initColorboxDefaultStyle = {
-
attach: function (context, settings) {
-
$(document).bind('cbox_complete', function () {
-
$('.lightbox-stack .gallery-thumb-inner a').click(function(e) {
-
e.preventDefault();
-
$.colorbox.next();
-
});
-
});
-
}
-
};
-
})(jQuery);
Сохраняем, очищаем кеш, проверяем.


Комментарии
Большое вам спасибо!
классно комнты сделаны.. а где же капча? как будете с ботами бороться?
блин, очепатался.. КомЕнты тут классные
шерскова, а почему дискас коменты удалили? что в них не понравилось? глючили что-ли? предлагаю вам на главной страничке создать раздел, в котором пользователи будут задавать вопросы. а то я такого раздела не нашёл, и здесь всё спрашиваю... :)) вы уж меня извините за это.
Новый дизайн у вас просто супер.. и в яндексе вас теперь очень просто найти по запросу "блог друпал" 7 место. я считаю, что это почётное место, желаю вам двигаться ещё выше.. :)
на счёт дискаса и капчи буду ждать ответа в этой теме :)
Disqus хорош, но все таки родные комменты мне больше по душе. Более гибко получается. А насчет антиспама я еще экспериментирую. Опять же, тема для поста будет ;)
Сделал все как написано, но после нажатия на картинку экран затемняется, на секунду появляется белый прямоугольник и снова затемнение.
Может какой другой модуль конфликтует?
Исправила пост. Попробуйте еще раз. У меня там код сбился, и решение было не самое "красивое". А так должно быть правильно.
спасибо за ответ про дискас, будем его пробовать :)
и ещё второй вопрос: Когда будете учить прикручивать партнёрку мамбы или лав планет ?
Прикручивать к Друпалу? В планах есть пост по работе с самой партнеркой - мы с ней вполне успешно работаем пару лет точно. Но в данном случае друпал тут ни при чем :)
так я что то не понял, вы из media_gallery.theme.inc функцию удаляете, а в template.php вписываете или что? подробнее плиз
Нет, в модуле все остается как есть. в template.php измененную вставляете - это переопределяет оригинальную функцию и заставляет ее работать так, как вам надо. Разумеется, при конкретной включенной теме.
если в семерке сделать так, как вы написали, то ничего не получится. возможно в 6-ом друпале это работает. в общем этот вариант ничем не лучше, чем тот, который вы раньше писали с правкой непосредственно модуля, потому что после обновления media gallery все накроется медным тазом =) тут нужен другой подход. к сожалению я не спец и идеального варианта выдать не смогу :-(
При обновлении накроется как раз таки старый вариант. Потому я его и заменила на новый. Код проверила на своем сайте - работает как надо. Media Gallery для шестерки не существует, так что в шестом друпале это работать не будет однозначно, ибо незачем :)
Так вот, код измененный вставляется в template.php именно для того, чтобы при обновлении функция по прежнему переопределялась. Из этого следует а) я недостаточно понятно изложила суть вопроса; б) вы что-то не так делаете
нет не верно. если функция обновится в след версии media gallery, ваша модернизация ее испортит. вообще в данном случае друпал работает так: сначала выполняется оригинальная функция, потом ваша, а результат уже перекрывается. я у себя не стал переписывать всю функция, а только часть, где нужно вставить ссылку на скрипт. но в общем то это все топорные варианты. а на счет phptemplate, у меня почему то не сработало. вроди бы сейчас принято писать имя шаблона, вместо этого
Да, функция определяется для темы, этот момент поправила в коде. И да, если функция изменится в модуле, функция в template.php вполне возможно поломает результат. Однако это работающее решение (живой пример: http://fancycook.ru/content/красивая-еда).
Если у вас есть решение лучше - поделитесь с общественностью ;)
Интересно, что для Друпала есть готовый модуль Colorbox - но Media Gallery его не использует, обращаясь к colorbox library напрямую. Есть патчики (http://drupal.org/node/1053674), которые связывают Media Gallery с Colorbox module, чтобы свойствами колорбокса в медиа-галерее можно было управлять через настройки колорбокс-модуля. Я только что проверил - действительно работает. Однако клик на фото всё равно открывает фотографию на отдельной странице, так что "Integrate Media Gallery with colorbox module" patch, к сожалению, не заменяет вышеописанного патчика для перелистывания фото в колорбоксе.
Спасибо, как раз искал это решение. Во-первых, для своего сайта, но это не страшно. Но вот пожелание заказчика - закон
Славные у вас фотографии в галерее. Северное лето пробрало до печенок - очень похоже на родные леса на Кольском. И про Тай интересно :)
я дико извиняюсь))с друпалом знаком всего пару дней) а можно подробнее что где создать и куда вставить! буду очень признателен!
Здравствуйте! Если знаете, подскажите: в свойствах галереи выбран способ показа изображения в лайтбоксе, при нажатии на картинку в галерее экран темнеет и ничего не открывается, если нажать повторно - открывается нормально. При перелистывании в лайтбоксе - такая же история, если листать очень медленно - нормально, если быстро - опять темный экран и ничего. Вот пример - http://fotowkola.ru/node/21
возможно неправильно установлена библиотека колорбокса, либо js колорбокса конфликтует с другими js темы/других модулей
Если для лайтбокса определить пресет media_gallery_thumbnail, то все работает нормально. но в этом пресете масштабирование и обрезка под квадрат 450х450, если поменять, изменятся превьюшки в галерее.
Добавить комментарий