> For the complete documentation index, see [llms.txt](https://64j.gitbook.io/multifields-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://64j.gitbook.io/multifields-2/front.md).

# Фронт

Данные выводятся с помощью сниппета **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**](/multifields-2/elementy.md#tpl) можно указать в самой конфигурации элемента.

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

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

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

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

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

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

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

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

## prepare\_KEY

Строка. **prepare\_КЛЮЧ\_ИЗ\_МАССИВА\_КОНФИГУРАЦИИ**. Сниппет или название функции для обработки элемента. Так же [**prepare**](/multifields-2/elementy.md#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** в данном случае. Если конфигурация предполагает вмещать большое количество элементов, то каждому элементу рекомендуется присваивать уникальный ключ в рамках всей конфигурации в файле.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://64j.gitbook.io/multifields-2/front.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
