MODX. Каталоги с информацией и компонент Collections

Collections — компонент для упорядочивания ресурсов, объединения их в коллекции. Удобен для создания блогов, новостных лент, галерей и других коллекций. Служит аналогом инфоблоков из системы Bitrix. Имеет множество преимуществ над Articles хотябы в том, что дочерние ресурсы можно спокойно переносить в обычное дерево ресурсов, и наоборот.

Компонент имеет множество настроек, все настроики производятся в "типах коллекций" (collection views) которые можно найти в меню "Приложения" (Extras). По умолчанию идет один тип настроек, которого хватит для большинства мелких сайтов, но, при необходимости, можно создавать неограниченное количество коллекций с разными настройками.

Создание коллекции и добавление ресурсов

Простейший вариант: коллекции создаются так же как и обычные ресурсы, только при выборе что же создать, надо нажать — коллекцию. Итак, правоклик по контексту Website => Создать (Create ) => Создать коллекцию здесь (Collection)Не забудьте, что компонент предварительно надо установить.

Далее, нажимаем на созданную коллекцию, и видим на экране пустой список дочерних ресурсов, с кнопкой «Создать дочерний ресурс» (Create child), которая создает ресурсы по аналогии с обычными.

Вариант похитрее: если ресурс уже создан, но появилась необходимость сделать из него коллекцию, идем на вкладку «Настройки» (Settings) ставим галку — контейнер. И в поле «Тип ресурса» (Resource Type) выбираем — «Коллекция» (Collection). После этих манипуляций у ресурса появится возможность создавать дочерние ресурсы.

Настройки коллекций

  • Мультивыбор (Default for templates) —  если коллекциями надо делать все ресурсы с определенными шаблонами;
  • Размер страницы (Page size) — устанавливает количество строк таблицы при постраничном выводе;
  • Поле сортировки (Sort field) — указывается поле для сортировки по умолчанию. Если установить menuindex, ресурсы можно будет перетаскивать;
  • Разрешить массовые действия (Allow bulk actions) — добавляет флажки для выбора элементов, и разрешает массовые действия над выбраными элементами;
  • Разрешить перетаскивание (Allow drag & drop) — включает возможность сортировки перетаскиванием (только если в поле сортировки проставлен параметр menuindex)

Таблица под настройками —  список полей, которые будут отображаться в списке ресурсов.

Список полей

Столбцы:

  • Заголовок — название, можно указывать кирилицей;
  • Название — кодовый идентификатор поля. Чтобы использовать допонительное поле, надо указать приставку tv_;
  • Скрытый — будет выводиться скрытым, т.е. будет подготавливаться, но чтобы вывести на экран, понадобиться кликнуть на заголовок таблицы списка и проставить галку напротив;
  • Сортировка — указывает, можно ли сортировать по данному полю;
  • Ширина — ширина столбца в пикселях;
  • Редактор — формат редактирования поля в списке;
  • Рендер — указывается имя сниппета с рендером для преобразования полей перед выводом в списке. Полезен для таких полей как изображения, migx и т.п.;
    Например:
    <?php
    $value = $modx->getOption('value', $scriptProperties, '');
    return strtoupper($value);

    Этот код преобразует все значения столбцов в верхний регистр.

  • Снипет рендера — если для рендера надо использовать снипет;
  • Положение — порядковый номер в списке;
  • Тип сортировки — указание типа сортировки;

Некоторые варианты для поля Редактор

  • textfield — текстовая строка;
  • textarea — текстовое поле;
  • numberfield — цифровое поле;
  • modx-combo-boolean — значения да/нет;
  • {"xtype":"numberfield","allowDecimals":false,"allowNegative":false} Ext Js поддерживающий разные xtype.

XTYPE для Сollections

Некоторые варианты для поля Рендер

  • Collections.renderer.pagetitleWithButtons — заголовок страницы с кнопками редактирования, просмотра и т.п.
  • Collections.renderer.datetimeTwoLines — дата и время в 2 строки. Формат устанавливается в настройках системы
  • Collections.renderer.datetime — дата и время в 1 строку. Формат устанавливается в настройках системы
  • Collections.renderer.image — изображение
  • Collections.renderer.pagetitle — заголовок страницы обернутый в h2, с сылкой на редактирование
  • Collections.renderer.pagetitleLink — заголовок страницы, с сылкой на редактирование
  • Collections.renderer.qtip — при наведении мыши всплывает подсказка со значением (используется для длинных значений в поле)
  • Collections.renderer.boolean — чекбокс

Создание собственного рендера

Собственные функции рендера можно создавать используя JS и CSS файлы, указав url до них в настройках системы

Подборки (Selections)

С 3 версии компонента появился новый вид ресурсов «подборки». Подборки используются в том случае, если вам необходим раздел состоящий из ресурсов уже существующих на сайте, для избегания их дублирования. По своей сути, подборки — это каталог ссылок на существующие ресурсы, расположенные в каком-либо другом месте. Для создания подборки при создании ресурса надо выбрать соответствующий пункт — подборка (selection).

Для вызова ресурсов состоящих в подборке используется сниппет getSelection:

[[getSelections?
    &selections=`[[*id]]`
    &tpl=`myTplChunk`
]]

getSelections это сниппет-обёртка для getResources, поэтому он зависит от установленного getResources, и ему доступны все свойства от getResources. Помимо этого у getSelections есть собственные свойства:

  • &selections — ID Ресурса контейнера Selections
  • &getResourcesSnippet — при желании можно вызвать другой сниппет листинга, но в этом случае не исключается вероятность возникновения ошибок, т.к. сниппет не тестировался с другими компонентами. 

Использование getSelections с pdoResources: 

[[getSelections? 
	&selections=`[[*id]]` 
	&tpl=`myTplChunk`
	&getResourcesSnippet=`pdoResources`
]]

Пока проблем при их совместном использовании замечено не было, это вполне рабочая конструкция.

Тонкости

ID ресурса по умолчанию — скрытый. Чтобы узнать его, надо в списке ресурсов навести на заголовок таблицы, должна появиться стрелка, нажав на которую надо выбрать пункт «столбцы», и поставить галку напротив пункта ID.

Документация