cierrateam/nova-sortable

这个Laravel Nova包允许你使用拖放的方式在Nova资源索引视图中重新排序模型。

资助包维护!
optimistdigital

安装: 24

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 118

语言:Vue

2.1.7 2021-02-16 23:58 UTC

README

该包是从optimistdigital/nova-sortable分叉而来。不同之处在于编辑按钮位于左侧而不是右侧。

要求

  • php: >=7.3
  • laravel/nova: ^3.0

安装

通过Composer在Laravel Nova项目中安装此包

# Install package
composer require cierrateam/nova-sortable

用法

创建迁移

使用Laravel迁移在模型中添加排序字段

// Add order column to the model
Schema::table('some_model', function (Blueprint $table) {
  $table->integer('sort_order');
});

// Set default sort order (just copy ID to sort order)
DB::statement('UPDATE some_model SET sort_order = id');

实现 eloquent-sortable

实现 Spatie的eloquent-sortable接口并应用特质

use Spatie\EloquentSortable\Sortable;
use Spatie\EloquentSortable\SortableTrait;

class SomeModel extends Eloquent implements Sortable
{
  use SortableTrait;

  public $sortable = [
    'order_column_name' => 'sort_order',
    'sort_when_creating' => true,
  ];

  ...
}

如果模型没有排序配置,将使用默认的eloquent-sortable配置。

应用到Nova资源上的HasSortableRows

在资源上应用此包的HasSortableRows特质

use Cierrateam\NovaSortable\Traits\HasSortableRows;

class MyResource extends Resource
{
  use HasSortableRows;

  ...
}

NB!这会覆盖indexQuery()方法。

按请求/资源禁止排序

你可以通过覆盖资源方法上的canSort()来禁用按请求或按资源排序

public static function canSort(NovaRequest $request, $resource)
{
  // Do whatever here, ie:
  // return user()->isAdmin();
  // return $resource->id !== 5;
  return true;
}

在HasMany关系上排序

NB!资源只能对索引视图或HasMany列表视图进行排序,但不能同时进行排序!

在HasMany上排序很简单。将'sort_on_has_many' => true添加到模型上的$sortable数组中。如下所示

public $sortable = [
  'order_column_name' => 'sort_order',
  'sort_when_creating' => true,
  'sort_on_has_many' => true,
];

HasMany上的排序配置可以在每个模型的基础上应用,或者可以添加到eloquent-sortable的配置中,适用于所有模型。

return [

    // Spatie sortable configuration

    /**
     * Add sort on has many in all the models.
     **/
    'sort_on_has_many' => true,
];

在ManyToMany关系上排序

在BelongsToMany和MorphToMany关系上排序是可用的,但需要特殊步骤。

请参阅此处文档:排序ManyToMany关系(带枢纽表)

本地化

可以使用以下发布命令发布翻译文件

php artisan vendor:publish --provider="Cierrateam\NovaSortable\ToolServiceProvider" --tag="translations"

您可以将翻译添加到resources/lang/vendor/nova-sortable/,通过创建一个带有区域名称的新翻译文件(例如et.json),并将JSON从现有的en.json复制过来。

鸣谢

许可证

Nova Sortable是开源软件,许可协议为MIT许可