风能 / nova-pill-filter
一个简单的Laravel Nova过滤器,可以渲染为可点击的药丸
Requires
- php: >=7.2
- laravel/nova: ^3.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
This package is auto-updated.
Last update: 2021-10-29 03:04:50 UTC
README
一个简单的Laravel Nova过滤器,可以渲染为多彩的点击药丸。这个过滤器非常受另一个包的启发,然而我们为客户项目需要一些额外的功能(如自定义药丸颜色),而这个包似乎没有维护且未准备好投入生产,因此我们决定制作这个过滤器的自定义版本。
安装
您可以通过composer将此包安装到使用Nova的Laravel应用程序中
composer require eolica/nova-pill-filter
使用
创建过滤器
您可以通过手动创建并扩展Eolica\NovaPillFilter\PillFilter类来创建一个新的药丸过滤器
namespace App\Nova\Filters; use Illuminate\Http\Request; use Eolica\NovaPillFilter\PillFilter; final class MyPillFilter extends PillFilter { public function apply(Request $request, $query, $value) { return $query; } public function options(Request $request) { return []; } }
或者,更简单的方法是使用以下Artisan命令
php artisan nova:pill-filter MyPillFilter
如果您想自定义命令使用的“占位符”来生成过滤器类,您可以使用以下命令来发布它
php artisan nova:pill-filter-stubs
接下来,我们必须在我们的资源的filters方法中注册过滤器
final class MyNovaResource extends Resource { public function filters(Request $request) { return [ Filters\MyPillFilter::make(), ]; } }
配置过滤器
默认情况下,可以选择多个项目,您可以使用single方法将其限制为一次只能选择一个项目
final class MyNovaResource extends Resource { public function filters(Request $request) { return [ Filters\MyPillFilter::make()->single(), ]; } }
此外,当某些项目处于活动状态时,过滤器默认会显示“清除”按钮。当点击时,会一次性禁用所有项目。如果您想隐藏此按钮,可以使用hideClearButton方法
final class MyNovaResource extends Resource { public function filters(Request $request) { return [ Filters\MyPillFilter::make()->hideClearButton(), ]; } }
如果您想显示“清除”按钮,您也可以使用clearLabel方法更改其中的文本,主要是为了翻译目的
final class MyNovaResource extends Resource { public function filters(Request $request) { return [ Filters\MyPillFilter::make()->clearLabel('Custom label'), ]; } }
最后,您可以通过使用draggable方法更改过滤器的显示模式,默认情况下它会自动换行以一次显示所有药丸,但是您也可以将其更改为拖动模式
final class MyNovaResource extends Resource { public function filters(Request $request) { return [ Filters\MyPillFilter::make()->draggable(), ]; } }
配置过滤器选项
最简单的方法是返回一个键值对数组,键是药丸中显示的标签
final class MyPillFilter extends PillFilter { public function options(Request $request) { return [ 'Family' => 'family', 'Sea' => 'sea', 'Sports' => 'sports', 'City' => 'city', 'Eco' => 'eco', 'Countryside' => 'countryside', ]; } }
您可以自定义每个药丸的背景颜色、文本颜色、活动时的背景颜色和活动时的文本颜色,在这种情况下,每个选项的键必须是值,而标签文本必须在label键中
final class MyPillFilter extends PillFilter { public function options(Request $request) { return [ 'family' => [ 'label' => 'Family', 'color' => '#d53f8c', // Default '#3c4b5f' 'backgroundColor' => '#fbb6ce', // Default '#eef1f4' 'colorActive' => '#ffffff', // Default '#ffffff' 'backgroundColorActive' => '#d53f8c', // Default '#4099de' ], 'sea' => [ 'label' => 'Sea', 'color' => '#3182ce', 'backgroundColor' => '#bee3f8', 'colorActive' => '#ffffff', 'backgroundColorActive' => '#3182ce', ], 'sports' => [ 'label' => 'Sports', 'color' => '#e53e3e', 'backgroundColor' => '#fed7d7', 'colorActive' => '#ffffff', 'backgroundColorActive' => '#e53e3e', ], ... ]; } }
将值应用到查询中
过滤器将发送一个包含活动值的数组
final class MyPillFilter extends PillFilter { public function apply(Request $request, $query, $values) { return $query->whereIn('lifestyle', $values); // $values is an array } }
变更日志
有关最近更改的更多信息,请参阅CHANGELOG
安全性
如果您在此软件包中发现安全漏洞,请发送电子邮件至 dllobellmoya@gmail.com,而不是使用问题跟踪器。
授权
MIT授权(MIT)。有关更多信息,请参阅 授权文件。

