# Сниппеты

# Gallery3x

Компонент `Gallery3x` поставляется с основным сниппетом `[[!Gallery3x]]`, который отвечает за вывод изображений на страницах сайта. Сниппет разработан с упором на гибкость и производительность, позволяя создавать галереи любой сложности.

### Ключевая особенность

Сниппет **не создает превью "на лету"**. Он работает с уже готовыми, заранее сгенерированными изображениями, которые были созданы в админ-панели при загрузке файлов. Это обеспечивает максимальную скорость загрузки страниц для посетителей вашего сайта.

---

## Сниппет `[[!Gallery3x]]`

Основная задача сниппета — получить все активные изображения для указанного ресурса, отсортировать их и передать данные в чанки для оформления.

Документация с добавленным новым параметром.

<div class="horizontal-scroll-wrapper" id="bkmrk--2"><div class="table-block-component"><div class="horizontal-scroll-wrapper"><div class="table-block-component"><div class="table-block has-export-button"><div class="table-content not-end-of-paragraph" not-end-of-paragraph=""><table style="width: 100%;"><thead><tr><td style="width: 15.6055%;">Параметр</td><td style="width: 24.2933%;">По умолчанию</td><td style="width: 60.1668%;">Описание</td></tr></thead><tbody><tr><td style="width: 15.6055%;">**&amp;resource**</td><td style="width: 24.2933%;">ID текущего ресурса</td><td style="width: 60.1668%;">ID ресурса, из которого нужно вывести изображения. Используется, если `&parents` и `&resources` не заданы.</td></tr><tr><td style="width: 15.6055%;">**&amp;parents**</td><td style="width: 24.2933%;">`null`</td><td style="width: 60.1668%;">Список ID родительских ресурсов через запятую. Выбирает картинки из этих ресурсов и всех их дочерних. `0` — выборка со всего сайта.</td></tr><tr><td style="width: 15.6055%;">**&amp;resources**</td><td style="width: 24.2933%;">`null`</td><td style="width: 60.1668%;">Список ID ресурсов через запятую. ID с минусом (-) исключает ресурс. Имеет приоритет над `&parents`, если указаны положительные ID.</td></tr><tr><td style="width: 15.6055%;">**&amp;tplOuter**</td><td style="width: 24.2933%;">`...`</td><td style="width: 60.1668%;">Имя чанка-обертки для сложных галерей (например, каруселей).</td></tr><tr><td style="width: 15.6055%;">**&amp;tplThumb**</td><td style="width: 24.2933%;">`...`</td><td style="width: 60.1668%;">Имя чанка для элемента в ленте превью (используется вместе с `tplOuter`, **игнорируется в режиме Fenom**).</td></tr><tr><td style="width: 15.6055%;">**&amp;fenom**</td><td style="width: 24.2933%;">`0`</td><td style="width: 60.1668%;">Если установить в `1` и на сайте установлен `pdoTools`, сниппет будет работать в режиме Fenom. В этом режиме он не обрабатывает чанк `&tplThumb`, а передает в чанк `&tplOuter` сырой массив со всеми данными `{$files}`, который вы можете обработать в цикле `{foreach}`.</td></tr><tr><td style="width: 15.6055%;">**&amp;limit**</td><td style="width: 24.2933%;">0</td><td style="width: 60.1668%;">Ограничение на количество выводимых изображений. `0` — без ограничений.</td></tr><tr><td style="width: 15.6055%;">**&amp;offset**</td><td style="width: 24.2933%;">  
</td><td style="width: 60.1668%;">Пропуск результатов с начала выборки</td></tr><tr><td style="width: 15.6055%;">**&amp;sortby**</td><td style="width: 24.2933%;">position</td><td style="width: 60.1668%;">Поле для сортировки изображений. Можно сортировать и по дополнительным полям, например `extra_num` или `extra_date`.</td></tr><tr><td style="width: 15.6055%;">**&amp;sortdir**</td><td style="width: 24.2933%;">ASC</td><td style="width: 60.1668%;">Направление сортировки (ASC или DESC).</td></tr><tr><td style="width: 15.6055%;">**&amp;showInactive**</td><td style="width: 24.2933%;">0</td><td style="width: 60.1668%;">Если установить в `1`, будут выводиться также и выключенные в админке изображения.</td></tr><tr><td style="width: 15.6055%;">**&amp;where**</td><td style="width: 24.2933%;">`''`</td><td style="width: 60.1668%;">JSON-строка с дополнительными условиями выборки. Можно фильтровать и по доп-полям, например `{"extra_num:>":2000}`.</td></tr><tr><td style="width: 15.6055%;">**&amp;debug**</td><td style="width: 24.2933%;">0</td><td style="width: 60.1668%;">Если установить в `1`, вместо галереи на странице будет выведен массив со всеми данными, которые сниппет подготовил.</td></tr><tr><td style="width: 15.6055%;">**&amp;group**</td><td style="width: 24.2933%;">  
</td><td style="width: 60.1668%;">Фильтр по группе</td></tr><tr><td style="width: 15.6055%;">**&amp;return**</td><td style="width: 24.2933%;">  
</td><td style="width: 60.1668%;">Определяет формат возвращаемых данных. (data, json, ids)</td></tr><tr><td style="width: 15.6055%;">**&amp;toPlaceholder**</td><td style="width: 24.2933%;">  
</td><td style="width: 60.1668%;">Сохраняет данные в **плейсхолдер** вместо вывода. Сниппет возвращает пустую строку.</td></tr></tbody></table>

</div></div></div></div></div></div>### Доступные плейсхолдеры

Сниппет передает в чанк **все поля** из таблицы компонента, а также автоматически генерирует URL для всех существующих превью.

- `[[+id]]` - ID записи
- `[[+name]]` - Название (title)
- `[[+description]]` - Описание
- `[[+alt]]` - Альтернативный текст
- `[[+file]]` - Имя файла (например, `my-photo.jpg`)
- `[[+createdon]]` - Дата загрузки
- `[[+size]]` - Размер файла в байтах
- **`[[+original_url]]`** - URL к оригинальному изображению
- **`[[+small_url]]`** - URL к превью 'small'
- **`[[+medium_url]]`** - URL к превью 'medium'
- `[[+любое_имя_превью_url]]` - Если вы создадите превью с именем `big`, здесь будет доступен плейсхолдер `[[+big_url]]`.
- `[[+group]]` - Группы изображения (несколько — через `||`)
- `[[+special]]` - Признак "особенный" (1/0)
- `[[+extra_text]]` - Дополнительное текстовое поле
- `[[+extra_text2]]` - Второе дополнительное текстовое поле
- `[[+extra_num]]` - Дополнительное числовое поле (удобно для сортировки/фильтра)
- `[[+extra_date]]` - Дополнительное поле даты (формат `ГГГГ-ММ-ДД 00:00:00`)

### Дополнительные поля

Начиная с версии **3.2.1** у каждого изображения есть универсальные поля для нестандартных задач, которые заполняются в окне редактирования (вкладка «Дополнительно»): `extra_text`, `extra_text2`, `extra_num`, `extra_date`. Они доступны в чанках как обычные плейсхолдеры. Названия этих полей в админке можно переопределить в системных настройках компонента (область «Доп. поля: изображения»).

Поле даты хранится в формате `datetime`, поэтому при необходимости форматируйте его выводным модификатором:

```
[[+extra_date:strtotime:date=`%d.%m.%Y`]]
```

Те же поля доступны и в сниппетах `Gallery3xVideos`, `Gallery3xFiles`, `Gallery3xEmbeds` и `Gallery3xMixed` — они выводятся автоматически.

сниппет Gallery3x поддерживает параметры `&return` и `&toPlaceholder`, которые позволяют получать данные галереи в виде массива или JSON вместо готового HTML. Это особенно полезно при работе с Fenom-циклами, PdoPage с ajax-загрузкой, и для создания кастомной разметки.

# Gallery3xVideos

# Gallery3xVideos - Сниппет для вывода видео

Сниппет для вывода видеогалерей из различных сервисов: **Rutube**, **YouTube**, **VK**, **Vimeo**, **Dailymotion**, **Coub**, **OK.ru**, **Яндекс.Дзен**.

---

## Возможности

- Вывод видео из текущего или указанных ресурсов
- Поддержка 8+ видеосервисов
- Автоматическая генерация встроенных плееров (iframe)
- Фильтрация по группам
- Сортировка и пагинация
- Поддержка Fenom шаблонов
- Красивые готовые чанки с анимацией
- Адаптивный дизайн

---

## Базовое использование

### Простой вызов

```
[[Gallery3xVideos]]
```

### С Fenom (рекомендуется)

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

---

## Параметры

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9F%D0%BE-%D1%83%D0%BC%D0%BE%D0%BB"><thead><tr><th>Параметр</th><th>Тип</th><th>По умолчанию</th><th>Описание</th></tr></thead><tbody><tr><td>`tplOuter`</td><td>string</td><td>`tpl.Gallery3x.Video.outer`</td><td>Внешний чанк-обертка</td></tr><tr><td>`tplItem`</td><td>string</td><td>`tpl.Gallery3x.Video.item`</td><td>Чанк элемента (без Fenom)</td></tr><tr><td>`fenom`</td><td>bool</td><td>`0`</td><td>Использовать Fenom (1 или 0)</td></tr><tr><td>`resource`</td><td>int</td><td>текущий</td><td>ID ресурса</td></tr><tr><td>`resources`</td><td>string</td><td>-</td><td>ID ресурсов через запятую</td></tr><tr><td>`parents`</td><td>string</td><td>-</td><td>ID родителей (включая детей)</td></tr><tr><td>`limit`</td><td>int</td><td>`0`</td><td>Лимит выборки (0 = все)</td></tr><tr><td>`offset`</td><td>int</td><td>`0`</td><td>Смещение выборки</td></tr><tr><td>`group`</td><td>string</td><td>-</td><td>Фильтр по группам</td></tr><tr><td>`sortby`</td><td>string</td><td>`position`</td><td>Поле сортировки</td></tr><tr><td>`sortdir`</td><td>string</td><td>`ASC`</td><td>Направление (ASC/DESC)</td></tr><tr><td>`showInactive`</td><td>bool</td><td>`0`</td><td>Показывать неактивные</td></tr><tr><td>`debug`</td><td>bool</td><td>`0`</td><td>Режим отладки</td></tr></tbody></table>

---

## Доступные чанки

### 1. tpl.Gallery3x.Video.outer + item (БЕЗ Fenom)

Базовая сетка видео для стандартного MODX.

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

```
[[Gallery3xVideos?
    &tplOuter=`tpl.Gallery3x.Video.outer`
    &tplItem=`tpl.Gallery3x.Video.item`
]]
```

**Особенности:**

- Адаптивная сетка карточек
- Превью с анимацией Play
- Бейджи сервисов
- Клик → переход на видео

---

### 2. tpl.Gallery3x.Video.outer.fenom (С Fenom)

Все в одном чанке с Fenom. **Рекомендуется!**

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

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

**Особенности:**

- Все то же, что в варианте 1
- Обработка пустого состояния
- Более гибкая настройка
- Градиент для видео без превью

---

### 3. tpl.Gallery3x.Video.grid + item (компактная)

Компактная сетка для боковых панелей.

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

```
[[Gallery3xVideos?
    &tplOuter=`tpl.Gallery3x.Video.grid`
    &tplItem=`tpl.Gallery3x.Video.grid.item`
    &limit=`6`
]]
```

**Особенности:**

- Более компактные карточки
- Упрощенная информация
- Подходит для виджетов

---

### 4. tpl.Gallery3x.Video.embedded.fenom (встроенные плееры)

Видео воспроизводятся прямо на странице через iframe.

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

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.embedded.fenom`
]]
```

**Особенности:**

- Видео встроены на страницу
- Адаптивные iframe (16:9)
- Кнопка "Открыть на сервисе"
- Полная информация под видео

---

## Примеры использования

### Видео текущего ресурса

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

### Видео из нескольких ресурсов

```
[[Gallery3xVideos?
    &fenom=`1`
    &resources=`10,15,20`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

### Видео из группы "Промо"

```
[[Gallery3xVideos?
    &fenom=`1`
    &group=`Промо`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

### С лимитом (6 видео)

```
[[Gallery3xVideos?
    &fenom=`1`
    &limit=`6`
    &sortby=`createdon`
    &sortdir=`DESC`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

### С пагинацией (pdoPage)

```
[[pdoPage?
    &element=`Gallery3xVideos`
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
    &limit=`12`
]]

[[!+page.nav]]
```

### Встроенные видео на странице

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Video.embedded.fenom`
    &group=`Уроки`
]]
```

---

## Доступные поля в чанках

### Поля каждого видео (в tplItem или в цикле foreach)

#### БЕЗ Fenom (в tplItem):

```
[[+id]]               <!-- ID видео в БД -->
[[+resource_id]]      <!-- ID ресурса MODX -->
[[+url]]              <!-- Полная ссылка на видео -->
[[+title]]            <!-- Название видео -->
[[+description]]      <!-- Описание видео -->
[[+thumbnail]]        <!-- Путь к превью (относительный) -->
[[+thumbnail_url]]    <!-- Полный URL превью -->
[[+service]]          <!-- Сервис: youtube, rutube, vk, vimeo, dailymotion, coub, ok, dzen -->
[[+video_id]]         <!-- ID видео на сервисе -->
[[+group]]            <!-- Группа (или группы через ||) -->
[[+position]]         <!-- Позиция сортировки -->
[[+active]]           <!-- Активность: 1 (да) или 0 (нет) -->
[[+special]]          <!-- Особое: 1 (да) или 0 (нет) -->
[[+createdon]]        <!-- Дата создания -->
[[+createdby]]        <!-- ID создателя -->
[[+updatedon]]        <!-- Дата обновления -->
[[+updatedby]]        <!-- ID обновившего -->
[[+embed_html]]       <!-- HTML-код iframe плеера -->
```

#### С Fenom (в цикле foreach):

```
{$video.id}               {* ID видео в БД *}
{$video.resource_id}      {* ID ресурса MODX *}
{$video.url}              {* Полная ссылка на видео *}
{$video.title}            {* Название видео *}
{$video.description}      {* Описание видео *}
{$video.thumbnail}        {* Путь к превью (относительный) *}
{$video.thumbnail_url}    {* Полный URL превью *}
{$video.service}          {* Сервис: youtube, rutube, vk... *}
{$video.video_id}         {* ID видео на сервисе *}
{$video.group}            {* Группа (или группы через ||) *}
{$video.position}         {* Позиция сортировки *}
{$video.active}           {* Активность: 1 или 0 *}
{$video.special}          {* Особое: 1 или 0 *}
{$video.createdon}        {* Дата создания *}
{$video.createdby}        {* ID создателя *}
{$video.updatedon}        {* Дата обновления *}
{$video.updatedby}        {* ID обновившего *}
{$video.embed_html | unescape}  {* HTML-код iframe плеера *}
```

---

### Дополнительные поля в tplOuter

В чанке `tplOuter` доступны следующие плейсхолдеры:

#### БЕЗ Fenom:

```
[[+items]]            <!-- Все видео, отрендеренные через tplItem -->
[[+total]]            <!-- Общее количество видео -->
[[+first.id]]         <!-- ID первого видео -->
[[+first.title]]      <!-- Название первого видео -->
[[+first.*]]          <!-- Любое поле первого видео (см. выше) -->
```

#### С Fenom:

```
{$videos}             {* Массив всех видео для foreach *}
{$total}              {* Общее количество видео *}
{$first.id}           {* ID первого видео *}
{$first.title}        {* Название первого видео *}
{$first.*}            {* Любое поле первого видео *}
```

**Пример использования в tplOuter:**

```
<div class="video-gallery">
    <p>Найдено видео: [[+total]]</p>
    
    [[+items]]  <!-- Здесь выводятся все видео -->
</div>
```

---

## Реальные примеры

### Страница "Видеогалерея"

```
<section class="videos-section">
    <h1>Наши видео</h1>
    
    [[Gallery3xVideos?
        &fenom=`1`
        &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
        &sortby=`position`
        &sortdir=`ASC`
    ]]
</section>
```

### Боковая панель "Популярные видео"

```
<aside class="sidebar-widget">
    <h3>Популярные видео</h3>
    
    [[Gallery3xVideos?
        &tplOuter=`tpl.Gallery3x.Video.grid`
        &tplItem=`tpl.Gallery3x.Video.grid.item`
        &limit=`3`
        &sortby=`createdon`
        &sortdir=`DESC`
    ]]
</aside>
```

### Страница курса с уроками

```
<div class="course-lessons">
    <h2>Уроки курса</h2>
    
    [[Gallery3xVideos?
        &fenom=`1`
        &tplOuter=`tpl.Gallery3x.Video.embedded.fenom`
        &group=`Урок 1,Урок 2,Урок 3`
    ]]
</div>
```

### Главная страница (последние видео)

```
<section class="latest-videos">
    <div class="container">
        <h2>Новые видео</h2>
        
        [[Gallery3xVideos?
            &fenom=`1`
            &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
            &limit=`8`
            &sortby=`createdon`
            &sortdir=`DESC`
        ]]
        
        <a href="/videos/" class="btn-more">Все видео →</a>
    </div>
</section>
```

### Несколько разделов на странице

```
<h2>Обучающие видео</h2>
[[Gallery3xVideos?
    &fenom=`1`
    &group=`Обучение`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]

<h2>Отзывы клиентов</h2>
[[Gallery3xVideos?
    &fenom=`1`
    &group=`Отзывы`
    &tplOuter=`tpl.Gallery3x.Video.outer.fenom`
]]
```

---

Создание своего чанка

Скопируйте любой готовый чанк и измените под себя:

```
{* Мой кастомный чанк *}
<div class="my-videos">
    {foreach $videos as $video}
    <div class="my-video-card">
        <a href="{$video.url}" target="_blank">
            <img src="{$video.thumbnail_url}" alt="{$video.title}">
            <h3>{$video.title}</h3>
        </a>
    </div>
    {/foreach}
</div>
```

Используйте:

```
[[Gallery3xVideos?
    &fenom=`1`
    &tplOuter=`myCustomChunk`
]]
```

---

## Отладка

Включите режим отладки чтобы увидеть все данные:

```
[[Gallery3xVideos?
    &debug=`1`
]]
```

  
Пример использования видео с "родным" плеером Kinescope  
  
Fenom-версия (полная галерея в одном чанке):  
  
\[\[!Gallery3xVideos?  
 &amp;resource=`\[\[\*id\]\]`  
 &amp;tplOuter=`example.Gallery3x.Video.Kinescope.fenom`  
 &amp;fenom=`1`  
 &amp;where=`{"service":"kinescope"}`  
\]\]  
<span class="markdown-bold-text" style="color: rgba(228, 228, 228, 0.92); font-family: 'Segoe WPC', 'Segoe UI', sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 24, 24); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; font-weight: 600;">  
Стандартный синтаксис MODX</span><span style="color: rgba(228, 228, 228, 0.92); font-family: 'Segoe WPC', 'Segoe UI', sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 24, 24); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"> (отдельные чанки для обёртки и элемента):</span>  
\[\[!Gallery3xVideos?  
 &amp;resource=`\[\[\*id\]\]`  
 &amp;tplItem=`example.Gallery3x.Video.Kinescope`  
 &amp;where=`{"service":"kinescope"}`  
\]\]

# Gallery3xMixed

Объединённая галерея: изображения + видео

Компонент Gallery3x поддерживает объединённый вывод изображений и видео в одной галерее с группировкой!

Сниппет `Gallery3xMixed`

Объединяет изображения и видео с одного ресурса и выводит через Fenom-шаблон.

Параметры:  
\- `&amp;resource` - ID ресурса (по умолчанию текущий)  
\- `&amp;groupBy` - Поле для группировки (`group`, `resource\_id`, пустое для отключения)  
\- `&amp;sortby` - Поле сортировки (`position`, `createdon`, `id`)  
\- `&amp;sortdir` - Направление сортировки (`ASC` / `DESC`)  
\- `&amp;limit` - Ограничение количества элементов  
\- `&amp;showInactive` - Показывать неактивные (0/1)  
\- `&amp;tpl` - Шаблон вывода (по умолчанию `tpl.Gallery3x.Mixed.Fenom`)

\---

Примеры использования

Вариант 1: Простой вызов с группировкой

```
[[!Gallery3xMixed?
    &resource=`[[*id]]`
    &groupBy=`group`
    &sortby=`position`
]]
```

Результат:  
\- Все изображения и видео текущего ресурса  
\- Сгруппированы по полю `group`  
\- Каждая группа выводится отдельным блоком

\---

Вариант 2: Без группировки

```
[[!Gallery3xMixed?
    &resource=`[[*id]]`
    &groupBy=``
]]
```

Результат: плоский список всех медиафайлов без группировки

\---

Вариант 3: Ограничение количества

```
[[!Gallery3xMixed?
    &resource=`[[*id]]`
    &groupBy=`group`
    &limit=`12`
]]
```

Результат: только первые 12 элементов

\---

Вариант 4: Свой шаблон Fenom

Создайте свой чанк и укажите его:

```
[[!Gallery3xMixed?
    &resource=`[[*id]]`
    &groupBy=`group`
    &tpl=`tpl.My.Custom.Gallery`
]]
```

Пример кастомного шаблона `tpl.My.Custom.Gallery`:

```
{set $gallery = $_modx->getPlaceholder('myGallery')}

{if $gallery}
<div class="my-custom-gallery">
    {foreach $gallery as $groupName => $items}
        <section class="gallery-section">
            <h2>{$groupName}</h2>
            <div class="items-grid">
                {foreach $items as $item}
                    <div class="item {$item.media_type}">
                        {* unique_id выглядит как: img_5 или video_3 *}
                        <div class="item-id">{$item.unique_id}</div>
                        
                        {if $item.media_type == 'image'}
                            <img src="{$item.thumb}" alt="{$item.title}">
                            <p>{$item.name}</p>
                        {else}
                            <img src="{$item.thumb}" alt="{$item.title}">
                            <a href="{$item.url}">▶️ {$item.title}</a>
                            <p>Сервис: {$item.service}</p>
                        {/if}
                    </div>
                {/foreach}
            </div>
        </section>
    {/foreach}
</div>
{/if}
```

\---

Структура возвращаемых данных

Каждый элемент содержит:

Общие поля:  
\- `unique\_id` - уникальный ID (`img\_5` или `video\_3`)  
\- `media\_type` - тип (`image` или `video`)  
\- `title` - название  
\- `thumb` - URL миниатюры  
\- `url` - URL оригинала  
\- `group` - группы через `||`  
\- `active` - активность (0/1)  
\- `position` - позиция для сортировки

Только для изображений:  
\- `name` - имя файла  
\- `file` - имя файла  
\- `path` - путь к файлу  
\- `original\_url` - URL оригинала  
\- `small\_url`, `medium\_url`, `large\_url` - размеры

Только для видео:  
\- `service` - видеохостинг (`rutube`, `youtube`, `vk`)  
\- `video\_id` - ID видео на хостинге  
\- `description` - описание  
\- `duration` - длительность  
\- `author` - автор  
\- `thumbnail\_url` - URL обложки

# Gallery3xFiles

## Gallery3xFiles

Сниппет для вывода файловых вложений ресурса на фронтенде сайта. Отображает файлы, загруженные через вкладку «Файлы G3x» в редакторе ресурса MODX. Поддерживает фильтрацию, сортировку, группировку и вывод через Fenom или стандартный синтаксис MODX.

---

### Параметры

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A2%D0%B8%D0%BF-%D0%9F%D0%BE-%D1%83%D0%BC%D0%BE%D0%BB"><thead><tr><th>Параметр</th><th>Тип</th><th>По умолчанию</th><th>Описание</th></tr></thead><tbody><tr><td>`resource`</td><td>int</td><td>ID текущего ресурса</td><td>ID ресурса, файлы которого выводятся</td></tr><tr><td>`resources`</td><td>string</td><td>—</td><td>Список ID ресурсов через запятую. Отрицательное значение исключает ресурс (например: `5,10,-3`)</td></tr><tr><td>`parents`</td><td>string</td><td>—</td><td>ID родительских ресурсов через запятую. Выводятся файлы всех дочерних ресурсов (глубина до 10 уровней)</td></tr><tr><td>`group`</td><td>string</td><td>—</td><td>Фильтр по группе или нескольким группам через запятую. Поддерживается мультигруппа</td></tr><tr><td>`limit`</td><td>int</td><td>`0`</td><td>Максимальное количество файлов. `0` — без ограничения</td></tr><tr><td>`offset`</td><td>int</td><td>`0`</td><td>Смещение выборки (для пагинации)</td></tr><tr><td>`sortby`</td><td>string</td><td>`position`</td><td>Поле сортировки: `position`, `name`, `size`, `createdon`, `type`</td></tr><tr><td>`sortdir`</td><td>string</td><td>`ASC`</td><td>Направление сортировки: `ASC` или `DESC`</td></tr><tr><td>`showInactive`</td><td>int</td><td>`0`</td><td>Показывать деактивированные файлы. `1` — показывать</td></tr><tr><td>`where`</td><td>JSON</td><td>—</td><td>Дополнительные условия xPDO-запроса в формате JSON. Например: `{"type":"pdf"}`</td></tr><tr><td>`tplOuter`</td><td>string</td><td>`tpl.Gallery3x.Files.outer`</td><td>Чанк-обёртка всего списка</td></tr><tr><td>`tplItem`</td><td>string</td><td>`tpl.Gallery3x.Files.item`</td><td>Чанк одного файла (используется при стандартном синтаксисе MODX)</td></tr><tr><td>`fenom`</td><td>int</td><td>`0`</td><td>Использовать Fenom для рендеринга. Требует pdoTools. При `1` весь массив передаётся в `tplOuter`</td></tr><tr><td>`return`</td><td>string</td><td>—</td><td>Вернуть данные вместо HTML: `data` — PHP-массив, `json` — JSON-строка, `ids` — массив ID</td></tr><tr><td>`toPlaceholder`</td><td>string</td><td>—</td><td>Сохранить результат в указанный плейсхолдер вместо вывода на страницу</td></tr><tr><td>`debug`</td><td>int</td><td>`0`</td><td>Режим отладки. При `1` выводит параметры запроса и данные найденных файлов</td></tr></tbody></table>

---

### Доступные поля в шаблонах

Каждый элемент содержит следующие поля:

<table id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-id-id-"><thead><tr><th>Поле</th><th>Описание</th></tr></thead><tbody><tr><td>`id`</td><td>ID записи в базе данных</td></tr><tr><td>`resource_id`</td><td>ID ресурса MODX</td></tr><tr><td>`file`</td><td>Имя файла</td></tr><tr><td>`path`</td><td>Относительный путь к папке файла</td></tr><tr><td>`url`</td><td>Полный URL файла через медиасорс</td></tr><tr><td>`name`</td><td>Заголовок файла (заданный вручную)</td></tr><tr><td>`description`</td><td>Описание файла</td></tr><tr><td>`type`</td><td>MIME-тип файла</td></tr><tr><td>`ext`</td><td>Расширение файла в нижнем регистре (например, `pdf`, `zip`)</td></tr><tr><td>`size`</td><td>Размер файла в байтах</td></tr><tr><td>`size_formatted`</td><td>Размер файла в читаемом виде: `1.2 MB`, `340 KB`, `512 B`</td></tr><tr><td>`group`</td><td>Группы через разделитель `||` (внутренний формат хранения)</td></tr><tr><td>`groups_list`</td><td>Группы через запятую (удобно для вывода в шаблоне)</td></tr><tr><td>`active`</td><td>Активность: `1` — активен, `0` — скрыт</td></tr><tr><td>`position`</td><td>Порядковый номер сортировки</td></tr><tr><td>`createdon`</td><td>Дата загрузки (Unix timestamp)</td></tr></tbody></table>

В `tplOuter` дополнительно передаются:

<table id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-total-"><thead><tr><th>Поле</th><th>Описание</th></tr></thead><tbody><tr><td>`total`</td><td>Общее количество найденных файлов</td></tr><tr><td>`first`</td><td>Массив данных первого файла (для быстрого доступа)</td></tr><tr><td>`files`</td><td>Весь массив файлов (только при Fenom)</td></tr><tr><td>`items`</td><td>Готовый HTML из всех `tplItem` (только при стандартном синтаксисе)</td></tr></tbody></table>

---

### Примеры вызова

**Минимальный (текущий ресурс, стандартный синтаксис):**

```
[[!Gallery3xFiles]]
```

**С Fenom:**

```
[[!Gallery3xFiles?
    &tplOuter=`tpl.Gallery3x.Files.outer.fenom`
    &fenom=`1`
]]
```

**Фильтр по группе, ограничение количества:**

```
[[!Gallery3xFiles?
    &group=`документы`
    &limit=`10`
    &sortby=`name`
    &sortdir=`ASC`
]]
```

**Файлы нескольких ресурсов:**

```
[[!Gallery3xFiles?
    &resources=`5,10,15`
    &fenom=`1`
    &tplOuter=`tpl.Gallery3x.Files.outer.fenom`
]]
```

**Получить JSON (для JavaScript или Fenom-обработки):**

```
[[!Gallery3xFiles?
    &return=`json`
]]
```

**Сохранить в плейсхолдер:**

```
[[!Gallery3xFiles?
    &toPlaceholder=`myFiles`
]]
```

**Фильтрация через `where` (только PDF):**

```
[[!Gallery3xFiles?
    &where=`{"type":"application/pdf"}`
]]
```

# Gallery3xEmbeds

Компонент `Gallery3x` начиная с версии **3.2.1** поставляется со сниппетом `[[!Gallery3xEmbeds]]`, который выводит на страницах сайта **встраиваемые объекты (embed)** — карты, виджеты, плееры и любой iframe-контент, добавленный во вкладке **«Embed G3x»** ресурса.

### Ключевая особенность

Каждый embed добавляется в админке в одном из двух режимов:

- **Ссылка** — вы вставляете ссылку (например, на Яндекс.Карты или Google Карты), компонент распознаёт её и **сам строит безопасный `<iframe>`**.
- **Код вставки** — вы вставляете готовый HTML-код встраивания (кнопка «Поделиться → Встроить» на сайте-источнике), он выводится как есть.

Сниппет отдаёт в чанк **уже готовый HTML** embed в плейсхолдере `[[+embed_html]]` с адаптивной обёрткой (ширина 100%, высота из поля «Высота», по умолчанию 400px).

---

## Сниппет `[[!Gallery3xEmbeds]]`

Основная задача — получить все активные embed указанного ресурса, отсортировать их и передать в чанки для оформления.

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%9F%D0%BE-%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8" style="width: 100%;"><thead><tr><td style="width: 16%;">Параметр</td><td style="width: 24%;">По умолчанию</td><td style="width: 60%;">Описание</td></tr></thead><tbody><tr><td>**&amp;resource**</td><td>ID текущего ресурса</td><td>ID ресурса, из которого выводить embed. Используется, если `&parents` и `&resources` не заданы.</td></tr><tr><td>**&amp;parents**</td><td>`null`</td><td>Список ID родительских ресурсов через запятую. Выбирает embed из них и всех дочерних. `0` — со всего сайта.</td></tr><tr><td>**&amp;resources**</td><td>`null`</td><td>Список ID ресурсов через запятую. ID с минусом (-) исключает ресурс. Имеет приоритет над `&parents`.</td></tr><tr><td>**&amp;tplOuter**</td><td>`tpl.Gallery3x.Embed.outer`</td><td>Чанк-обёртка всего списка.</td></tr><tr><td>**&amp;tplItem**</td><td>`tpl.Gallery3x.Embed.item`</td><td>Чанк одного элемента (**игнорируется в режиме Fenom**).</td></tr><tr><td>**&amp;fenom**</td><td>`0`</td><td>Если `1` и установлен `pdoTools` — режим Fenom. Чанк `&tplItem` не используется, а в `&tplOuter` передаётся массив `{$embeds}` для обработки в `{foreach}`.</td></tr><tr><td>**&amp;group**</td><td>`''`</td><td>Фильтр по группе (можно несколько через запятую).</td></tr><tr><td>**&amp;limit**</td><td>`0`</td><td>Ограничение количества. `0` — без ограничений.</td></tr><tr><td>**&amp;offset**</td><td>`0`</td><td>Сдвиг выборки (для постраничного вывода).</td></tr><tr><td>**&amp;sortby**</td><td>`position`</td><td>Поле сортировки.</td></tr><tr><td>**&amp;sortdir**</td><td>`ASC`</td><td>Направление сортировки (ASC или DESC).</td></tr><tr><td>**&amp;showInactive**</td><td>`0`</td><td>Если `1` — выводятся и выключенные в админке embed.</td></tr><tr><td>**&amp;where**</td><td>`''`</td><td>JSON-строка с дополнительными условиями выборки.</td></tr><tr><td>**&amp;debug**</td><td>`0`</td><td>Если `1` — вместо вывода показывается массив подготовленных данных.</td></tr></tbody></table>

### Доступные плейсхолдеры

Сниппет передаёт в чанк **все поля** записи embed. Главный — `[[+embed_html]]` (готовый к выводу HTML).

- **`[[+embed_html]]`** — **готовый HTML** embed с адаптивной обёрткой (это и нужно выводить).
- `[[+id]]` — ID записи.
- `[[+title]]` — заголовок.
- `[[+description]]` — описание.
- `[[+mode]]` — режим: `url` или `code`.
- `[[+url]]` — исходная ссылка (режим «Ссылка»).
- `[[+code]]` — код вставки (режим «Код вставки»).
- `[[+provider]]` — провайдер (`yandex_map`, `google_map`).
- `[[+embed_id]]` — итоговый `src` для iframe (режим «Ссылка»).
- `[[+height]]` — высота в px (пусто = 400).
- `[[+thumbnail_url]]` — URL превью (если задано).
- `[[+group]]` — группы (через `||`).
- `[[+position]]`, `[[+active]]`, `[[+special]]` — позиция, активность, «особенный».
- `[[+extra_text]]`, `[[+extra_text2]]`, `[[+extra_num]]`, `[[+extra_date]]` — дополнительные поля.

### Примеры

```
[[!Gallery3xEmbeds]]
```

Вывести все embed текущего ресурса.

```
[[!Gallery3xEmbeds?
  &group=`maps`]]
```

Только embed из группы `maps`.

```
[[!Gallery3xEmbeds? &resource=`15`
  &limit=`3`]]
```

Три embed с ресурса №15.

```
[[!Gallery3xEmbeds? &fenom=`1` &tplOuter=`
  tpl.Gallery3x.Embed.outer.fenom`]]
```

Режим Fenom — обработка массива `{$embeds}` в цикле внутри чанка-обёртки.

```
[[!Gallery3xEmbeds? &debug=`1`]]
```

Отладка — показывает все подготовленные данные.