Фильтры столбцов
Фильтры столбцов используются для фильтрации списка.
В случае с AdminDisplay::datatables() поиск производится через API библиотеки datatables.
Пример использования:
$display = AdminDisplay::datatables();
$display->setColumnFilters([
null, // Не ищем по первому столбцу
// Поиск текста
AdminColumnFilter::text()
->setPlaceholder('Full Name'),
// Поиск по диапазону
AdminColumnFilter::range()->setFrom(
AdminColumnFilter::text()
->setPlaceholder('From')
)->setTo(
AdminColumnFilter::text()
->setPlaceholder('To')
),
// Поиск по диапазону дат
AdminColumnFilter::range()->setFrom(
AdminColumnFilter::date()
->setPlaceholder('From Date')
->setFormat('d.m.Y')
)->setTo(
AdminColumnFilter::date()
->setPlaceholder('To Date')
->setFormat('d.m.Y')
),
// Поиск по выпадающему списку значений
AdminColumnFilter::select(new Country, 'Title')
->setDisplay('title')
->setPlaceholder('Select Country')
->setColumnName('country_id')
]);
При указании столбцов необходимо, чтобы кол-во столбцов поиска соответствовало кол-ву столбцов в таблице (если поиск по определенному столбцу не нужен, то необходимо передать null) и была соблюдена последовательность
Так же фильтры можно вынести из таблицы:
$display = AdminDisplay::datatables();
$filters = [
//нужные фильтры
];
$display->setColumnFilters($filters);
//любая доступная позиция
$display->getColumnFilters()->setPlacement('card.heading');
API
В классах фильтров столбцов используется трейт:
- HtmlAttributes, с помощью которого для них можно настраивать HTML атрибуты.
- Assets, с помощью которого для них можно подключать ассеты.
Методы доступные во всех фильтрах
setOperator
Указание оператора, который будет использован при фильтрации. По умолчанию equal
static::setOperator(string $operator): return self
Список доступных операторов сравнения:
SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::EQUAL = equal- равноSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_EQUAL = not_equal- не равноSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::LESS = less- меньшеSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::LESS_OR_EQUAL = less_or_equal- меньше или равноSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::GREATER = greater- большеSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::GREATER_OR_EQUAL = greater_or_equal- больше или равноSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::BEGINS_WITH = begins_with- начинается сSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_BEGINS_WITH = not_begins_with- не начинается сSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::CONTAINS = contains- содержитSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_CONTAINS = not_contains- не содержитSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::ENDS_WITH = ends_with- заканчивается наSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_ENDS_WITH = not_ends_with- не заканчивается наSleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::BETWEEN = between- между (значения указываются через,)SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_BETWEEN = not_between- не между (значения указываются через,)SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::IN = in- одно из (значения указываются через,)SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::NOT_IN = not_in- не одно из (значения указываются через,)
Text
Фильтрация данных по строке
AdminColumnFilter::text()
->setPlaceholder('Full Name')
->setOperator(\SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::CONTAINS)
setPlaceholder
Указание плейсхолдера для поля.
static::setPlaceholder(string $placeholder): return self
Date
Фильтрация данных по дате
AdminColumnFilter::date()->setPlaceholder('Date')->setFormat('d.m.Y')
setFormat
Указание формата даты в которой приходит дата из инпута
static::setFormat(string $format): return self
setPickerFormat
Указание формата даты отображаемой в инпуте и понятной для Javascript
static::setPickerFormat(string $pickerFormat): return self
setSearchFormat
Указание формата даты в котором данные хранятся в БД
static::setSearchFormat(string $searchFormat): return self
setWidth (доступно в v6+, вернулось в v7.20+)
Минимальная ширина блока Доступно во всех фильтрах, в рейдж блоке и во внутренних частях рейндж блока
static::setWidth(string $width): return self
AdminColumnFilter::text()
->setPlaceholder('Full Name')
->setColumnName('title')
->setWidth('20rem') //min-width: 20rem / em / px / %
->setOperator('contains'),
Select
Фильтрация данных по данным из выпадающего списка. В опции можно указать массив или передать модель:
//массивом
AdminColumnFilter::select()
->setOptions([
'sender' => 'Отправитель',
'recipient' => 'Получатель',
])
->setWidth('15rem')
->setColumnName('payer_type')
->setPlaceholder('Все'),
//моделью
AdminColumnFilter::select()
->setModelForOptions(Sender::class)
->setDisplay(function($filter){
return $filter->id . ' - ' . $filter->description;
})
->setWidth('15rem')
->setFetchColumns('description') //id и так выбирается
->setColumnName('sender_id')
->setLoadOptionsQueryPreparer(function($element, $query) {
//любая своя логика либо скоуп
return $query->active();
})
->setPlaceholder('Все отправители'),
//другое
AdminColumnFilter::select()
->setOptions([
'http://' => 'Внешние изображения',
'https://' => 'Внешние изображения 2',
'http' => 'Внешние все',
])
->setWidth('20rem')
->setOperator(\SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface::BEGINS_WITH)
->setColumnName('image')
->setPlaceholder('Все'),
Range
Фильтрация данных по диазону.
setInline(true) (dev или v7.20 +)
Выравнивание инпутов Range в одну строку
setFrom
Указание поля начала диапазона
static::setFrom(ColumnFilterInterface $from): return self
setTo
Указание поля конца диапазона
static::setTo(ColumnFilterInterface $from): return self