shllghst/nova-pill-filter

一个简单的 Laravel Nova 过滤器,可以渲染成可点击的药丸状

2.0.1 2023-06-09 09:53 UTC

This package is auto-updated.

Last update: 2024-09-09 12:25:24 UTC


README

一个简单的 Laravel Nova 过滤器,可以渲染成彩色的可点击药丸。这个过滤器非常受 这个其他包 的启发,但是我们需要一些额外的功能(例如自定义每个药丸的颜色)用于客户项目,而这个包似乎没有得到维护也不适用于生产环境,所以我们决定制作我们自己的这个过滤器的版本。

Pill Filter

安装

您可以通过 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(),
        ];
    }
}

Pill Filter

配置过滤器选项

最简单的方法是返回一个键/值对数组,键是药丸中显示的标签

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)。请参阅 许可证文件 了解更多信息。