bbs-lab / nova-tabs
Laravel Nova - 标签
v2.2.5
2024-07-01 13:57 UTC
Requires
- php: ^8.1
- ext-json: *
- laravel/nova: ^4.12
- nova-kit/nova-packages-tool: ^1.3.1
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- guzzlehttp/guzzle: ^7.0.1
- larastan/larastan: ^2.9
- laravel/pint: ^1.4.0
- mockery/mockery: ^1.5
- nova-kit/nova-devtool: ^1.0
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^6.0 || ^7.6 || ^8.0 || ^9.0
- orchestra/testbench-dusk: ^6.0 || ^7.6 || ^8.0 || ^9.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ignition: ^2.4
- spatie/laravel-ray: ^1.36
This package is auto-updated.
Last update: 2024-08-31 14:20:19 UTC
README
需求
php: ^7.4 | ^8
laravel/nova: ^4
对于 Laravel Nova 版本 3,请使用 nova-tabs v1。
安装
您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包
composer require eminiarts/nova-tabs
使用
标签面板
您可以将资源字段分组到标签中。
// in app/Nova/Resource.php use Eminiarts\Tabs\Traits\HasTabs; use Eminiarts\Tabs\Tabs; use Eminiarts\Tabs\Tab; class User extends Resource { use HasTabs; public function fields(Request $request) { return [ Tabs::make('Some Title', [ Tab::make('Balance', [ Number::make('Balance', 'balance'), Number::make('Total', 'total'), ]), Tab::make('Other Info', [ Number::make('Paid To Date', 'paid_to_date') ]), ]), ]; } }
每个 Tabs
实例的第一个标签将被自动选中。
关系标签
这些图片有些过时,因为搜索和创建按钮现在显示在面板下方,而不是在标签面板中。
// in app/Nova/Resource.php use Eminiarts\Tabs\Tabs; use Laravel\Nova\Fields\HasMany; use Eminiarts\Tabs\Traits\HasTabs; class User extends Resource { use HasTabs; public function fields(Request $request) { return [ Tabs::make('Relations', [ HasMany::make('Invoices'), HasMany::make('Notes'), HasMany::make('Contacts') ]), ]; } }
在标签中组合字段和关系
use Eminiarts\Tabs\Tabs; use Laravel\Nova\Fields\HasMany; use Eminiarts\Tabs\Traits\HasTabs; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Text; class User extends Resource { use HasTabs; public function fields(Request $request) { return [ Tabs::make(__('Client Custom Details'), [ new Panel(__('Details'), [ ID::make('Id', 'id')->rules('required')->hideFromIndex(), Text::make('Name', 'name'), ]), HasMany::make('Invoices') ]), ]; } }
标签中的操作
如果您的模型使用了 Laravel\Nova\Actions\Actionable
特性,您可以将操作放入一个标签中,如下所示
// in app/Nova/Resource.php use Eminiarts\Tabs\Tabs; use Eminiarts\Tabs\Tab; use Eminiarts\Tabs\Traits\HasTabs; use Eminiarts\Tabs\Traits\HasActionsInTabs; // Add this Trait use Laravel\Nova\Actions\ActionResource; // Import the Resource class Client extends Resource { use HasTabs; use HasActionsInTabs; // Use this Trait public function fields(Request $request) { return [ Tabs::make('Client Custom Details', [ Tab::make('Address', [ ID::make('Id', 'id'), Text::make('Name', 'name')->hideFromDetail(), ]), Tab::make('Invoices', [ HasMany::make('Invoices'), ]), Tab::make('Actions', [ $this->actionfield(), // Add Actions whererver you like. ]), ]), ]; } }
编辑视图中的标签
从 Nova 4 开始,标签始终显示在编辑视图中。
标签对象
从 v1.4.0 版本开始,可以使用 Tab
类而不是数组来表示您的标签。
自定义
显示超过5个项目
默认情况下,任何 HasMany
、BelongsToMany
和 MorphMany
字段在其索引中显示5个项目。您可以使用 Nova 内置的静态属性 $perPageViaRelationship
在相应的资源中显示更多(或更少)。
标签更改全局事件
Nova Tabs 在标签加载和用户点击标签时触发事件,使用 Nova Event Bus。开发者可以监听名为 nova-tabs-changed
的事件,该事件有两个参数作为负载:标签面板名称和标签名称本身。
订阅此事件的组件示例
export default { mounted () { Nova.$on('nova-tabs-changed', (panel, tab) => { if (panel === 'Client Details' && tab === 'address') { this.$nextTick(() => this.map.updateSize()) } }) } }
升级到 2.0.0
- 重大更改
- 移除了 selectFirstTab,第一个标签总是首先显示。
- 即使您有其他面板,标签也总是首先显示,并且具有工具栏。
- TabsOnEdit 已消失,并且非关系标签将简单地始终在编辑时显示。
- 我没有使用 dusk,所以也没有检查它的测试,它们可能已损坏。
- 添加了 Eminiarts\Tabs\Traits\HasTabs 以覆盖 Laravel\Nova\ResolveFields 中的 Nova 4 默认面板方法。
- 将 Eminiarts\Tabs\ActionsInTabs 移动到 Eminiaarts\Tabs\Traits\HasActionsInTabs。
- 为标签添加了位置方法,以修复关系标签最后显示的问题。
致谢
横幅是用 https://banners.beyondco.de/ 创建的