Closed dessl closed 7 years ago
По кастомам логика из коробки работать не будет никогда. Для этих целей был придуман setFilterCallback
Да setFilterCallback отличная штука, только она реализована в NamedColumn и многие контролы наследуются от нее, но только не AdminColumn::custom, он наследуется от TableColumn, где нет метода setFilterCallback. Хотя как раз в AdminColumn::custom он очень нужен.
@dessl понятно. Исправим - сегодня.
@dessl прошу бегло пробежаться по функционалу. И добро пожаловать к нам в чатик https://gitter.im/LaravelRUS/SleepingOwlAdmin
Добавил
AdminColumn::custom(trans('labels.news.active'), function(Model $model) {
$icon = (!$model->hidden) ? '<i class="fa fa-check"></i>' : '<i class="fa fa-minus"></i>';
return '<p class="text-left">' . $icon . '</p>';
})->setFilterCallback(function($column, $query, $search) {
dd($column, $query, $search);
})
Выдал ошибку:
Type error: Argument 1 passed to SleepingOwl\Admin\Display\Column\Filter\BaseColumnFilter::apply() must implement interface SleepingOwl\Admin\Contracts\Display\NamedColumnInterface, instance of SleepingOwl\Admin\Display\Column\Custom given, called in C:\OpenServer\domains\AltynAlma\vendor\laravelrus\sleepingowl\src\Display\Extension\ColumnFilters.php on line 216
Хотя теперь вообще нигде не работает async, везде идет эта ошибка, независимо от набора полей.
Мде... ясненько. тогда вечером разберусь.
@dessl Нащальнике, я сделяль.
@aios спасибо заработало, только как в примере не получается
$query->where($column->getName(), 'like', "%$search%");
у AdminColumn::custom нет метода getName(). По сути конечно не критично, т.к. поле фильтрации можно указать жестко.
@dessl собственно и саму логику фильтрации можно указывать любую - не обязательно относительно колонки. У тебя в кастоме может юзаться достаточно разная логика включающая в себя кучу колонок. так что это не проблема.
Использую AdminDisplay::datatablesAsync()
Для булева поля в базе использую следующую конструкцию: Поле:
Фильтр:
Сортировка не работает!
Если поле указать как:
работать будет, но отображать будет 0 и 1