сортировать
Функция сортировать возвращает копию списка, элементы которой расположены по возрастанию.
Синтаксис
сортировать(элемент из список, выражение)
Параметры:
элемент— имя текущего элемента списка. Задаётся непосредственно в функции и используется в выражении сортировки;список— идентификатор спискового поля, элементы которого необходимо отсортировать;выражение— значение, по которому определяется порядок элементов.
Имя текущего элемента можно выбрать самостоятельно. Оно используется только внутри функции.
Список с простыми элементами
Если список содержит простые значения, сортировку можно выполнять по значению текущего элемента.
Например:
сортировать(число из списокЧисел, число)
Здесь:
списокЧисел— идентификатор спискового поля;число— имя текущего элемента списка;- второе
число— значение, по которому выполняется сортировка.
Список с составными элементами
Если элементы списка являются составными полями, в выражении указывается вложенное поле, по которому необходимо выполнить сортировку.
Например:
сортировать(товар из товары, товар.стоимость)
Здесь:
товары— идентификатор спискового поля;товар— имя текущего элемента списка;стоимость— идентификатор вложенного поля;товар.стоимость— значение, по которому выполняется сортировка.
Возвращаемое значение
Функция возвращает отсортированную копию исходного списка.
Исходный список при этом не изменяется.
Чтобы вывести элементы отсортированного списка в документе, используйте результат функции сортировать внутри конструкции цикл.
Примеры
Сортировка списка чисел
Допустим, в шаблоне есть списковое поле с идентификатором:
списокЧисел
Оно содержит значения:
| Позиция | Значение |
|---|---|
| 1 | 8 |
| 2 | 3 |
| 3 | 12 |
| 4 | 5 |
Чтобы вывести значения по возрастанию, используйте функцию сортировать внутри конструкции цикл:
{цикл(число из сортировать(элемент из списокЧисел, элемент))}
{число}
{/цикл}
Здесь:
списокЧисел— идентификатор исходного спискового поля;элемент— имя текущего элемента внутри функциисортировать;- второе
элемент— значение, по которому выполняется сортировка; сортировать(...)— возвращает отсортированную копию списка;число— имя текущего элемента отсортированного списка внутри конструкциицикл.
Результат:
3
5
8
12
Исходный список списокЧисел при этом остаётся без изменений.
Сортировка товаров по стоимости
Допустим, в шаблоне есть списковое поле с идентификатором:
товары
Каждый элемент списка является составным полем и содержит:
наименование— идентификатор поля с названием товара;стоимость— идентификатор поля со стоимостью товара.
Исходный список:
| Позиция | наименование |
стоимость |
|---|---|---|
| 1 | Монитор | 15000 |
| 2 | Клавиатура | 800 |
| 3 | Принтер | 12000 |
| 4 | Мышь | 600 |
Чтобы вывести товары в порядке увеличения стоимости:
{цикл(позиция из сортировать(товар из товары, товар.стоимость))}
{позиция.наименование} — {позиция.стоимость}
{/цикл}
Здесь:
товары— идентификатор исходного спискового поля;товар— имя текущего элемента внутри функциисортировать;товар.стоимость— значение, по которому выполняется сортировка;сортировать(...)— возвращает копию спискатоварыс изменённым порядком элементов;позиция— имя текущего элемента отсортированного списка внутри конструкциицикл;позиция.наименованиеипозиция.стоимость— обращения к полям текущего элемента.
Результат:
Мышь — 600
Клавиатура — 800
Принтер — 12000
Монитор — 15000
Сортировка по результату выражения
В качестве критерия сортировки можно использовать выражение.
Допустим, список товары дополнительно содержит поле:
количество
Исходные данные:
наименование |
стоимость |
количество |
|---|---|---|
| Стул | 3500 | 4 |
| Стол | 7500 | 1 |
| Шкаф | 12000 | 2 |
Нужно вывести товары по возрастанию общей стоимости позиции — стоимость × количество.
Выражение:
{цикл(позиция из сортировать(товар из товары, товар.стоимость * товар.количество))}
{позиция.наименование}
{/цикл}
Для каждого элемента функция вычисляет значение выражения:
наименование |
Расчёт | Значение для сортировки |
|---|---|---|
| Стул | 3500 × 4 |
14000 |
| Стол | 7500 × 1 |
7500 |
| Шкаф | 12000 × 2 |
24000 |
Результат:
Стол
Стул
Шкаф
Вычисленное значение используется только для определения порядка элементов и не добавляется в исходный список.