- Установка и подготовка Gallery
- Документация
- PDF-шпаргалка Gallery для печати
- Сниппет Gallery
- Параметры
- Чанки
- Плагины
- Примеры
- Сниппет GalleryAlbums
- Параметры
- Чанки
- Примеры
- Сниппет GalleryItem
- Параметры
- Placeholder по умолчанию
- Чанки
- Примеры
- Системные настройки
- Использование кастомного TV
- TV galleryitem: выбираем одно изображение из альбома
- Создаем дополнительное поле
- Выбираем изображение у ресурса
- Выводим выбранное изображение
- Проверяем сохранение и редактирование
- Если поле или изображение не появились
- Страница менеджера галереи
- Медиа Источник
- Примеры
- Практика 1. Портфолио Creative через Gallery
- Создаем альбом
- Загружаем изображения
- Заполняем название, описание и метки
- Создаем чанк изображения
- Создаем обертку портфолио
- Переключаем шаблон с MIGX на Gallery
- Проверяем результат
- Практика 2. Галерея FlexStart с фильтрами
- Проверяем готовую верстку
- Создаем альбом и задаем категории
- Создаем чанк карточки FlexStart
- Создаем обертку с переключателями
- Центрируем единственную кнопку увеличения
- Проверяем категории и просмотр изображений
- Если Gallery не показывает изображения
- Следующий шаг
Gallery — дополнение MODX для управления альбомами и изображениями. Ниже собрана документация по сниппетам Gallery, GalleryAlbums и GalleryItem: параметры, чанки, плейсхолдеры и системные настройки.
После справочника находятся две практики: портфолио Creative и галерея FlexStart с фильтрами по категориям. Основные вызовы показаны стандартными тегами MODX, варианты на Fenom вынесены в раскрывающиеся блоки.
Если проходите учебный маршрут, в предыдущем уроке мы выводили изображения через MIGX. Здесь подключим ту же секцию через Gallery, сохранив оформление сайта.
Установка и подготовка Gallery
Если идете по учебному маршруту, Gallery уже установлен в уроке о дополнениях. Повторять установку не нужно.
Для отдельной установки найдите Gallery у официального поставщика MODX. Перед загрузкой проверьте требования выбранного выпуска и совместимость с вашей версией MODX и PHP.
Основная практика выполняется в MODX 2. Интерфейс других выпусков может отличаться. Не ориентируйтесь только на номер дополнения или общий заголовок карточки пакета — смотрите конкретный доступный выпуск.
Для работы проверьте расширение PHP mbstring. При проблемах с миниатюрами дополнительно проверяйте требования обработчика изображений и журнал PHP: наличие одного расширения не гарантирует исправность всей цепочки загрузки и обработки файлов.
После установки откройте пункт Gallery в меню Пакетов.
Документация
Галереи можно вызывать так: [[Gallery? &album=`My Album`]] или так [[GalleryAlbums? &limit=`10`]]
PDF-шпаргалка Gallery для печати
Основные параметры Gallery, GalleryAlbums и GalleryItem собраны в отдельную PDF-шпаргалку. В ней есть плейсхолдеры, настройки миниатюр, примеры вызовов и короткая проверка ошибок.
Скачайте справочник и распечатайте, чтобы держать его рядом во время настройки. Подробные пояснения и практические примеры остаются в этой статье.
Сниппет Gallery
Отображает «галерею» изображений либо из альбома, либо из тега, либо из обоих.
Параметры
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| album | Будут загружены только элементы из этого альбома. Может быть именем или идентификатором (id) альбома. | |
| tag | Будет загружать только элементы с этим тегом. | |
| plugin | Имя подключаемого модуля, используемого для отображения во внешнем интерфейсе. См. раздел «Плагины». | |
| thumbTpl | Чанк для использования в качестве tpl для каждой миниатюры. | galItemThumb |
| containerTpl | Необязательный блок для обертывания вывода. | |
| toPlaceholder | Имя плейсхолдера, в который будет записан результат. При его использовании вызов сниппета ничего не выводит непосредственно на месте вызова. | |
| placeholderPrefix | Префикс плейсхолдеров сведений об альбоме: name, id, description и total. | gallery. |
| thumbWidth | Ширина созданного эскиза в пикселях. | 100 |
| thumbHeight | Высота созданного эскиза в пикселях. | 100 |
| thumbZoomCrop | Следует ли использовать масштабирование кадрирования на миниатюре. | 1 |
| thumbFar | Параметр выравнивания изображения при подготовке миниатюры средствами phpThumb. Значение C означает выравнивание по центру. | C |
| thumbQuality | Качество созданного эскиза от 0 до 100. | 90 |
| thumbProperties | Объект JSON с параметрами, передаваемыми в phpThumb в качестве свойств миниатюры. | |
| imageWidth | Если используется плагином, максимальная ширина отображаемого в данный момент изображения. | 500 |
| imageHeight | Если используется плагином, максимальная высота отображаемого в данный момент изображения. | 500 |
| imageZoomCrop | Следует ли использовать масштабирование кадрирования на изображении. | |
| imageFar | Параметр выравнивания изображения при подготовке большого варианта средствами phpThumb. | |
| imageQuality | Если используется плагином, качество изображения от 0 до 100. | 90 |
| imageProperties | Объект JSON с параметрами, передаваемыми в phpThumb как свойства изображения. | |
| sort | Поле для сортировки изображений. Вы можете использовать rand для произвольной сортировки. | rank |
| dir | Направление сортировки изображений. | ASC |
| limit | Если установлено ненулевое значение, будет отображаться только X элементов. | 0 |
| start | Количество пропускаемых записей перед выводом, то есть смещение выборки. | 0 |
| showInactive | Если true, также будут отображаться неактивные изображения. | false |
| albumRequestVar | Может использоваться для определения того, какую переменную REQUEST необходимо искать для фильтрации в альбоме, используется вместе с checkForRequestAlbumVar = true. Его можно использовать с фильтрацией по имени или идентификатору галереи. |
galAlbum |
| checkForRequestAlbumVar | Если true, если REQUEST var со значением свойства albumRequestVar (по умолчанию — galAlbum) найден, будет использоваться это как свойство альбома для фрагмента. | false |
| tagRequestVar | Может использоваться для определения того, какую переменную REQUEST нужно искать для фильтрации по тегу, используется вместе с checkForRequestTagVar = true. |
galTag |
| checkForRequestTagVar | Если true, если найдена переменная REQUEST со значением tagRequestVar (по умолчанию — galTag), будет использоваться это как свойство тега для фрагмента. | false |
| useCss | Если true, будет использоваться CSS, предоставленный сниппетом Gallery. Установите значение «0», чтобы не загружать какой-либо CSS, предоставленный галереей. | 1 (true) |
| itemCls | Класс CSS, используемый для каждого элемента. | gal-item |
| activeCls | Класс CSS, который нужно добавить, если элемент является «активным». | gal-item-active |
| linkToImage | Независимо от того, следует ли ссылаться непосредственно на изображение для каждого эскиза или на URL-адрес, настроенный для GalleryItem. | 0 |
| linkAttributes | HTML-атрибуты для тега A в элементе tpl. | |
| imageAttributes | HTML-атрибуты для тега img в элементе tpl. |
Чанки
В галерее обрабатываются 2 блока. Соответствующие им параметры галереи:
- thumbTpl — чанк, используемый для каждого отображаемого элемента
- containerTpl — необязательно. Если установлено, обернет содержимое этим чанком.
thumbTpl
Значение по умолчанию
<div class="[[+cls]]">
<a href="[[+linkToImage:if=`[[+linkToImage]]`:is=`1`:then=`[[+image_absolute]]`:else=`[[~[[*id]]?
&[[+imageGetParam]]=`[[+id]]`
&[[+albumRequestVar]]=`[[+album]]`
&[[+tagRequestVar]]=`[[+tag]]` ]]`]]">
<img class="[[+imgCls]]" src="[[+thumbnail]]" alt="[[+name]]" />
</a>
</div>
Доступные плейсхолдеры
| Имя | Описание |
|---|---|
| name | Название предмета. |
| filename | Базовое имя файла элемента. |
| filesize | Размер файла для элемента. |
| thumbnail | URL-адрес сгенерированного эскиза для этого элемента. |
| image | URL-адрес сгенерированного изображения для этого элемента. |
| image_absolute | Фактический URL-адрес изображения (вместо заполнителей эскизов / изображений, которые были пропущены через phpthumb на основе свойств фрагмента). |
| description | Описание предмета. |
| mediatype | Тип носителя элемента. В настоящее время это только «изображение». |
| createdon | Отметка времени, на которой был создан этот элемент. |
| createdby | Идентификатор пользователя создателя этого элемента. |
| active | Активен этот элемент или нет. Может быть 1 или 0. |
| tags | Список тегов, связанных с этим элементом. |
| cls | Значение свойства & itemCls в фрагменте галереи. По умолчанию «gal-item». |
| linkToImage | В содержимом по умолчанию, если true, будет ссылка непосредственно на изображение, а не добавление заполнителя imageGetParam к параметру запроса. По умолчанию 1. |
| imageGetParam | Параметр GET, используемый при добавлении параметра GET для связи с фрагментом GalleryItem. По умолчанию «galItem». |
| albumRequestVar | Параметр GET, используемый для добавления при связывании с фрагментом GalleryItem. Щелчок по изображению останется в выбранном альбоме с этим фрагментом. |
| album | Текущий отображаемый альбом. |
containerTpl
Этот чанк используется, когда в вызове Gallery используется параметр containerTpl.
На самом деле рекомендуется не использовать это свойство, а просто поместить вывод в свой ресурс или блок; это даст вам больше гибкости в будущем.
Значение по умолчанию
Для &containerTpl; значения по умолчанию не существует. если ничего не указано, вывод не будет заключен в какой-либо контейнер.
Доступные плейсхолдеры
| Имя | Описание |
|---|---|
| thumbnails | Сгенерированные эскизы. |
| album_name | Название текущего альбома. |
| album_description | Описание текущего альбома. |
Плагины
Ниже перечислены дополнительные интеграции Gallery. В практиках Creative и FlexStart они не используются: просмотр изображений обеспечивают библиотеки исходных шаблонов.
Галерея позволяет отображать галереи либо прямо в виде миниатюр в интерфейсе, либо с помощью плагинов jQuery. Вы можете передать имя плагина через свойство и плагин фрагмента галереи.
- Slimbox;
- Galleriffic.
Обратите внимание, что Galleriffic изменяет thumbTplсвойство на gallerifficThumbTpl, а containerTplсвойство на gallerifficContainerTpl.
Примеры
Отобразите галерею фотографий в альбоме «My Album»:
[[!Gallery? &album=`My Album`]]
Отобразите галерею фотографий в альбоме «Trucks», но используйте для миниатюр пользовательский блок «truckThumb»:
[[!Gallery? &album=`Trucks` &thumbTpl=`truckThumb`]]
Отобразите галерею фотографий с тегом «Cool» и используйте плагин Galleriffic:
[[!Gallery? &tag=`Cool` &plugin=`Galleriffic`]]
Возьмите только 3 фотографии из альбома «Cars» и поместите их в заполнитель «gallery»:
[[!Gallery?
&limit=`3`
&album=`Cars`
&toPlaceholder=`gallery`
]]
<div class="my-gallery">
[[+gallery]]
</div>
Использование &thumbProperties для установки вывода миниатюр в формате jpg с качеством 90% вместо png:
[[!GalleryAlbums?
&thumbProperties=`{"f":"jpg","q":90}`
]]
Сниппет GalleryAlbums
Этот сниппет отображает список альбомов. По умолчанию GalleryAlbums отбирает альбомы, отмеченные признаком prominent. Для вывода без этого ограничения используйте prominentOnly=0.
Вы можете отобразить миниатюру для каждого альбома изображения в альбоме, установив для свойства rowTpl значение galAlbumRowWithCoverTpl или используя [[+image]]свой собственный rowTpl.
Параметры
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| rowTpl | Чанк, используемый для каждой строки альбома. | galAlbumRowTpl |
| containerTpl | Чанк, используемый для упаковки всех строк альбома (доступен с бета-версией 1.6.0). | |
| sort | Поле, по которому нужно отсортировать результаты. | createdon |
| dir | Направление сортировки результатов. | DESC |
| limit | Если установлено ненулевое значение, количество возвращаемых результатов будет ограничено. | 10 |
| start | Индекс, с которого нужно начинать результаты. | 0 |
| toPlaceholder | Если не пусто, вывод будет заполнителем с этим значением. | |
| showInactive | Если 1, также будут отображаться неактивные галереи. | 0 |
| showAll | Если 1, будут отображаться все альбомы независимо от их родителя. | 1 |
| showName | Если 0, скроет имя альбома. | 1 |
| parent | Захватывайте только альбомы с родительским альбомом с этим идентификатором. Не забудьте установить для showAll значение 0, иначе это не сработает! | 0 |
| prominentOnly | Если 1, выводятся только альбомы, отмеченные признаком prominent. | 1 |
| albumCoverSort | Поле, которое следует использовать при сортировке для получения обложки альбома. Чтобы получить первое изображение, используйте rank. Чтобы получить случайное изображение, используйте «random». |
rank |
| albumCoverSortDir | Направление, используемое при сортировке для получения обложки альбома. Принимает «ASC» или «DESC». | ASC |
| thumbWidth | Ширина эскиза обложки альбома. | 100 |
| thumbHeight | Высота миниатюры обложки альбома. | 100 |
| thumbZoomCrop | Следует ли использовать масштабирование кадрирования на миниатюре обложки альбома. | 1 |
| thumbFar | Соотношение сторон для phpThumb с миниатюрой обложки альбома. | C |
| thumbQuality | Если качество эскиза обложки альбома, от 0 до 100. | 90 |
| thumbProperties | Объект JSON с параметрами, передаваемыми в phpThumb в качестве свойств миниатюры альбома. | |
| albumRequestVar | Если checkForRequestAlbumVar имеет значение true во фрагменте галереи, будет искать переменную REQUEST с этим именем, чтобы выбрать альбом. | |
| totalVar | Определите ключ заполнителя, установленного GalleryAlbums, с указанием общего количества альбомов, которые будут выбраны без учета предельного значения (доступно с бета-версией 1.6.0). | total |
Чанки
Следующие чанки обрабатываются в GalleryAlbums. Соответствующие параметры GalleryAlbums.
containerTpl
Используется для упаковки всех строк альбома.
Значение по умолчанию: нет значения по умолчанию.
Доступные заполнители
| Имя | Описание |
|---|---|
| albums | Альбомные ряды. |
| nav.first | ID первого альбома. |
| nav.prev | ID предыдущего альбома. |
| nav.current | ID текущего альбома. |
| nav.next | ID следующего альбома. |
| nav.last | ID последнего альбома. |
| nav.curIdx | Индекс текущего альбома. |
| nav.count | Количество строк в альбоме. |
| albumRequestVar | Параметр albumRequestVar передается сниппету GalleryAlbums. По умолчанию — galAlbum. |
Простейшая обертка списка альбомов использует плейсхолдер albums. Создайте чанк gallery.albums.wrapper:
<ul class="gallery-albums">
[[+albums]]
</ul>
Пример вызова со стандартным чанком строки:
[[!GalleryAlbums?
&rowTpl=`galAlbumRowTpl`
&containerTpl=`gallery.albums.wrapper`
&prominentOnly=`0`
]]
rowTpl
Чанк, используемый для каждого отображаемого альбома.
Значение по умолчанию:
<li[[+cls:notempty=``]]><a href="[[~[[*id]]? &[[+albumRequestVar]]=`[[+id]]`]]">[[+showName:notempty=`[[+name]]`]]</a></li>
Доступные плейсхолдеры
| Имя | Описание |
|---|---|
| id | Идентификатор альбома. |
| name | Название альбома. |
| parent | Родительский идентификатор альбома. По умолчанию 0. |
| description | Описание альбома. |
| createdon | Отметка времени создания альбома. |
| createdby | ID пользователя, создавшего этот альбом. |
| rank | «Ранг» или порядок, в котором этот альбом хранится. |
| active | Независимо от того, помечен ли этот альбом как «Активный». Может быть 1 или 0. |
| prominent | Независимо от того, помечен ли этот альбом как «выдающийся». Может быть 1 или 0. |
| albumRequestVar | Параметр albumRequestVar передается сниппету GalleryAlbums (см. выше). По умолчанию — galAlbum. |
| image | Ссылка на изображение, определенная фрагментом GalleryAlbums. |
Когда вы используете заполнитель изображения в своем шаблоне в качестве источника для тега изображения, он, похоже, не подчиняется свойствам эскиза, указанным в вызове сниппета. Но не беспокойтесь, вы можете добавить их самостоятельно, поскольку этот заполнитель изображения на самом деле является вызовом phpthumb. Итак, допустим, вы хотите, чтобы ваше миниатюру было 240×160 с масштабированием, вы можете сделать:
<img src="[[+image]]&w=240&h=160&zc=1" alt="[[+name]]" />
Примеры
Возьмите список первых 10 активных, известных альбомов.
[[!GalleryAlbums]]
Возьмите 10 известных альбомов, отсортированных по алфавиту:
[[!GalleryAlbums?
&sort=`name`
&dir=`ASC`
]]
Возьмите 3 последних альбома, заметных или нет, и установите их в качестве заполнителя «альбомы»:
[[!GalleryAlbums?
&limit=`3`
&prominentOnly=`0`
&toPlaceholder=`albums`
]]
Отображение трех последних альбомов со случайным изображением обложки.
[[!GalleryAlbums?
&limit=`3`
&albumCoverSort=`random`
]]
Использование &thumbProperties для установки вывода миниатюры обложки альбома в формате jpg с качеством 90% вместо png:
[[!GalleryAlbums?
&thumbProperties=`{"f":"jpg","q":"90%"}`
]]
Сниппет GalleryItem
Сниппет GalleryItem отображает один элемент галереи.
Параметры
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| id | ID отображаемого элемента | |
| toPlaceholders | Если 1, свойства изображения записываются в плейсхолдеры. Если 0, результат выводится через чанк, указанный в tpl. | 1 |
| toPlaceholdersPrefix | Префикс плейсхолдеров изображения. Используется при toPlaceholders=1. | galitem |
| tpl | Имя блока для использования, когда для параметра toPlaceholder установлено значение false. | galItem |
| albumTpl | Имя фрагмента, используемого для каждого альбома, указанного для элемента. | galItemAlbum |
| albumSeparator | Разделитель строк для каждого альбома, указанного для элемента. | , |
| albumRequestVar | Переменная REQUEST для использования при связывании альбомов. | galAlbum |
| tagTpl | Имя блока, используемого для каждого тега, указанного для элемента. | galItemTag |
| tagSeparator | Разделитель строк для каждого тега, указанного для элемента. | ,&nsbp; |
| tagSortDir | Направление сортировки тегов, перечисленных для элемента. | DESC |
| tagRequestVar | Переменная REQUEST для использования при связывании тегов. | galTag |
| thumbWidth | Максимальная ширина созданного эскиза в пикселях. | 100 |
| thumbHeight | Максимальная высота созданного эскиза в пикселях. | 100 |
| thumbZoomCrop | Следует ли использовать масштабирование для миниатюры. | 1 |
| thumbQuality | Качество эскиза от 0 до 100. | 90 |
| thumbFar | Значение «далеко» для phpThumb для миниатюры для масштабирования соотношения сторон. | C |
| thumbProperties | Объект JSON с параметрами, передаваемыми в phpThumb в качестве свойств миниатюры. | |
| imageWidth | Максимальная ширина сгенерированного изображения. | 500 |
| imageHeight | Максимальная высота сгенерированного изображения. | 500 |
| imageZoomCrop | Следует ли использовать масштабирование для изображения. | 0 |
| imageQuality | Качество подготовленного изображения от 0 до 100. | 90 |
| imageFar | Значение «далеко» для phpThumb сгенерированного изображения для увеличения соотношения сторон. | C |
| imageProperties | Объект JSON с параметрами, передаваемыми в phpThumb в качестве свойств сгенерированного изображения. |
Placeholder по умолчанию
При toPlaceholders=1 сниппет GalleryItem записывает данные изображения в плейсхолдеры. По умолчанию используется префикс galitem, например [[+galitem.name]]. Изменить его можно параметром toPlaceholdersPrefix.
Список этих заполнителей выглядит следующим образом:
| Имя | Описание |
|---|---|
| name | Название предмета. |
| filename | Имя файла элемента. Это будет относиться к пути, в котором хранятся файлы, обычно это assets/components/gallery/files/. |
| description | Описание предмета. |
| mediatype | Тип носителя элемента. В настоящее время это только «изображение». |
| createdon | Отметка времени, на которой был создан этот элемент. |
| createdby | Идентификатор пользователя создателя этого элемента. |
| active | Активен этот элемент или нет. Может быть 1 или 0. |
| albums | Список альбомов, в которых находится этот элемент. |
| tags | Список тегов, связанных с этим элементом. |
| url | Если установлено, URL для этого элемента. |
Чанки
В GalleryItem обрабатываются 3 блока. Соответствующие им параметры GalleryItem.
tpl
Чанк, который будет использоваться, если для параметра toPlaceholder установлено значение 0.
Значение по умолчанию:
<a href="[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]">
<img src="[[+thumbnail]]" alt="[[+name]]" />
</a>
Доступные плейсхолдеры
| Имя | Описание |
|---|---|
| name | Название предмета. |
| filename | Имя файла элемента. Это будет относиться к пути, в котором хранятся файлы, обычно это assets/ components/gallery/files/. |
| description | Описание предмета. |
| mediatype | Тип носителя элемента. В настоящее время это только «изображение». |
| createdon | Отметка времени, на которой был создан этот элемент. |
| createdby | Идентификатор пользователя создателя этого элемента. |
| active | Активен этот элемент или нет. Может быть 1 или 0. |
| albums | Список альбомов, в которых находится этот элемент. |
| tags | Список тегов, связанных с этим элементом. |
albumTpl
Чанк, который будет использоваться для каждого альбома, указанного в вызове с элементом albumTpl.
Значение по умолчанию:
<span class="gal-item-album"><a href="[[~[[*id]]]]?[[+albumRequestVar]]=[[+id]]">[[+name]]</a></span>
Доступные плейсхолдеры.
| Имя | Описание |
|---|---|
| id | Идентификатор альбома. |
| name | Название альбома. |
| parent | Родительский идентификатор альбома. По умолчанию 0. |
| description | Описание альбома. |
| createdon | Отметка времени создания альбома. |
| createdby | ID пользователя, создавшего этот альбом. |
| rank | «Ранг» или порядок, в котором этот альбом хранится как. |
| active | Независимо от того, помечен ли этот альбом как «Активный». Может быть 1 или 0. |
| prominent | Независимо от того, помечен ли этот альбом как «выдающийся». Может быть 1 или 0. |
| albumRequestVar | Параметр albumRequestVar передается в GalleryItem сниппет. По умолчанию — galAlbum. |
tagTpl
Чанк используемый для каждого тега, указанного в элементе tagTpl.
Значение по умолчанию:
<span class="gal-item-tag"><a href="[[~[[*id]]]]?[[+tagRequestVar]]=[[+tag]]">[[+tag]]</a></span>
Доступные плейсхолдеры.
| Имя | Описание |
|---|---|
| tag | Значение тега. |
| item | Идентификатор (id) предмета. |
| tagRequestVar | Параметр tagRequestVar передается в GalleryItem сниппет. По умолчанию — galTag. |
Примеры
Отобразите элемент с идентификатором 12, но только если он существует.
[[!GalleryItem? &id=`12`]]
[[!+galitem.image:notempty=`
<div class="image">
<a href="[[+galitem.image]]">
<img src="[[+galitem.image]]" alt="[[+galitem.name]]" />
</a>
<br />Albums: [[+galitem.albums]]
<br />Tags: [[+galitem.tags]]
</div>
`]]
Отобразите элемент с идентификатором 23, но используйте для отображения чанк под названием «Photo».
[[!GalleryItem?
&id=`23`
&toPlaceholders=`0`
&tpl=`Photo`
]]
Отобразите элемент с ID 432 в блоке под названием ‘Photo’, но разделите связанные с ним теги вертикальной чертой («|»):
[[!GalleryItem?
&id=`432`
&toPlaceholders=`0`
&tpl=`Photo`
&tagSeparator=` | `
]]
Системные настройки
Параметры gallery.tiny.* относятся к интеграции с TinyMCE. Не считайте их готовой настройкой любого современного пакета TinyMCE Rich Text Editor без проверки совместимости. Для практических примеров ниже визуальный редактор не требуется.
Вы можете изменить место, где вы храните изображения из Галереи, изменив следующие настройки:
| ключ | описание |
|---|---|
gallery.files_path |
Абсолютный путь к папке для хранения изображений. |
gallery.files_url |
Доступный в Интернете URL-адрес, из которого вы можете перейти на gallery.files_path. |
gallery.use_richtext |
Установите значение yes (true), чтобы включить интеграцию TinyMCE. Обратите внимание, что вам необходимо установить TinyMCE Extra, чтобы это работало. |
gallery.tiny.width |
Ширина текстового редактора в пикселях или процентах. |
gallery.tiny.height |
Высота текстового редактора в пикселях или процентах. |
gallery.tiny.buttons1/2/3/4/5 |
Кнопки, отображаемые в разных строках (с 1 по 5). Если он пуст, он будет унаследован от основных настроек TinyMCE. |
gallery.tiny.custom_plugins |
Список подключаемых модулей, разделенных запятыми. Если он пуст, он будет унаследован от основных настроек TInyMCE. |
gallery.tiny.theme_advanced_blockformats |
Заблокируйте используемые форматы в раскрывающемся списке. Если пусто, наследуется от основных настроек TinyMCE. |
gallery.tiny.theme_advanced_css_selectors |
CSS-селекторы на выбор. Если пусто, наследуется от основных настроек TinyMCE. |
Использование кастомного TV
TV galleryitem: выбираем одно изображение из альбома
Кроме вывода целой галереи, Gallery позволяет выбирать отдельное изображение через дополнительное поле ресурса. Например, так можно назначить иллюстрацию странице, не копируя ее адрес вручную.
Это отдельная мини-практика. Для нее нужен установленный Gallery и альбом хотя бы с одним изображением. Если альбом еще не создан, сначала выполните подготовку из первой практики ниже, затем вернитесь к этому разделу.
Не путайте три сущности:
GalleryItem— сниппет для получения отдельного элемента по ID.galleryitemкак тип ввода TV — интерфейс выбора изображения.galleryitemкак тип вывода TV — обработка выбранного значения для показа на странице.
Создаем дополнительное поле
На вкладке «Элементы» откройте раздел дополнительных полей и создайте TV:
- Имя:
gallery_photo. - Подпись для редактора:
Изображение из Gallery. - Описание:
Выберите изображение из альбома Gallery.
На вкладке параметров ввода выберите тип galleryitem.

Перейдите на вкладку параметров вывода и также выберите galleryitem. Для первой проверки дополнительные параметры оставьте без изменений.

На вкладке доступа для шаблонов отметьте шаблон учебного ресурса и сохраните TV.
Если типа galleryitem нет в списке, проверьте установленный пакет Gallery и ошибки его установки. Не подменяйте его обычным типом image: это другой способ выбора и вывода изображения.
Выбираем изображение у ресурса
Заново откройте ресурс, которому назначен выбранный шаблон. На вкладке дополнительных полей найдите «Изображение из Gallery».
- Нажмите кнопку выбора изображения.
- В открывшемся интерфейсе выберите альбом Gallery.
- Выберите нужное изображение.
- Убедитесь, что оно появилось в редакторе поля.
- Сохраните ресурс.
Для первой проверки просто выберите изображение, без обрезки и других преобразований. Сначала убедимся, что выбор сохраняется и выводится на сайте.

Выводим выбранное изображение
Откройте шаблон, назначенный учебному ресурсу. Для проверки временно добавьте перед закрывающим тегом </body>:
<div class="gallery-photo-example">
[[*gallery_photo]]
</div>
Сохраните шаблон и откройте ресурс на сайте. Проверочное изображение появится в конце страницы. После проверки вызов можно перенести в нужное место оформления.
При выбранном типе вывода galleryitem обычный тег TV запускает обработку значения. Поэтому не нужно помещать его внутрь еще одного img:
<!-- Для этой настройки TV так делать не нужно: -->
<img src="[[*gallery_photo]]" alt="Gallery в MODX: документация и практические примеры">
Не добавляйте к [[*gallery_photo]] модификатор htmlent: в этом месте нужен результат обработки TV, а не показ HTML как текста.
Для ограничения отображаемой ширины добавьте в подключенный файл стилей:
.gallery-photo-example {
max-width: 650px;
margin: 24px auto;
}
.gallery-photo-example img {
display: block;
max-width: 100%;
height: auto;
}
В Creative это можно добавить в css/styles.css. Для другой HTML-основы используйте ее подключенный файл стилей.
CSS ограничивает размер изображения на странице, но сам по себе не уменьшает размер загружаемого файла.

Проверяем сохранение и редактирование
- Заново откройте ресурс и убедитесь, что выбранное изображение сохранилось.
- Выберите другое изображение, сохраните ресурс и обновите сайт.
- Проверьте, что изменилось изображение нужного ресурса.
Если в вашем выпуске доступны инструменты обрезки, изменения размеров или поворота, попробуйте их на учебном изображении. Подтвердите изменения в редакторе, если требуется, затем сохраните ресурс и проверьте результат на сайте.
Редактирование через этот TV и массовое управление изображениями в альбоме — разные действия. Для изменения списка работ портфолио используйте менеджер Gallery, а не создавайте отдельное TV для каждой фотографии.
Если поле или изображение не появились
- Нет TV у ресурса — проверьте назначенный шаблон и доступ TV к этому шаблону.
- Нет нужного альбома или изображения в выборе — проверьте их наличие в менеджере Gallery.
- Выбор не сохранился — сохраните сам ресурс, затем откройте его заново.
- На сайте видны служебные данные вместо изображения — проверьте тип вывода galleryitem.
- HTML показан текстом — проверьте, не добавлено ли экранирование к результату TV.
- Изображение не загружается — откройте полученный src отдельно и проверьте пути и обработчик изображений.
Для этой практики используем стандартный вызов TV. Прямое получение сырого значения через переменную ресурса Fenom не следует считать автоматической заменой обработанного вывода galleryitem.
Страница менеджера галереи
Галерея поставляется с настраиваемой страницей менеджера (находится в верхнем меню «Компоненты»), где вы можете управлять своими альбомами. Вы можете создавать новые и использовать имя, которое вы даете ему во фрагменте галереи, для получения этого конкретного альбома. После создания альбома вы можете щелкнуть правой кнопкой мыши и обновить его, чтобы управлять фотографиями, связанными с ним.
Вы можете использовать четыре разных типа загрузки. Либо загрузка одного элемента (необязательно с расширенным текстовым описанием, см. Параметры системы, описанные выше), множественная загрузка, массовая загрузка, при которой выполняется поиск папки в файловой системе и импортируются найденные изображения, либо загрузка zip, которая распаковывает файл zip.
Медиа Источник
Галерея поставляется с настраиваемым типом источника мультимедиа, который можно использовать для отображения ваших альбомов и их элементов в левом дереве диспетчера. Просто создайте новый источник мультимедиа с типом «Галерея альбомов», а Галерея позаботится обо всем остальном.
Примеры
Пример строки кода для галереи на базе Galleriffic для альбома «Мой альбом».
[[!Gallery? &album=`Мой альбом` &plugin=`galleriffic`]]
Возьмите первые 10 фотографий с меткой (тегом) «Fun»:
[[!Gallery? &tag=`Fun` &limit=`10`]]
Захватите все фотографии из альбома «Мой альбом» с тегом «Синий»:
[[!Gallery? &album=`Мой альбом` &tag=`Синий`]]
Практика 1. Портфолио Creative через Gallery
Сохраняем сетку Creative, подписи и открытие большого изображения через SimpleLightbox. Меняем только источник данных: вместо TV portfolio_migx используем альбом Gallery.
Старые данные MIGX и его чанки пока не удаляем. Когда новый вариант заработает, на странице оставим только один вызов портфолио.
Создаем альбом
В менеджере Gallery создайте альбом с именем Creative Portfolio. При необходимости заполните описание и проверьте, что альбом активен.

В дальнейших вызовах используем имя альбома. Gallery также принимает его ID, но число из чужого примера не является ID вашего альбома.
Загружаем изображения
Откройте созданный альбом и выберите множественную загрузку изображений. В некоторых версиях кнопка называется Multi-Upload.
Для сравнения с MIGX можно загрузить те же шесть больших изображений из исходного Creative:
assets/img/portfolio/fullsize/1.jpg
assets/img/portfolio/fullsize/2.jpg
assets/img/portfolio/fullsize/3.jpg
assets/img/portfolio/fullsize/4.jpg
assets/img/portfolio/fullsize/5.jpg
assets/img/portfolio/fullsize/6.jpg
При обычной загрузке выбирайте файлы на компьютере из распакованного архива. Не нужно вводить приведенные пути в поле загрузчика: они показывают расположение исходных файлов.
Маленькие изображения из thumbnails отдельно не загружаем. В этом варианте Gallery подготовит миниатюры по параметрам вызова.

Загрузка изображений в Gallery не переносит автоматически подписи из TV MIGX. Их нужно заполнить в записях Gallery.
Заполняем название, описание и метки
Откройте редактирование первого изображения и заполните:
- Название: например,
Учебный проект 1. - Описание: короткое описание работы или изображения.
- Метки: например,
Сайты.
Повторите для остальных изображений и сохраните изменения. Проверьте, что нужные изображения активны.

В Creative метки используем только как подпись над названием работы. Фильтрации в этой первой практике нет.
Создаем чанк изображения
Создайте обычный чанк с именем creative.gallery.item:
<div class="col-lg-4 col-sm-6">
<a class="portfolio-box" href="[[+image_absolute]]" title="[[+name:htmlent]]">
<img class="img-fluid"
src="[[+thumbnail]]"
alt="[[+description:default=`[[+name]]`:htmlent]]" />
<div class="portfolio-box-caption">
<div class="project-category text-white-50">[[+tags:htmlent]]</div>
<div class="project-name">[[+name:htmlent]]</div>
</div>
</a>
</div>
Сохраните чанк.
Основные плейсхолдеры:
thumbnail— URL миниатюры, подготовленной Gallery.image_absolute— URL исходного изображения.name— название.description— описание; при пустом значении в alt используем название.tags— метки изображения.
Адреса изображений получаем от Gallery. Не добавляем к ним вручную base_url, каталог альбома или путь из старого TV.
Класс portfolio-box сохраняем: его использует SimpleLightbox в исходном Creative.
Создаем обертку портфолио
Создайте чанк creative.gallery:
<div id="portfolio">
<div class="container-fluid p-0">
<div class="row g-0">
[[!Gallery?
&album=`Creative Portfolio`
&thumbTpl=`creative.gallery.item`
&thumbWidth=`650`
&thumbHeight=`350`
&thumbZoomCrop=`1`
&thumbQuality=`90`
&sort=`rank`
&dir=`ASC`
&limit=`0`
&useCss=`0`
]]
</div>
</div>
</div>
Сохраните чанк.
Размеры 650 × 350 выбраны для этого упражнения. Если меняете пропорции оформления, подберите свои значения.
Параметр useCss=0 отключает стандартные стили Gallery: сетку и оформление берем из Creative. Встроенный плагин просмотра через параметр plugin не подключаем, поскольку на сайте уже используется SimpleLightbox.
sort=rank и dir=ASC задают порядок внутри альбома. limit=0 выводит все изображения.
Переключаем шаблон с MIGX на Gallery
В начальном шаблоне найдите прежний вызов:
[[$creative.portfolio.migx]]
Замените его на:
[[$creative.gallery]]
Если повторяете урок без предыдущей практики MIGX, замените весь исходный блок с id="portfolio" этим вызовом.
Не оставляйте старую и новую обертки одновременно: на странице должен быть один блок с id="portfolio".
Сохраните шаблон и откройте сайт. Должны появиться изображения и подписи из Gallery.

Проверяем результат
- Измените название одного изображения в Gallery и проверьте подпись на сайте.
- Добавьте еще одно изображение и убедитесь, что появилась новая карточка.
- Нажмите на несколько карточек: должно открываться соответствующее большое изображение.
- Проверьте сетку на узком экране.
- Убедитесь, что старые карточки из MIGX не выводятся вторым списком.
Для открытия оригинала используем image_absolute. Параметры imageWidth и imageHeight не уменьшают этот исходный файл. Для сайта подбирайте разумный размер загружаемых оригиналов.
Вариант вызова Gallery на Fenom
Если обработка Fenom непосредственно в шаблоне уже настроена, вместо вызова [[$creative.gallery]] можно использовать:
{set $cards = $_modx->runSnippet('Gallery', [
'album' => 'Creative Portfolio',
'thumbTpl' => 'creative.gallery.item',
'thumbWidth' => 650,
'thumbHeight' => 350,
'thumbZoomCrop' => 1,
'thumbQuality' => 90,
'sort' => 'rank',
'dir' => 'ASC',
'limit' => 0,
'useCss' => 0
])}
<div id="portfolio">
<div class="container-fluid p-0">
<div class="row g-0">
{$cards}
</div>
</div>
</div>
Здесь Fenom вызывает сниппет, а чанк creative.gallery.item остается обычным чанком с плейсхолдерами Gallery. Это не прямой цикл по JSON, как в MIGX.
Не добавляйте escape к переменной cards: она содержит уже сформированную HTML-разметку. Текстовые поля экранируются внутри чанка изображения.
Выбирайте один вариант подключения, а не оба одновременно. Для основной практики Fenom не требуется.
Практика 2. Галерея FlexStart с фильтрами
Этот дополнительный пример предназначен для отдельной подготовленной копии сайта или шаблона FlexStart.

Если сейчас проходите начальную практику на Creative, его можно оставить до соответствующего этапа курса.
Не копируйте целиком стили и скрипты FlexStart в Creative. У двух примеров разная разметка и разные просмотрщики изображений.
Во FlexStart используем существующие Isotope и GLightbox. Кнопку перехода на portfolio-details.html убираем: каждая карточка только открывает изображение.
Проверяем готовую верстку
До подключения MODX убедитесь, что исходное портфолио вашей версии FlexStart уже работает:
- Переключатели меняют набор видимых карточек.
- Изображения открываются в GLightbox.
- На странице нет ошибок загрузки необходимых файлов.
В используемом комплекте предусмотрены:
assets/vendor/glightbox/css/glightbox.min.css
assets/vendor/glightbox/js/glightbox.min.js
assets/vendor/imagesloaded/imagesloaded.pkgd.min.js
assets/vendor/isotope-layout/isotope.pkgd.min.js
assets/js/main.js
Также сохраняем стили FlexStart, сетку Bootstrap и Bootstrap Icons. Основной assets/js/main.js подключается после используемых библиотек.
Если файлы уже подключены исходной версткой, повторно добавлять их не нужно. Не создавайте второй экземпляр Isotope или GLightbox поверх существующей инициализации.
Создаем альбом и задаем категории
В Gallery создайте активный альбом FlexStart Portfolio. Загрузите в него изображения для второго примера.
Для начала можно взять по одному файлу из архива FlexStart:
assets/img/portfolio/app-1.jpg
assets/img/portfolio/product-1.jpg
assets/img/portfolio/branding-1.jpg
assets/img/portfolio/books-1.jpg
Для каждого изображения заполните название, описание и одну техническую метку категории:
| Метка Gallery | Подпись фильтра | Класс карточки |
|---|---|---|
app |
Приложения | filter-app |
product |
Продукты | filter-product |
branding |
Айдентика | filter-branding |
books |
Издания | filter-books |
В этом упрощенном варианте у изображения должна быть ровно одна из четырех меток. Вводите ее латиницей, без точки, пробелов и префикса filter-.
Например, в Gallery сохраняем app, а класс filter-app сформируем в чанке.

Не подставляйте сюда произвольный список меток через запятую. Для нескольких категорий у одного изображения потребуется отдельно преобразовать список в корректные CSS-классы. В этом упражнении такую обработку не добавляем.
Создаем чанк карточки FlexStart
Создайте обычный чанк flex.gallery.item:
<div class="col-lg-4 col-md-6 portfolio-item isotope-item filter-[[+tags:htmlent]]">
<div class="portfolio-content h-100">
<img src="[[+thumbnail]]"
class="img-fluid"
alt="[[+description:default=`[[+name]]`:htmlent]]">
<div class="portfolio-info">
<h4>[[+name:htmlent]]</h4>
<p>[[+description:htmlent]]</p>
<a href="[[+image_absolute]]"
title="[[+name:htmlent]]"
data-gallery="portfolio-gallery-[[+tags:htmlent]]"
class="glightbox preview-link"
aria-label="Увеличить изображение: [[+name:htmlent]]">
<i class="bi bi-zoom-in" aria-hidden="true"></i>
</a>
</div>
</div>
</div>
Сохраните чанк.
Ссылка с классом details-link здесь отсутствует. Не нужно создавать страницы проектов или заполнять адреса portfolio-details.html.
Метка участвует в двух местах:
- Формирует класс для фильтра Isotope.
- Формирует группу GLightbox, чтобы изображения одной категории открывались в общей группе просмотра.
Создаем обертку с переключателями
Создайте чанк flex.gallery:
<section id="portfolio" class="portfolio section">
<div class="container section-title" data-aos="fade-up">
<h2>Портфолио</h2>
<p>Примеры работ</p>
</div>
<div class="container">
<div class="isotope-layout"
data-default-filter="*"
data-layout="masonry"
data-sort="original-order">
<ul class="portfolio-filters isotope-filters"
data-aos="fade-up" data-aos-delay="100">
<li data-filter="*" class="filter-active">Все</li>
<li data-filter=".filter-app">Приложения</li>
<li data-filter=".filter-product">Продукты</li>
<li data-filter=".filter-branding">Айдентика</li>
<li data-filter=".filter-books">Издания</li>
</ul>
<div class="row gy-4 isotope-container"
data-aos="fade-up" data-aos-delay="200">
[[!Gallery?
&album=`FlexStart Portfolio`
&thumbTpl=`flex.gallery.item`
&thumbWidth=`800`
&thumbHeight=`600`
&thumbZoomCrop=`1`
&thumbQuality=`90`
&sort=`rank`
&dir=`ASC`
&limit=`0`
&useCss=`0`
]]
</div>
</div>
</div>
</section>
Сохраните чанк.
В шаблоне FlexStart замените исходную секцию портфолио целиком одним вызовом:
[[$flex.gallery]]
Оставляем классы и data-атрибуты, которые использует исходная инициализация шаблона. Названия категорий в кнопках можно менять, но значения data-filter должны совпадать с классами карточек.
Для небольшого учебного альбома выводим все изображения. Isotope фильтрует уже загруженные карточки в браузере: он не запрашивает новую выборку Gallery при каждом нажатии.
Если ограничить вывод через limit, фильтр будет работать только с выведенной частью альбома. Это важно учитывать при дальнейшем добавлении пагинации.
Центрируем единственную кнопку увеличения
В исходной карточке были две ссылки: увеличение и переход к проекту. После удаления второй при необходимости добавьте в конец стилей FlexStart:
#portfolio .portfolio-info .preview-link {
left: 50%;
transform: translateX(-50%);
}
Это изменение относится только ко второму примеру. В Creative его добавлять не нужно.
Проверяем категории и просмотр изображений
- Откройте страницу: при фильтре «Все» должны отображаться все активные изображения альбома.
- Нажмите «Приложения»: должны остаться карточки с классом filter-app.
- Проверьте остальные категории.
- Откройте изображение через кнопку увеличения.
- Убедитесь, что кнопки перехода к странице проекта нет.
- Измените метку изображения в Gallery и проверьте переход в другую категорию после обновления страницы.

Если карточка видна в «Все», но отсутствует в своей категории, откройте HTML страницы и сравните ее класс со значением data-filter. Например, для метки app нужна пара filter-app и .filter-app.
Это фильтрация внутри одной страницы, а не отдельные страницы категорий и не серверный поиск по альбому.
Вызов второго примера на Fenom
Для этого варианта оставьте обычный чанк flex.gallery.item. В Fenom-шаблоне вместо [[$flex.gallery]] используйте:
{set $cards = $_modx->runSnippet('Gallery', [
'album' => 'FlexStart Portfolio',
'thumbTpl' => 'flex.gallery.item',
'thumbWidth' => 800,
'thumbHeight' => 600,
'thumbZoomCrop' => 1,
'thumbQuality' => 90,
'sort' => 'rank',
'dir' => 'ASC',
'limit' => 0,
'useCss' => 0
])}
<section id="portfolio" class="portfolio section">
<div class="container section-title" data-aos="fade-up">
<h2>Портфолио</h2>
<p>Примеры работ</p>
</div>
<div class="container">
<div class="isotope-layout"
data-default-filter="*"
data-layout="masonry"
data-sort="original-order">
<ul class="portfolio-filters isotope-filters"
data-aos="fade-up" data-aos-delay="100">
<li data-filter="*" class="filter-active">Все</li>
<li data-filter=".filter-app">Приложения</li>
<li data-filter=".filter-product">Продукты</li>
<li data-filter=".filter-branding">Айдентика</li>
<li data-filter=".filter-books">Издания</li>
</ul>
<div class="row gy-4 isotope-container"
data-aos="fade-up" data-aos-delay="200">
{$cards}
</div>
</div>
</div>
</section>
Fenom здесь управляет вызовом сниппета и общей разметкой. Плейсхолдеры отдельной карточки обрабатывает Gallery. Не нужно включать расширенный доступ Fenom к PHP или объекту MODX ради этого вызова.
Как и в первом примере, выбираем один способ вывода. Повторную инициализацию Isotope и GLightbox для Fenom-варианта не добавляем.
Если Gallery не показывает изображения
- Проверьте точное имя или ID альбома.
- Проверьте активность альбома и изображений.
- Убедитесь, что thumbTpl содержит имя существующего чанка.
- Посмотрите, появились ли карточки в HTML, даже если изображения не загрузились.
- Откройте адрес thumbnail или image_absolute в отдельной вкладке.
- Если оригинал работает, а миниатюра нет, проверьте запрос обработчика миниатюр, журнал PHP и права на запись в используемые рабочие каталоги.
- При переносе сайта проверьте gallery.files_path и gallery.files_url: путь в файловой системе и публичный URL должны соответствовать друг другу.
Не назначайте всем файлам права 777 и не удаляйте изображения или каталог Gallery ради попытки исправить миниатюры.
Если сетка отображается, но не работает увеличение, проверяйте библиотеку просмотра и нужные классы ссылок. Если не работает фильтрация FlexStart, отдельно проверяйте Isotope, imagesLoaded и соответствие data-атрибутов вашей версии шаблона.
Gallery отвечает за данные и их вывод. Сетка, фильтры и просмотрщик относятся к оформлению сайта.
Следующий шаг
В основной практике мы заменили портфолио Creative на MIGX вариантом Gallery. Во втором примере разобрали фильтруемую галерею FlexStart без отдельных страниц проектов.
Дальше разберем обработку изображений через phpThumb и pThumb: размеры, обрезку, качество и кеширование. На примере нашего портфолио получим миниатюры, в src которых будет ссылка на готовый файл кеша вместо запроса к обработчику Gallery.
Штатный адрес миниатюры Gallery с connector.php сам по себе не является ошибкой. Следующий урок показывает другой способ подготовки и вывода изображений.
После работы с изображениями перейдем к контактной форме на FormIt. Дополнительный пример FlexStart можно повторить позже, когда будет подготовлен соответствующий проект.










