Для разработчиков

Структура Базы Данных

Структура Базы Данных (Для разработчиков)

 

Компонент Gallery3x хранит данные в двух отдельных таблицах: одна для файлов (изображений) и одна для видео. Такое разделение позволяет гибко управлять каждым типом данных.

Вы можете взаимодействовать с этими таблицами, используя xPDO и соответствующие классы модели.


 

Таблица Файлов (gallery3x_files)

 

Здесь хранятся все загруженные файлы (в основном, изображения).

 

 

Ключ (Поле) Тип Данных Описание
id integer Уникальный ID записи
resource_id integer ID ресурса MODX, к которому привязан файл.
source_id integer ID источника файлов (modMediaSource).
parent_id integer Зарезервировано для будущих функций.
name string Название файла (может быть отредактировано).
description string Описание файла.
alt string ALT-тег изображения.
path string Путь к файлу внутри источника (напр. 15/).
file string Имя файла (напр. image.jpg).
type string MIME-тип файла (image/jpeg).
size integer Размер файла в байтах.
position integer Позиция для сортировки.
group string (Новое) Группа (тег) для файла (напр. "Интерьер").
properties json JSON-массив с данными (превью, размеры).
createdon datetime Дата создания.
createdby integer ID пользователя, создавшего запись.
updatedon datetime Дата последнего обновления.
updatedby integer ID пользователя, обновившего запись.
active boolean Статус (1 = активен, 0 = скрыт).
hash string Хеш файла для проверки на дубликаты.
special boolean (Новое) Статус "Особенное" (1 = да, 0 = нет).

 

Таблица Видео (gallery3x_videos)

 

Здесь хранятся ссылки на видео и связанные с ними данные.

 

 

Ключ (Поле) Тип Данных Описание
id integer Уникальный ID записи
resource_id integer ID ресурса MODX, к которому привязано видео.
url string Полная ссылка на видео (YouTube, VK и т.д.).
title string Название видео (вводится пользователем).
description string Описание видео.
thumbnail string Путь к файлу превью (загружается вручную).
position integer Позиция для сортировки.
group string Группа (тег) для видео.
service string На будущее: Сервис видео (youtube, vk).
video_id string На будущее: ID видео на сервисе.
createdon datetime Дата создания.
createdby integer ID пользователя, создавшего запись.
updatedon datetime Дата последнего обновления.
updatedby integer ID пользователя, обновившего запись.
active boolean Статус (1 = активен, 0 = скрыт).
special boolean Статус "Особенное" (1 = да, 0 = нет).

Группы (теги) для фотографий

Группы (теги) для фотографий

Описание

Начиная с версии **3.0.17**, Gallery3x поддерживает группировку фотографий с помощью групп (тегов). Одной фотографии можно присвоить несколько групп одновременно, что позволяет гибко организовывать и фильтровать изображения.

Ключевые особенности:
✅ Множественный выбор групп для одной фотографии
✅ Глобальные группы доступны во всех галереях компонента
✅ Быстрая фильтрация по группам в панели управления
✅ Массовое присвоение групп выбранным фотографиям
✅ Удобный интерфейс с визуальными "таблетками"

---

Создание групп

Группы создаются динамически при редактировании фотографий. Для создания новой группы:

1. Откройте контекстное меню на фотографии (правый клик)
2. Выберите "Изменить свойства"
3. В поле "Группа" начните вводить название группы (например, "Пейзаж")
4. ⚠️ ОБЯЗАТЕЛЬНО нажмите клавишу `Enter` — группа превратится в "таблетку" с крестиком
5. Повторите для добавления других групп
6. Нажмите "Сохранить"

> 💡 Важно: Без нажатия `Enter` группа не будет создана! После нажатия `Enter` вы увидите, что текст превратился в цветную "таблетку" — это означает, что группа добавлена.

---

Присвоение групп одной фотографии

Способ 1: Через свойства фотографии

1. Правый клик на фотографии → "Изменить свойства"
2. В поле "Группа" введите название и нажмите `Enter`
3. Добавьте еще группы (каждый раз нажимая `Enter`)
4. Нажмите "Сохранить"

Способ 2: Выбор существующих групп

1. Правый клик на фотографии → "Изменить свойства"
2. Кликните в поле "Группа" — откроется выпадающий список
3. Выберите существующие группы из списка (они уже созданы ранее)
4. Или введите новую группу и нажмите `Enter`
5. Нажмите "Сохранить"

---

Массовое присвоение групп

Вы можете присвоить группы сразу нескольким фотографиям:

1. Выделите несколько фотографий (удерживая `Ctrl` или `Shift`)
2. Правый клик → "Установить группу..."
3. В открывшемся окне выберите или создайте группы (не забывайте нажимать `Enter`)
4. Нажмите "Сохранить"
5. Группы будут **добавлены** к уже существующим группам этих фотографий

---

Фильтрация по группам

В верхней панели галереи находится фильтр по группам:

1. Откройте выпадающий список **"Фильтр по группе:"**
2. Выберите нужную группу
3. Галерея покажет только фотографии с этой группой
4. Для сброса фильтра нажмите кнопку **"Сбросить"**

---

Удаление групп

Удаление группы у фотографии:

1.Правый клик на фотографии → "Изменить свойства"
2. Нажмите **крестик (×)** на "таблетке" нужной группы
3. Нажмите **"Сохранить"**

Удаление группы полностью:

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

---

Где отображаются группы

- В админке: Под каждой фотографией показываются все её группы через запятую
- В базе данных: Группы хранятся в поле `group` таблицы `gallery3x_files` через разделитель `||` (стандарт MODX)

---

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

Пример 1: Организация по темам
- Создайте группы: `Природа`, `Архитектура`, `Люди`, `Животные`
- Присвойте фотографиям соответствующие группы
- Используйте фильтр для быстрого поиска нужной категории

Пример 2: Множественная классификация
- Фотографии могут иметь несколько групп: `Зима`, `Пейзаж`, `Закат`
- Это позволяет находить фото по разным критериям

Пример 3: Массовая работа
- Выделите 20 фотографий с одного мероприятия
- Присвойте им группу `Конференция 2025`
- Добавьте дополнительную группу `Корпоратив` некоторым из них

---

Часто задаваемые вопросы (FAQ)

Q: Я ввожу название группы, но она не сохраняется. Почему?
A: Вы забыли нажать клавишу **`Enter`** после ввода названия. Группа должна превратиться в "таблетку" с крестиком.

Q: Группы, созданные в одной галерее, видны в другой?
A: Да! Группы теперь глобальные и доступны во всех галереях компонента.

Q: Можно ли переименовать группу?
A: Нет, но вы можете удалить старую группу у всех фотографий и создать новую с нужным названием.

Q: Сколько групп можно присвоить одной фотографии?
A: Неограниченное количество.

---

Технические детали

- Формат хранения: Группы хранятся в поле `group` через разделитель `||` (например: `Природа||Пейзаж||Зима`)
- Компонент UI:Используется стандартный MODX SuperBoxSelect
- Процессоры: `File/GetGroups`, `File/BulkSetGroup`, `File/Update`

Кастомизация процессора получения групп (тэгов)



Как создать свой процессор: 


Пример: Фильтрация по resource_id (Что группы были для каждого ресурса свои и не повторялись в других)
Создайте файл: в core/components/gallery3x/src/Processors/GetGroupsByResource.php

<?php
namespace Gallery3x\Processors;
use Gallery3x\Model\Gallery3xFile;

class GetGroupsByResource extends GetGroupsCombined
{
    public function process()
    {
        $resourceId = $this->getProperty('resource_id');
        $allGroups = [];

        // Только для текущего ресурса
        $fileTableName = $this->modx->getTableName(Gallery3xFile::class);
        $sql = "SELECT DISTINCT `group` FROM {$fileTableName} 
                WHERE `group` IS NOT NULL 
                AND `group` != '' 
                AND `resource_id` = :resource_id
                ORDER BY `group` ASC";

        $stmt = $this->modx->prepare($sql);
        $stmt->bindValue(':resource_id', $resourceId);

        if ($stmt->execute()) {
            while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
                $groupsInRow = explode('||', $row['group']);
                foreach ($groupsInRow as $group) {
                    $group = trim($group);
                    if (!empty($group)) {
                        $allGroups[] = $group;
                    }
                }
            }
        }

        // То же для видео...

        $uniqueGroups = array_unique($allGroups);
        sort($uniqueGroups);

        $groups = [];
        foreach ($uniqueGroups as $group) {
            $groups[] = ['name' => $group];
        }

        return $this->success('', ['results' => $groups, 'total' => count($groups)]);
    }
}
Затем в настройках:


gallery3x.groups_processor = Gallery3x\Processors\GetGroupsByResource