dddeeemmmooonnn/nova-multicolumn-filter

一个 Laravel Nova 多列过滤器。

v0.6.3 2020-07-20 17:29 UTC

This package is auto-updated.

Last update: 2024-09-21 02:45:12 UTC


README

多列过滤器

演示

Demo

安装

在您的 Laravel Nova 项目中运行此命令

composer require dddeeemmmooonnn/nova-multicolumn-filter

使用方法

简化版

new NovaMulticolumnFilter([
        'column' => '', //columns
    ],
    $manual_update = false, // Apply filter with the button
    $default_column_type = 'text', // Default input type
    $name = 'filter' // Filter name
),

详细版

预期用途:扩展过滤器,添加不同的选项和操作符,在构造函数中使用与列声明一起使用。或者再次扩展,并在那里添加列声明。

使用 artisan 创建过滤器

 $ php artisan nova:filter UserFilter 

从 NovaMulticolumnFilter 扩展您的过滤器,并自定义操作符、选项和列。

综合示例

use dddeeemmmooonnn\NovaMulticolumnFilter\NovaMulticolumnFilter;

class UserFilter extends NovaMulticolumnFilter
{
    public $name = 'Filters';

    protected $columns = [
        // Simple text column declaration
        'column1' => '',
        
        // Customizing all
        'column2' => [
            'type' => 'email',
            'label' => 'E-mail',
            'operators' => [
                '=' => '=',
                //...
            ],
            'defaultOperator' => '=',
            'defaultValue' => 'admin@admin.com',
            'preset' => true,
            'apply' => 'customApply',
            'placeholder' => 'input placeholder'
        ],
        
        // For checkboxes
        'column3' => [
            'type' => 'checkbox',
            'label' => 'Checkbox',
            'defaultValue' => 'anything', // Not empty = checked
        ],
        
        // Select type, options in array
        'column4' => [
            'type' => 'select',
            'label' => 'Select',
            'options' => [
                '1' => 'First',
                '2' => 'Second',
                //...
            ],
            'defaultValue' => '1',
        ],
        
        // Select type, options in optionsCustomOptions() method
        'column5' => [
            'type' => 'select',
            'label' => 'Select again',
            'options' => 'customOptions',
            'defaultValue' => '1',
        ],
        
        // operators in operatorsCustomOperators() method
        'column6' => [
            'type' => 'number',
            'label' => 'Number',
            'operators' => 'customOperators',
            'defaultValue' => '1',
        ],
        
        // Date type
        'column7' => [
            'type' => 'date',
            'label' => 'Date',
        ],
        
        // Using one db column in different declarations
        'column8' => [
            'type' => 'date',
            'label' => 'Date',
            'column' => 'column7',
        ],
    ];

    protected function operatorsCustomOperators()
    {
        return [
            '=' => 'Equals',
            '>' => 'Greater',
            '<' => 'Less',
        ];
    }

    protected function optionsCustomOptions()
    {
        return [
            '1' => 'One',
            '2' => 'Two',
            '3' => 'Three',
        ];
    }

    protected function applyCustomApply($query, $column, $operator, $value)
    {
        return $query->where($column, $operator, $value);
    }
    
    //Also you can override default values

    protected $default_column_type = 'text';
    
    protected $manual_update = false;
    
    protected function operatorsDefault()
    {
        return [
            '=' => '=',
            '>' => '>',
            '>=' => '>=',
            '<' => '<',
            '<=' => '<=',
            'LIKE' => 'Like',
        ];
    }
}

列选项

  • type - 输入类型

    • select - 必需的选项,操作符 =
    • date - 在 apply() 函数中使用 whereDate
    • checkbox - 操作符 =
    • text, email, number 和其他 <input type="***"/>
  • label - 列标签

  • operators - 列的操作符列表。数组 ['value' => 'label'] 或表示方法名称的字符串。方法必须声明为 operatorsYourName

  • options - 对于 select 类型,类似于 operators,但方法命名以 options 开头

  • defaultOperator

  • defaultValue

  • preset - 当过滤器为空时预设列,在打开过滤器菜单后应用

  • column - 列名称,如果您想为一个列使用多个类型

  • apply - 自定义 apply 方法,用于过滤列

  • placeholder - <input> 提示

本地化

添加到 nova 语言的 json 文件中(resources/lang/vendor/nova/<lang>.json)

    "multicolumn.select_empty_label": "—",
    "multicolumn.add": "Add",
    "multicolumn.apply": "Apply"

作者

此过滤器灵感来源于 philperusse/nova-column-filterbeyondcode/nova-filterable-cards