shllghst/nova-pill-filter
一个简单的 Laravel Nova 过滤器,可以渲染成可点击的药丸状
Requires
- php: >=7.2
- laravel/nova: ^3.0|^4.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
README
一个简单的 Laravel Nova 过滤器,可以渲染成彩色的可点击药丸。这个过滤器非常受 这个其他包 的启发,但是我们需要一些额外的功能(例如自定义每个药丸的颜色)用于客户项目,而这个包似乎没有得到维护也不适用于生产环境,所以我们决定制作我们自己的这个过滤器的版本。
安装
您可以通过 composer 将包安装到使用 Nova 的 Laravel 应用中
composer require shllghst/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', ], ... ]; } }
将值应用于查询
过滤器将向您发送一个包含活动值的 array
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)。请参阅 许可证文件 了解更多信息。