# Фронт

Данные выводятся с помощью сниппета **multifields.**

{% hint style="warning" %}
Если данные хранятся в ТВ параметрах и используется шаблонизатор twig или blade, то сниппет можно не использовать, а обрабатывать данные напрямую.
{% endhint %}

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

## tvId

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

## tvName

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

## docid

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

## api

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

## data

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

## storage

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

## tpl\_KEY

Строка. **tpl\_КЛЮЧ\_ИЗ\_МАССИВА\_КОНФИГУРАЦИИ**. Чанк или инлайн код для шаблонизации выбранного элемента. Можно шаблонизировать практически любой элемент зная его уникальный ключ в рамках одного файла конфигурации. Так же [**tpl**](https://64j.gitbook.io/multifields-2/elementy#tpl) можно указать в самой конфигурации элемента.

Плейсхолдеры:

`[+mf.items+]` - выводит все дочерние элементы

`[+mf.name+]` - выводит поле name элемента

`[+mf.type+]` - выводит тип элемента

`[+mf.iteration+]` - выводит порядковый номер элемента

`[+mf.level+]` - уровень вложенности данного элемента

`[+value+]` - выводит непосредственное значение элемента

Остальные плейсхолдеры берутся по ключам дочерних элементов.

## prepare\_KEY

Строка. **prepare\_КЛЮЧ\_ИЗ\_МАССИВА\_КОНФИГУРАЦИИ**. Сниппет или название функции для обработки элемента. Так же [**prepare**](https://64j.gitbook.io/multifields-2/elementy#prepare) можно указать в самой конфигурации элемента

Имеет три аргумента,&#x20;

`$data` - массив с данными элемента

`$modx` - объект DocumentParser

`$_MF` - объект класса Multifields

Если обработчик используется для элемента в котором есть дочерние, то обработчик будет срабатывать два раза, перед обработкой дочерних и после. До обработки нет ключа **`$data['mf.items']`** а после есть, то есть по этому критерию можно с помощью условий запускать разные обработки данных.

Для получения своих параметров сниппета, можно воспользоваться методом **`$_MF->param(NAME, DEFAULT);`**

Пример

```markup
<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
<?php
if (!empty($data['value'])) {
    // добавляем плейсхолдер thumb
    $data['thumb'] = $modx->runSnippet('phpthumb', [
        'input' => $data['value'],
        'options' => 'w=250,h=250,zc=1'
    ]);
}

return $data;
```

### Пояснение

Конфигурация

```php
<?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'
                ]
            ]
        ]
    ]
];
```

Вывод сниппета

```markup
[!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** в данном случае. Если конфигурация предполагает вмещать большое количество элементов, то каждому элементу рекомендуется присваивать уникальный ключ в рамках всей конфигурации в файле.
