cierrateam / nova-sortable
这个Laravel Nova包允许你使用拖放的方式在Nova资源索引视图中重新排序模型。
资助包维护!
optimistdigital
Requires
- php: >=7.3.0
- laravel/nova: ^3.0
- optimistdigital/nova-translations-loader: ^3.0.0
- spatie/eloquent-sortable: ^3.10.0
This package is auto-updated.
Last update: 2024-09-17 07:26:39 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许可。