Работа с гридами сотрудника
Подобно фильтрам табличное отображение так же зависит от настроек пользователя и является индивидуальным.
Работа с гридами начинается с создания объекта настроек Bitrix\Main\Grid\Options
(ранее \CGridOptions
), который требует только идентификатор грида с которым будет осуществляться работа.
use \Bitrix\Main\Grid\Options;
$gridOptions = new Options('MY_UNIQUE_GRID_ID');
Получив в объект настроек грида, можно начать работу и получить другие полезные данные.
API
В данном разделе собраны полезные методы по работе с гридом.
Подразумевается что объект грида уже получен и находится в переменной $gridOptions
.
Мы сознательно избегаем методов, манипулирующих пользовательским отображением (set*, save() и т.п.), подразумевая что ситуаций в которых это явно необходимо немного и в таком случае будет привлекаться опытный разработчик.
Получение отображаемых колонок
Для организации быстродействия, зачастую бывает полезно получать не всю информацию для отображения таблицы, а только ту, которую пользователь реально запросил.
Случай 1: на одном проекте у нас была большая таблица со списком заявок, помимо полей самой заявки дополнительно фигурировали 2 столбца: Время реакции (вычисляемое поле между двумя значениями заявки) и Связанные заявки (перечень ссылок на заявки, доступные текущему пользователю). На вывод и вычисление этих столбцов требовалось огромное количество времени (до 60% от времени создания самого грида), однако вывод самих столбцов пользовался популярностью у малой группы сотрудников (меньше 1%). Просчет таких столбцов только для сотрудников, которым он был необходим, дал значительный прирост производительности для остальных
Случай 2: В одном из проектов клиент запросил экспорта табличного представления идентичному табличному. Т.е. последовательность и наличие столбцов должна была быть такая же, как пользователь видит на экране.
Такая возможность обеспечивается нестатическим методом getUsedColumns( $defaultColumns = [] )
который вернет набор используемых столбцов (если у пользователя есть личный пресет), либо набор переданный аргументом в метод.
/**
* @var array
*/
$defaulColumns = $gridOptions->getUsedColumns([
'OUR',
'DEFAULT',
'COLUMN',
'LIST',
]);
Аналогичным методом является
GetVisibleColumns()
, однако в случае если у пользователя нет своего пресета метод вернет пустой массив. Преимущество данного метода в том, что можно явно определить что вернуть.
Просчитать сортировку
Несмотря на то, что мы будем обсуждать метод GetSorting($arParams=array())
(дословно - Получить сортировку), правильнее назвать это методом просчета сортировки, так как для получения результата будут учтены входящие параметры, параметры запроса, значения сессии и настройки пользователя.
Структура ответа метода совпадает со значением arParams
(в коде defaultParams
):
$defaultParams = [
'sort' => []
'vars' => [
"by" => "by",
"order" => "order"
]
];
Сама сортировка состоит из 2 групп: Полей (sort
) и Переменных (vars
).
Поля представляют собой ассоциативный массив где ключом выступает идентификатор поля, а значением одно из ASC
/ DESC
варианта.
Переменные - состоят из 2 заранее определенных значений - by
- название переменной в которой содержится код поля и order
- название переменной в которой содержится значение сортировки.
Почему именно такая структура, а не простой набор полей? Дело в том, что на странице параметры by
и order
могут быть зарезервированы под другие бизнес-значения, да и самих гридов на странице может быть несколько. В случае если у гридов не разделять указанные параметры, то может сложиться ситуация, когда второй грид будет отсортирован по несуществующему полю и это может привести к фатальной ошибке (если такая ситуация не будет предусмотрена вами).
Пример: мы хотим получить сортировку текущего пользователя для грида, но если у пользователя нет своей сортировки, то мы хотим получить сортировку по имени (возрастанию):
$sort = $gridOptions->GetSorting([
'sort' => [
'NAME' => 'ASC'
]
'vars' => [
"by" => "by",
"order" => "order"
]
]);
Размер постраничной навигации
Еще одной необходимой возможностью является определение размера отображаемой страницы, что обеспечивается методом GetNavParams($arParams=array())
.
По-умолчанию, если размер постраничной навигации не задан используется значение по-умолчанию - 20 элементов на страницу. Предположим у нас есть табличное представление где нам необходимо по-умолчанию отображать 5 значений, но пользователь может выбрать любое доступное из списка (см. параметры грида).
$navParams = $gridOptions->GetNavParams([
'nPageSize' => 5
]);
/*
$navParams = [
'nPageSize' => 5
];
*/