风能/nova-pill-filter

此包已被弃用且不再维护。未建议替代包。

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

1.0.0 2020-10-29 18:06 UTC

This package is auto-updated.

Last update: 2021-10-29 03:04:50 UTC


README

一个简单的Laravel Nova过滤器,可以渲染为多彩的点击药丸。这个过滤器非常受另一个包的启发,然而我们为客户项目需要一些额外的功能(如自定义药丸颜色),而这个包似乎没有维护且未准备好投入生产,因此我们决定制作这个过滤器的自定义版本。

Pill Filter

安装

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

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',
            ],
            ...
        ];
    }
}

将值应用到查询中

过滤器将发送一个包含活动值的数组

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)。有关更多信息,请参阅 授权文件