---
pkg: "@nocobase/plugin-field-sort"
---

# Поле сортировки

## Введение

Поля сортировки используются для упорядочивания записей в коллекции, поддерживая сортировку с предварительной группировкой.

:::warning
Поскольку поле сортировки относится к той же коллекции, при групповой сортировке одна и та же запись не может быть отнесена к нескольким группам.
:::

## Установка

Это встроенный плагин, поэтому отдельная установка не требуется.

## Руководство пользователя

### Создание поля сортировки

![20240409091123_rec_](https://static-docs.nocobase.com/20240409091123_rec_.gif)

При создании поля сортировки его значения будут инициализированы:

- Если групповая сортировка не выбрана, инициализация будет выполнена на основе поля первичного ключа и поля даты создания.
- Если выбрана групповая сортировка, данные сначала будут сгруппированы, а затем инициализация будет выполнена на основе поля первичного ключа и поля даты создания.

:::warning{title="Пояснение по транзакционной целостности"}
- При создании поля, если инициализация значения сортировки завершается неудачей, поле сортировки не будет создано.
- Если в определённом диапазоне запись перемещается из позиции A в позицию B, значения сортировки всех записей между A и B изменятся. Если одно из этих обновлений завершится неудачей, вся операция перемещения будет отменена, и значения сортировки связанных записей не изменятся.
:::

#### Пример 1: Создание поля sort1

Поле sort1 без группировки

![20240409091510](https://static-docs.nocobase.com/20240409091510.png)

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

![20240409092305](https://static-docs.nocobase.com/20240409092305.png)

#### Пример 2: Создание поля sort2 с группировкой по Class ID

![20240409092620](https://static-docs.nocobase.com/20240409092620.png)

В этом случае все записи в коллекции сначала будут сгруппированы (по Class ID), а затем будет выполнена инициализация поля сортировки (sort2). Начальные значения для каждой записи:

![20240409092847](https://static-docs.nocobase.com/20240409092847.png)

### Сортировка перетаскиванием

Поля сортировки в основном используются для сортировки записей в различных блоках методом перетаскивания. В настоящее время сортировку перетаскиванием поддерживают блоки таблиц и канбан-досок.

:::warning
- Если одно и то же поле сортировки используется для перетаскивания в нескольких блоках одновременно, это может нарушить существующий порядок.
- Для сортировки таблицы перетаскиванием нельзя выбрать поле сортировки с правилом группировки.
  - Исключение: в блоке таблицы с отношением «один-ко-многим» внешний ключ может служить группой.
- В настоящее время только блок канбан-доски поддерживает сортировку перетаскиванием с группировкой.
:::

#### Сортировка строк таблицы перетаскиванием

Блок таблицы

![20240409104621_rec_](https://static-docs.nocobase.com/20240409104621_rec_.gif)

Блок таблицы отношений

<video controls width="100%" src="https://static-docs.nocobase.com/20240409111903_rec_.mp4" title="Title"></video>

:::warning
В блоке отношения «один-ко-многим»:

- Если выбрано негруппированное поле сортировки, все записи могут участвовать в сортировке.
- Если записи сначала группируются по внешнему ключу, а затем сортируются, правило сортировки повлияет только на данные внутри текущей группы.

Конечный результат будет одинаковым, но количество записей, участвующих в сортировке, будет отличаться. Подробнее см. в разделе [Пояснение правил сортировки](#пояснение-правил-сортировки).
:::

#### Сортировка карточек канбан-доски перетаскиванием

![20240409110423_rec_](https://static-docs.nocobase.com/20240409110423_rec_.gif)

### Пояснение правил сортировки

#### Перемещение элементов без группировки (или внутри одной группы)

Предположим, у нас есть набор данных:

```
[1,2,3,4,5,6,7,8,9]
```

Когда элемент, например 5, перемещается вперёд на позицию 3, изменяются только позиции элементов 3, 4 и 5. Элемент 5 занимает позицию 3, а элементы 3 и 4 сдвигаются на одну позицию назад.

```
[1,2,5,3,4,6,7,8,9]
```

Затем, если мы переместим элемент 6 назад на позицию 8, элемент 6 займёт позицию 8, а элементы 7 и 8 сдвинутся на одну позицию вперёд.

```
[1,2,5,3,4,7,8,6,9]
```

#### Перемещение элементов между разными группами

При групповой сортировке, если запись перемещается в другую группу, её принадлежность к группе также изменится. Например:

```
A: [1,2,3,4]
B: [5,6,7,8]
```

Когда элемент 1 перемещается после элемента 6 (поведение по умолчанию), его группа также изменится с A на B.

```
A: [2,3,4]
B: [5,6,1,7,8]
```

#### Изменения сортировки не зависят от данных, отображаемых в интерфейсе

Например, рассмотрим набор данных:

```
[1,2,3,4,5,6,7,8,9]
```

В интерфейсе отображается только отфильтрованный вид:

```
[1,5,9]
```

Когда элемент 1 перемещается на позицию 9, позиции всех промежуточных элементов (2, 3, 4, 5, 6, 7, 8) также изменятся, даже если они не видны.

```
[2,3,4,5,6,7,8,9,1]
```

Интерфейс теперь отображает новый порядок на основе отфильтрованных элементов:

```
[5,9,1]
```