Фронт

Описание вывода данных на фронте сайта
Данные выводятся с помощью сниппета multifields.
Если данные хранятся в ТВ параметрах и используется шаблонизатор twig или blade, то сниппет можно не использовать, а обрабатывать данные напрямую.

Параметры сниппета.

tvId

Число. ID тв параметра

tvName

Строка. Имя тв параметра

docid

Число. По умолчанию текущий документ. ID документа из которого нужно взять данные.

api

Число или Строка. По умолчанию пусто. Имеет два значения 1 или json, при значении 1 - возвращает массив php, при значении json - возвращает json массив. Использование данного параметра потеряет смысл (как и использование самого сниппета) если в конфигурации плагина выбран тип хранения default и используется шаблонизатор twig или blade.

data

JSON. По умолчанию пусто. Даёт возможность вернуть на обработку изменённые данные.

storage

Строка. Значения default или files. По умолчанию пусто. Принудительный выбор источника данных.

tpl_KEY

Строка. tpl_КЛЮЧ_ИЗ_МАССИВА_КОНФИГУРАЦИИ. Чанк или инлайн код для шаблонизации выбранного элемента. Можно шаблонизировать практически любой элемент зная его уникальный ключ в рамках одного файла конфигурации. Так же tpl можно указать в самой конфигурации элемента.
Плейсхолдеры:
[+mf.items+] - выводит все дочерние элементы
[+mf.name+] - выводит поле name элемента
[+mf.type+] - выводит тип элемента
[+mf.iteration+] - выводит порядковый номер элемента
[+mf.level+] - уровень вложенности данного элемента
[+value+] - выводит непосредственное значение элемента
Остальные плейсхолдеры берутся по ключам дочерних элементов.

prepare_KEY

Строка. prepare_КЛЮЧ_ИЗ_МАССИВА_КОНФИГУРАЦИИ. Сниппет или название функции для обработки элемента. Так же prepare можно указать в самой конфигурации элемента
Имеет три аргумента,
$data - массив с данными элемента
$modx - объект DocumentParser
$_MF - объект класса Multifields
Если обработчик используется для элемента в котором есть дочерние, то обработчик будет срабатывать два раза, перед обработкой дочерних и после. До обработки нет ключа $data['mf.items'] а после есть, то есть по этому критерию можно с помощью условий запускать разные обработки данных.
Для получения своих параметров сниппета, можно воспользоваться методом $_MF->param(NAME, DEFAULT);
Пример
<div class="images">
[[multifields?
&tvName=`thumb`
&tpl_thumb=`@CODE:<img src="[+thumb+]" data-original="[+value+]" alt="">`
&prepare_thumb=`mf.prepare.thumb`
]]
</div>
Сниппет mf.prepare.thumb
<?php
if (!empty($data['value'])) {
// добавляем плейсхолдер thumb
$data['thumb'] = $modx->runSnippet('phpthumb', [
'input' => $data['value'],
'options' => 'w=250,h=250,zc=1'
]);
}
return $data;

Пояснение

Конфигурация
<?php
return [
'settings' => [],
'templates' => [
'Slider' => [
'type' => 'row',
'items.class' => 'd-block',
'items' => [
'Slider_thumb' => [
'type' => 'thumb',
'image' => 'image',
'class' => 'col-2 float-left'
],
'Slider_image' => [
'type' => 'image',
'thumb' => 'thumb',
'multi' => 'Slider',
'placeholder' => 'Image',
'class' => 'col-10 float-right'
],
'Slider_text' => [
'type' => 'richtext',
'placeholder' => 'Text',
'class' => 'col-10 float-right'
],
'Slider_link' => [
'type' => 'text',
'placeholder' => 'Link',
'class' => 'col-8 float-right'
],
'Slider_link_text' => [
'type' => 'text',
'placeholder' => 'Link text',
'class' => 'col-2 float-right'
]
]
]
]
];
Вывод сниппета
[!multifields?
&tvName=`TV_NAME`
&tpl_Slider=`@CODE:
<div class="slide">
<a href="[+Slider_link+]" title="[+Slider_link_text+]">
<img src="[+Slider_image+]" alt="[+Slider_link_text+]">
<span>[+Slider_text+]</span>
</a>
</div>`
!]
TV_NAME - указываем название tv параметра
tpl_Slider - префикс tpl_ + ключ в массиве, в данном случае Slider, внутри шаблона доступны плейсхолдеры с теми же именами что и в конфигурации. Так же их можно обработать через prepare_Slider в данном случае. Если конфигурация предполагает вмещать большое количество элементов, то каждому элементу рекомендуется присваивать уникальный ключ в рамках всей конфигурации в файле.