пятница, 25 ноября 2011 г.

Доводим до ума Media Gallery

Выбирая галерею для Drupal 7, остановилась на Media Gallery. Галерея хороша, но очень сырая, как, в принципе, и многие модули для Drupal 7 на данный момент. Сначала все было вроде неплохо, потом, в какой-то момент я заметила, что при редактировании медиа-файлов не отображаются превьюшки, кроме того, мне совсем не понравился внешний вид галереи, и наконец, самое интересное: в настройках прав модуля Media есть только "просмотр медиа" и "редактирование всех медиа", что автоматически переводит эту чудесную галерею в разряд тех, что используются для персонального блога. Ну или же если у вас на сайте все админы. Тут я решила удалить галерею и все модули, однако и это оказалось непросто: отключить модуль Media невозможно, т.к. он необходим для ядра из-за созданных им полей, а поля, в свою очередь, заблокированы модулем и удалить их тоже нельзя. Еще раз пересмотрев и попробовав имеющиеся модули для семерки, я убедилась, что альтернативы собственно и нет, и решила доводить модуль до ума.

1. Разграничение прав - это первоочередной вопрос. Как я поняла из обсуждения на Drupal.org, эта возможность добавлена в ветке 7.x-2.x модуля Media, которая на данный момент нестабильна. Ждать выхода новой версии конечно не хочется, так что добавим патч, который можно скачать здесь. Этот патч подходит для версии 7.x-1.0 модуля Media, и добавляет несколько прав: "редактировать свои медиа", "загружать медиа", "просматривать библиотеку". Последний пункт позволяет скрыть от пользователей вкладку с библиотекой, чтоб они не могли видеть все загруженные медиа-файлы. Только одно замечание к этому патчу: в файле media.browser.inc должны быть строки (у меня под номером 308 и 309), которых в моем модуле нет:
'types' => $types,
'multiselect' => $multiselect,
Я просто закоментировала их. После этого жизнь стала налаживаться. ))

2. Перелистывание фотографий в Colorbox. Следующее, что я поправила - неприятная особенность работы Colorbox, а именно: нажатие на фотографию при просмотре в Colorbox вместо привычного перехода на следующий файл отрывает страницу просмотра фотографии, в которой вообще особо нет никакого толка, раз нельзя оценивать и комментировать фотографию. Решение уже есть, берем его отсюда.
  1. В папке вашей темы создайте подпапку js (если ее еще нет) и в ней - файл с названием media_gallery_hack.js следующего содержания:
    /*
    Redirects lightbox image click to advance to next image instead of opening image details.
    Via http://drupal.org/node/1088738#comment-4362570
    code from #12
    Posted by stephandale on April 10, 2011 at 12:26pm
    */
    (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);
  2. В файл .info вашей темы добавьте строку scripts[] = js/media_gallery_hack.js.
3. Превьюшки, и еще раз превьюшки. Столкнулась с неприятной особенность: превьюшки фотографий во время просмотра галлереи у меня меняют размер при изменении размеров окна браузера. Оказывается, превьюшки имеют размер в процентах - это нужно для организации распределения фотографий в определенное количество столбцов, которое указывается при создании галереи. На фиксированном шаблоне, каким является стандартный, это незаметно. А вот на резиновом, как у меня, получается не очень красиво. Первой мыслью было перекрыть стили и убрать заданную в процентах ширину. Правда, тогда функционал с колонками перестал бы работать, кроме того, я заметила странный баг в хроме, который не смогла объяснить. Вторая мысль - зафиксировать ширину контейнера, в котором находятся превьюшки. Но тогда на больших мониторах образуется пустота, что тоже не очень приятно. В итоге пока ограничилась самый доступным решением: в админке, в настройках отображения медиа-файлов, установила для отображения миниатюры галереи картинку побольше - пресет media_gallery_thumbnail вполне подходит.


Полезный совет: обязательно выставьте пресеты для всех отображений файлов! Например, у меня в какой-то момент перестали отображаться превьюшки при редактировании медиа и в библиотеке - оказалось, тоже нужно было перенастроить пресет (в данном случае, для отображения Preview).

4. Сортировка фотографий - работает без проблем, но в журнале регистрируется сообщение: Notice: Undefined variable: offset в функции media_gallery_reorder_gallery() (строка 220 в файле...). В файле media_gallery.pages.inc я нашла указанное место и определила переменную.
$offset = 0;
if (!empty($_POST['page'])) {
$page = array_pop(explode(',', $_POST['page']));
num_per_page = $gallery->media_gallery_columns[LANGUAGE_NONE][0] ['value'] * $gallery->media_gallery_rows[LANGUAGE_NONE][0]['value'];
$offset = $num_per_page * $page;
}
5. Необходимые библиотеки для plupload и colorbox. Это не проблема, а просто результат невнимательности. Для работы этих модулей необходимы библиотеки, которые в поставку модуля не входят, их нужно отдельно скачивать с сайта. Так что если не работает один из этих модулей - возможно вы забыли скачать библиотеки.

6. Локализация текста ссылки на загрузку оригинального файла. Эту проблему я так и не решила - просто удалила перевод и оставила ссылку англоязычной. Лучше, чем абракадабра. )) Вернусь к этому позже.

Вот и все, обнаруженные на данный момент, проблемы - теперь имею вполне работоспособную галерею. По необходимости буду дополнять пост.

Комментариев нет: