вторник, 9 июня 2015 г.

Управление словарями в MODX

Практически на каждом сайте требуется создать свой словарь, из которого контент менеджер мог бы управлять словами и выражениями на сайте не связанными с какими-то конкретными ресурсами. Для таких целей в MODX предусмотрена страница "Управление словарями"

Но в Управлении словарями эти самые словари разделены на пространства имен(среди них компоненты) и темы в них, и все они заполнены уже сформированными специализированными наборами слов, которые применяются в других компонентах в большинстве случаев для отображения в админке сайта на MODX. Эти наборы слов будут мешаться контент менеджеру, если он захочет изменить содержимое конкретно нашего сайта.

Для того чтобы позволить контент менеджеру редактировать слова, относящиеся только к нашему сайту нужно создать свое пространство имен. Для этого с начала создадим папки с содержимым начального набора слов, которые потом можно будет добавлять через это-же Управление словарями.
Структура папок для нашего пространства имен должна находится в core/components/sitename(где sitename - название нашего сайта) и иметь такой вид:

Внутри должен лежать файл default.inc.php, в котором и будут находится исходные слова для нашего словаря.
Теперь, когда папка есть, нужно создать пространство имен через соответствующую страницу в админке MODX:

Создаем пространство имен:
Очищаем кеш сайта и заходим в управление словарями, которое у меня расположено во вкладке Управление как в моей предыдущей статье

Вуаля, все ради того, чтобы в Управлении словарями появился наш сайт с нашими словами:
Теперь, для того чтобы их использовать, в любом месте сайта просто вставляем:
[[!%sitename.example? &namespace=`sitename` &language=`ru`]]
или
[[!%sitename.another_example? &namespace=`sitename` &language=`ru`]]
в зависимости от того, какое слово мы хотим вывести из словаря.
Если кого-то смущает дублирование sitename, то можете не создавать имена слов из Словаря через точку с именем файла, но так безопаснее, потому-что многие имена слов из Словаря могут перебиваться именами из других пространств имен, хотя указано именно наше пространство, по крайней мере у меня такой баг возникал.

Есть еще такой трюк: в значения слов из словаря можно вставлять переменные MODX, например:
"Наш сайт [[++site_name]] рад приветствовать вас"
или:
"Вы попали на страничку [[*pagetitle]]"
Читать далее

пятница, 29 мая 2015 г.

MODX. Как не дать контент менеджеру сайт испортить

Статья руководство о том как настроить админку и ограничить доступ контент менеджеру(администратору сайта) к средствам разработчики на сайте. Чтобы он не смог зайти на вкладку "Элементы", и в "Настройки системы", и вообще чтобы не видел их.
В конечном результате мы должны получить что-то типа этого:

Как видно на скриншоте из админки исчезла вкладка "Элементы", исчезла шестеренка справа наверху, отвечающая за настройки MODX, а пункт "Управление словарями" из этих настроек перенесен в меню "Управление", чтобы у контент менеджера была возможность редактировать словари.
Во вкладке Файлы есть доступ только к источнику Upload, это просто папка в корне сайта /upload/ в которой контент менеджер может творить что хочет не опасаясь что может испортить в ядре сайта.
Итак, как же добиться такой крутой админки для контент менеджера?
Для начала зайти в Контроль доступа:


И импортировать подготовленную политику доступа:

После этого создаем новую группу пользователей и называем её соответственно, прописываем в ней все необходимые поля, включая имя предварительно созданного пользователя("Управление"->"Пользователи"->"Новый пользователь" только не назначайте ему неограниченные права соответствующей галочкой и не забудьте галочку "Активный").

Если все сделали правильно появится новая группа пользователей, уже содержащая нашего указанного пользователя, который будет заходить в админку и видеть только необходимые ему вкладки и пункты меню MODX. Чтобы этого добиться отредактируем нашу группу пользователей вызвав контекстное меню группы Content Managers:

На вкладке "Разрешения" в "Доступе к контекстам"  измении политику доступа на нашу "Content Manager", чтобы получилось таким образом:

После этого нужно сохранить изменения в группе пользователей и перезагрузить права доступа:


Вот и все, теперь можно попробовать зайти в другом браузере(чтобы не переключаться по несколько раз с контент менеджера на админа) зайти как контент менеджер и проверить работоспособность админки:


Вид обновленной админки:


Но остались два последних штриха: перенести Управление словарями из настроек MODX в меню "Управление" и ограничить доступ к файловой системе, дать доступ только к папке /upload/.
Начнем с того что попроще: чтобы перенести в Управление словарями в меню Управление нужно через пользователя admin(в нашем случае пользователь с неограниченными правами, у которого все еще есть доступ к настройкам MODX) зайти в Действия

И просто перенести пункт меню "Управление словарями" из настроек в другое меню(Управление):

Перезагружаем страницу, и готово: пункт меню на нужном нам месте:

Теперь чтобы у контент менеджера был доступ только к папке /upload/ воспользуемся инструкцией из этой статьи.

ПРИМЕЧАНИЕ: Если нужно скрыть какую-то дополнительную менюшку, например MIGX, то достаточно в Действиях зайти в редактирование пункта меню, и поставить в нем ключ привилегии, который будет отвечать так-же за показ этого пункта меню помимо прочих:


Ключи привилегий можно посмотреть в редактировании нашей импортированной политики доступа Content Manager(например):

Таким образом меню MIGX, в котором мы поставили в Привилегии components не будет отображаться для нашего пользователя content_manager потому-что мы убрали эту привилегию в политике доступа Content Managers. То-есть меню MIGX вместе с остальными менюшками и пунктами меню, где проставлены в Привилегии components, не будет отображаться для пользователя потому-что у него нет такой привилегии :) Все оказывается достаточно логично и просто если задуматься.

Ссылки:
http://bobsguides.com/blog.html/2013/10/24/hiding-modx-top-menu-items-from-some-users/
Читать далее

среда, 29 апреля 2015 г.

Начало работы в MODX. Первоначальная настройка. Приложения для установки, настройки системы и дружелюбные URL

Статья - заметка, о том какие манипуляции нужно произвести в свежеустановленной CMF MODX для комфортной работы как программиста, так и контент менеджера.

Первоначальные приложения для установки:

CKEditor - редактор текста для содержимого документов(поле content), который преобразует форматирование, которое задает контент менеджер в HTML код;
Ace - редактор кода для шаблонов, сниппетов, чанков и плагинов;
pdoTools - набор удобных и производительных инструментов, включающие в себя аналог getResources - сниппет для вывода полей ресурсов списком с помощью чанков, которые используются как шаблоны для вывода и аналог fastField - сниппет, позволяющий быстро и удобно получить поле стороннего ресурса таким образом: [[#23.pagetitle]];
Console - полезное дополнение, позволяющее зайти в "Приложения"=>"Console" и запустить php скрипт, который не требуется вводить ни в плагины ни в сниппеты, а просто использовать один(или более) раз;
FormIt - сниппет, облегчающий работу с HTML формами(<form>). Его можно положить на странице с формой и он будет ждать момента GET или POST запроса к этой странице, после чего начнет работать;
phpthumbof - сниппет, генерирующий ссылки на изображения с заданными параметрами размеров и качества, обычно используется для вывода уменьшенных версий изображений в тех местах - где нет смысла выводить исходное качество изображения, где нужно сохранить трафик пользователя и увеличить скорость загрузки страницы;
Gallery - расширение для составление галерей, альбомов, и использования их в сайтах для различных слайдеров или сетов фотографий;
MIGX - дополнение, позволяющее создать дополнительное поле в виде таблицы, которое можно использовать для слайдеров, списка партнеров, или просто небольшой информации, которая недостойна того, чтобы создавать для неё отдельный ресурс(я про него рассказывал);
Collections - дополнение, с помощью которого дочерние ресурсы можно выводить не в общем древе, а в отдельной вкладке ресурса, с возможностью вывода дополнительной инфы и быстрого её редактирования(я про него рассказывал);
Wayfinder - сниппет для вывода многоуровневых менюшек на сайтах;
translit - дополнение, которое используется для работы с ЧПУ(Человеку Понятный Урл), оно транслиретирует русский pagetitle документов при сохранении и формирует из него alias, из которых как раз и формируются адреса страниц в MODX;
MinifyX - крутой сниппет, который позволяет работать c SCSS, LESS и coffee прямо в MODX, и компилировать их в css и js на лету, при загрузке страниц(понятия не имею почему это почти нигде не упоминается, но на страничке, ссылку на которую я прикрепил, можно зайти в модальное окно "Документация" и убедится, посмотреть).

Настройки системы:

site_name: **Имя сайта**

friendly_alias_translit: russian
use_alias_path: Да
friendly_urls: Да

error_page_header: HTTP/1.0 404
unauthorized_page_header: HTTP/1.0 401 Unauthorized

upload_files: txt,html,htm,xml,js,css,zip,gz,rar,z,tgz,tar,htaccess,mp3,mp4,aac,wav,au,wmv,avi,mpg,mpeg,pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif,psd,ico,bmp,odt,ods,odp,odb,odg,odf,otf,eot,svg,ttf,woff,woff2,json

Здесь настраиваем имя сайта, ЧПУ, избегаем проблем с кодировками и разрешаем добавлять в MODX через менеджер файлов дополнительно svg, шрифты и json.

Дополнительная настройка для ЧПУ:

"Сайт"=>"Типы содержимого"=>Строчка с HTML=>Убираем расширение файла, оставляем клетку пустой.
Переименовываем ht.access в .htaccess

При размещении готовой верстки в чанк или шаблон не забудьте добавить 
<base href="[[++site_url]]" />
в <head> страницы, иначе не избежать проблем с выводом изображений, скриптов и стилей :)

Читать далее

суббота, 11 апреля 2015 г.

MODX TV Список(Множественный и одиночный выбор). Применение возможностей @EVAL, @SELECT

TV в MODX является очень мощным инструментом, у которого куча возможностей: от стандартных и вполне очевидных и до тех, на какие у вас хватит фантазии, ведь в доп. полях практически нет никаких ограничений. Я например не могу себе представить то, что нельзя замутить с помощью TV(в разумных пределах естественно).

Существует несколько стандартных типов ввода в TV, которые позволяют выводить в админке списки из различных пунктов для выбора(одиночного или множественного). 
Они дают возможность контент менеджеру выбрать из предложенного списка какой либо пункт:

Или несколько пунктов:
А вы, как разработчик сайта, можете использовать полученное значение выбора как вам заблагорассудится:

1. Просто вывод выбранного текста
Можно,например, использовать при вводе в Возможные значения такого содержимого: 
Из админки это будет выглядеть так:
И, например, при вводе в шаблон ресурса [[*example-choice]]  в нужном месте мы, при открытии страницы, получим "Текст для вывода 1" или "Текст для вывода 2" в зависимости от нашего выбора.
Это надуманный пример, но удобен для начального понимания того как работает поле Возможные значения: разделяет содержимое по знаку "||" и выводит их пунктами в списке выбора.

2. Использование значения для режима вывода содержимого на странице можно реализовать если ввести что-то подобное в возможные значениях:
Из админки это, будет выглядеть так:
Таким образом MODX берет из поля Возможные значения содержимое, делит его по знаку "||", и к тому же каждый поделенный пункт делит еще по знаку ==, беря первую часть(например "Маленький слайдер") как текст для списка, который видит пользователь админки, а вторую часть("small") как значение, которое будет выводится, когда мы будем запрашивать значение нашего TV: [[*slider-type]] выведет small.
Теперь мы можем добавить примитивную логику в наш шаблон странички, с помощью фильтров MODX, чтобы выводить маленький или большой слайдер в зависимости от выбора:
[[*slider-type:is=`small`:then=`[[$SmallSlider]]`:else=`[[$BigSlider]]`]]
Здесь уже пример более приближен к реальности, и взят из реального проекта.

3. Вывод пункта из динамического списка. Тут мы подходим к самому интересному:
для меня, в свое время, открытием было то, что в поле Возможные значения можно не только написать какое-то статическое содержимое, но ввести исполняемый код:
SQL:
 или PHP:

Достаточно просто прописать ключевое слово вначале "@SELECT" для SQL, и "@EVAL" для PHP.
Как видно на первом скрине с SQL кодом: в нем я просто выбираю список ресурсов из БД, у которых родитель с id 53, и шаблон с id 19. Для вывода списка ресурсов по идее предназначен соответствующий тип вывода "Список ресурсов"(он и правильнее для этой цели с точки зрения реализации с помощью AJAX подгрузки по поиску), но дело в том что в нем нет возможности выбора нескольких пунктов сразу, как на 2-м скрине из этой статьи, на нем вы можете посмотреть результат вывода пунктов с помощью SELECT:

Выборка из БД с помощью "@SELECT" не требует дополнительных усилий по оформлению в отличие от "@EVAL" подхода, в нем нам необходимо с помощью какого-либо сниппета для вывода списка(в данном случае getImageList от MIGX, но можно использовать и всем хорошо знакомый getResources) привести наш массив пунктов к уже знакомому виду: "Значение 1==value1||Значение 2==value2".
Только в данном случае мы к началу добавляем еще один пункт "- Выберите Вопрос - Ответ==||", который будет выдавать нам пустое значение при его выборе.
Как я уже сказал последний пример использования поля Возможные значения содержит код, использующий сниппет getImageList для получения списка пунктов из MIGX таблички в каком-либо ресурсе, что по-моему очень круто и для некоторых случаев удобно: когда какая либо информация не заслуживает отдельного ресурса(не должна иметь собственную страницу и имеет пару полей для заполнения) как в моем случае вопрос - ответ:

Но в тоже время есть потребность выбирать нужный вопрос-ответ для вывода в подвале(например как на моем 2-м скрине в этой статье).

Кстати: при использовании Списка(множественный выбор) следует выбрать тип вывода: "Разделитель" и  ввести запятую: "," в предложенное поле:
тогда при выборе, например, нескольких ресурсов в нужном месте у вас будет выводится что-то подобное: "93,95,97". Такую форму вывода можно использовать например в сниппете getResources:
[[!getResources? &parents=`-1` &resources=`[[*multi-docs]]` &tpl=`myRowTpl`]]

Как видите поле Возможные значения - очень мощный, гибкий и довольно удобный инструмент, который показывает только малую часть того, что может TV в MODX.
Поле Значение по умолчанию тоже по идее может использоваться как динамический вывод какой-то информации, самый простой пример:

который выводит текущее время, при загрузке страницы, однако данный способ будет нормально работать только если в настройках ресурса поставить некешируемый вызов:

иначе время будет не актуально. Но нужно понимать что так делать не правильно, ведь подобную задачу обычно выполняют сниппеты, не смотря на это можно придумать и что-то более подходящее для доп. поля, допустим: если создать скрытый TV(migx-table-summ) по соседству с MIGX TV(migx-table), и в поле Значение по умолчанию migx-table-summ ввести некоторый код, который из таблицы MIGX берет значения из одного из столбцов(например цена), умножает на значение из другого столбца(например количество) то можно выводить и получать результирующую сумму из таблицы migx-table просто вызвав TV в теле шаблона ресурса: [[*migx-table-summ]].
Хотя это довольно спорный момент, скорее всего очевиднее было бы писать подобный код в теле какого-либо сниппета, и вызвать его например так: [[*migx-table:calcSumm]], но полезно знать что есть такая возможность, так как она может пригодится.
Вышепреведенный код можно найти в моем репо:
https://github.com/Jonybang/ModX-tehniques/tree/master/dynamic-select
Ссылки:
Документация по @SELECT
Input и Output фильтры в MODX
Обсуждение по вводу в Возможные значения исполняемого кода
Документация по @EVAL который можно практически в любом месте использовать в MODX
Использование SQL в Возможных значениях
Читать далее

четверг, 19 марта 2015 г.

Советы начинающему верстальщику с примерами. HTML5 и Bootstrap.

Заметил что в сети есть куча статей на эту тему, но большинство из них уже достаточно устаревшие, и большая часть из остальных - просто рассказывают минимум общими словами, поэтому я решил написать свою статью с преферансом и куртизанками с html5 и рекомендациями от backend специалиста.
Итак, начнем:




  1. Используйте Bootstrap, он здорово сокращает время на разработку верстки и позволяет использовать кучу довольно привлекательных элементов из коробки. Если надоел или не подходит дефолтный стиль Bootstrap то можно воспользоваться разнообразными дополнительными темами для него.
  2. Складывайте все файлы аккуратно по полочкам папочкам(css, js, img, fonts) и помещайте все в папку assets, чтобы к файлам, ответственным за верстку можно было попасть по путям assets/css, assets/js и т.д. Если вы последуете совету, то много разработчиков скажет вам спасибо.
  3. Если вы прочитали в какой-то древней мудрой книжке про то, что нужно верстать с помощью table и будет вам счастье, то не верьте! table используется только непосредственно для таблиц с данными(как в экселе) но ни в коем случае не для расположения элементов на странице! Верстайте как все нормальные люди с помощью div-ов и готовых классов bootstrap.
  4. Пользуйтесь всеми преимуществами HTML5, это прогрессивно, круто и очень удобно, и сейчас почти везде поддерживается. Вот несколько наиболее часто используемых приемов в HTML5: http://habrahabr.ru/post/136592/
  5. Выравнивайте верстку, так чтобы теги открывались и закрывались на одном уровне и не скакали по всей странице, все должно быть предельно аккуратно, стремитесь быть перфекционистом. Я серьезно! Выровненная верстка сэкономит кучу времени и вам и тем кто будет работать с ней в дальнейшем.
  6. Не засоряйте верстку лишними классами и тем более стилями, ниже я хочу показать пример из реального провекта: как НЕ следует верстать. На примере показана верстка модального окна, зеленым пункты указал стрелочками непосредственно, остальными цветами обозначены соответствующие недочеты(синие относится к синей надписи, красное к красной).

    А теперь пример: как следовало выполнить ту-же самую задачу но более правильными способами(не идеально, но лучше) с использованием Bootstrap.

    Под лишними классами я имею в виду то, когда можно обойтись одним классом родительского элемента вместо указания нескольких классов для дочерних элементов, как например здесь:
  7. В текстовых блоках стремитесь указывать как можно меньшее количество классов, и так-же присваивать их преимущественно родителям, так как текстовые блоки зачастую требуется вводить из админки сайта, а этим занимаются контент менеджеры которые не понимают и не должны понимать что такое классы, и тем более какие следует проставлять классы для того чтобы страница выглядела как надо, ниже пример того о чем я говорю:

    С изображениями в текстовых блоках следует поступать так-же, чтобы их без проблем можно было закинуть в текстовый редактор админки сайта.
Читать далее

понедельник, 9 марта 2015 г.

MIGX - компонент для ModX. Краткий обзор, готовые конфиги

MIGX - очень полезный компонент для ModX, позволяющий создавать дополнительные поля(TV) в виде удобных табличек с перетаскиванием и редактированием значений как в теле таблицы так и в отдельном модальном окне.

При нажатии "Добавить элемент" может открываться модальное окно с формой для ввода данных, а может просто добавляться строка в конец таблицы, которую можно тут же заполнить без лишних манипуляций:

Поведение и свойства отображения элементов можно гибко настраивать через менеджер MIGX, а можно просто экспортировать JSON объект с готовыми настройками.
Для начала MIGX нужно установить через стандартный установщик приложений ModX, в процессе установка предложит вам выбор: где расположить пункт меню, ведущий в Менеджер MIGX, я рекомендую расположить его в меню "Приложения"(Extras/Components).
Зайдя в Менеджер MIGX, перейдите на вкладку "MIGX":


Где вы увидите пустую табличку, в отличие от моей, это список конфигураций для дополнительного поля MIGX, чуть позже узнаете как связать TV и эту конфигурацию.
Для начала вам нужно добавить элемент, нажав на соотвествующую кнопку, в результате чего появится модальное окно c многочисленными настройками.

Я рекомендую для начала воспользоваться готовым конфигом моего производства для добавления партнеров (тот что на первом скрине):
https://github.com/Jonybang/ModX-tehniques/blob/master/MIGX/partners.js
Для этого просто назовите как-нибудь вашу конфигурацию(типа "my-config") и сохраните её, нажав "Выполнено".
После чего через контекстное меню откройте окно для экспорта/импорта JSON объекта конфигурации:

И вставьте туда содержимое моей конфигурации:

Теперь можете сохранить и наконец создать привычное Дополнительное поле(TV), назвав его, к примеру, migx-partners и выбрав тип ввода "migx":
После чего появится поле "Конфигурации", в которое можно ввести имя нашего конфига:
Вы могли заметить что кроме "Конфигурации" в TV присутствуют другие поля. Эти поля также предназначенны для ввода конфигураций, но они гораздо менее удобны чем в Менеджере MIGX, я советую пользоваться именно менеджером, тем более что там есть интерфейс для редактирования конфига.
Теперь можно указать шаблон, в котором это TV будет появляться и зайти в ресурс с нашим шаблоном для того чтобы проверить результат:

Теперь вы можете  попробовать добавить в него элемент и посмотреть на поведение таблицы, но вы не увидите тех красивых галочек со столбца "Активный" как у меня на скринах, так как вы не добавили их изображения в папку assets/img.
Но не беспокойтесь, я подготовил для вас эти изображения в том же репозитории, где располагаются мои конфиги:
https://github.com/Jonybang/ModX-tehniques/tree/master/MIGX/assets/img
Пользуйтесь на здоровье, или поставьте те, которые вам больше нравятся.



Итак, давайте попробуем разобрать основные моменты конфигурации, чтобы не действовать совсем в слепую, а хоть немного понимать с чем работаем:
"formtabs" - вкладки модального окна, если присутствует только одна вкладка, то они скрываются;
"caption" - отображаемое название чего-либо(будь то вкладка или поле);
"field" - уникальное название поля формы
"fields" - перечисление полей формы, находящиеся на данной вкладке, среди них:
"name" - текстовое поле "Название"
"url" - текстовое поле "Ссылка"
"image" - поле с выбором изображения - "Изображение"
"active" - список с одиночным выбором ("Активный" или "Скрытый").
Как вы наверно уже догадались "inputTVtype" дает возможность задать тип поля. Список TV типов можно посмотреть здесь.

Все это можно задавать через интерфейс менеджера:

Там несомненно более удобно, но бывают случаи когда проще заглянуть в конфиг и подправить там значение чем лазить по модальным окнам интерфейса.





Ниже идет куча общих настроек, имена которых в большинстве случаев говорят сами за себя, в остальных же случаях скорее всего придется или экспериментировать или гуглить по поводу каждого имени интересующего поля, потому как я не смог найти хоть сколько-нибудь подробного объяснения по данным полям(даже в документации), что очень грустно.
На самом деле: если вам и понадобятся эти настройки(что бывает редко), то скорее всего все что нужно можно будет настроить через интерфейс менеджера, но там довольно часто требуется ввести просто JSON конфиг, который часто трудно угадать.




Последним фрагментом идет конфигурация непосредственно столбцов:



Здесь основными полями являются "header" - отображаемое имя и "dataIndex" - указание значения "field" из первого фрагмента конфига: "tabs".
"editor" - возможность, недавно появившаяся в MIGX - отвечает как раз за то, чтобы можно было редактировать значения прямо в теле таблицы, не заходя в модальное окно редактирования.

Честно говоря, "dataIndex" необязательно должно быть существующим "field" полем из  массива "tabs", бывают случаи когда нужно указать на несуществующее поле, например при использовании renderChunk, чтобы при сохранении сгенерированные значения в столбцах не испортили нам данные, как в случае на примере ниже:

И у меня в конфиге https://github.com/Jonybang/ModX-tehniques/blob/master/MIGX/yandex-maps.js :



Это один из хаков, который мне удалось кропотливым и методичным поиском найти на просторах интернета, он позволяет выводить в таблице столбец, в котором можно прописать шаблон для вывода значений из соседних столбцов, пользуйтесь на здоровье :)
При этом dataIndex должен указывать на несуществующее поле ввода.

В менеджере MIGX это будет выглядеть примерно так:

Еще, помимо такой краткой записи шаблона вывода, есть возможно создать свой(custom) renderer, в котором с помощью адской смеси PHP и JavaScript можно описать вывод поля в табличке MIGX. Для этого нужно зайти в конфиг migx и добавить свой рендер по примеру уже существующих:

После этого новый рендерер появится в списке выбора:

И теперь с помощью него в табличке можно выводить все что угодно и как душе угодно:

Таким образом можно создавать не только шаблоны и renderer, но и всякие handler и тому подобное, что участвует в работе с таблицами в MIGX. Буду очень рад, если вы в комментариях опишите свои интересные приемчики, которые обнаружили при работе с MIGX.

Но мы отвлеклись от основной задачи - использования нашего TV по назначению: для вывода заполненной клиентом информации на страницу.
Если вы попробуете вывести на страницу гольный вызов нашего доп. поля(например таким образом: [[*migx-partners]]) то вы увидите JSON, который представляет из себя массив объектов (по обьекту на каждую строку таблицы) с полями fields и значениями, которые контент менеджер задал при заполнениями.
Вы можете самостоятельно обработать JSON используя $collection = $modx->fromJSON($value) в сниппете, а можете воспользоваться готовым сниппетом от MIGX: getImageList, который предназначен специально для этой задачи:
[[!getImageList? &tvname=`migx-partners` &tpl=`partnerItem`]]
Таким образом он будет работать при вызове из ресурса, в котором присутствует это TV, если же вы хотите вывести данные MIGX TV со стороннего ресурса(например на Главной вывести Партнеров из соотвествующего раздела) то можно дополнительно указать переметр &docid=`5`, где "5" - id ресурса "Партнеры".
getImageList работает по аналогии с getResources: в tpl кладется имя чанка, создается соответствющий чанк вида:
<li>[[+idx]]. [[+field1]] - [[+field2]]</li>
где [[+idx]] - автоматическое нумерование;
[[+field1]], [[+field2]] - поля, которые мы задавали в Formtabs;
После чего сниппет в цикле вызывает чанк для каждой строки из получившейся таблицы MIGX, вставляя на место плейсхолдеров соответствующие значения.

Обзор получился достаточно объемным для "краткого", но такой-уж MIGX, довольно сложный для тех кто его ни разу не пробовал, а я постарался ориентироваться именно на таких новичков. А я ведь не касался еще темы MIGX DB, позволяющего работать непосредственно с базой данных: выводить и редактировать значения из её таблиц. В этой статье я постарался разобрать эту тему.

Источники:
Мой репозиторий на Github с набором конфигов на MIGX
Оффициальная документация MIGX
Доки getImageList
Репозиторий MIGX на Github
Читать далее