web-id/nova-tabs-multiple-relation

Laravel Nova - 标签页.

v1.2.4 2020-10-19 11:32 UTC

README

Latest Version on Github

  1. 安装
  2. 使用
    1. 标签面板
    2. 带工具栏的标签面板
    3. 关系标签页
    4. 在标签页中组合字段和关系
    5. 标签页中的操作
    6. 编辑视图中的标签页
  3. 自定义
  4. 升级到 1.0.0

安装

您可以通过 composer 将包安装到使用 Nova 的 Laravel 应用程序中

composer require eminiarts/nova-tabs

使用

标签面板

image

您可以将资源字段分组到标签页中。

// in app/Nova/Resource.php

use Eminiarts\Tabs\Tabs;

public function fields()
{
    return [

        new Tabs('Tabs', [
            'Balance'    => [
                Number::make('Balance', 'balance'),
                Number::make('Total', 'total'),
            ],
            'Other Info' => [
                Number::make('Paid To Date', 'paid_to_date'),
            ],
        ]),

    ];
}

带工具栏的标签页

如果您只使用标签页而没有其他默认面板,可以将 withToolbar 设置为 true

image

// in app/Nova/Resource.php

use Eminiarts\Tabs\Tabs;

public function fields(Request $request)
    {
        return [

            (new Tabs('Contact Details', [
                'Address' => [
                    ID::make('Id', 'id')->rules('required'),
                    Text::make('Email', 'email')->sortable(),
                    Text::make('Phone', 'phone')->sortable(),
                ],

                'Relations' => [
                    BelongsTo::make('User'),
                    MorphTo::make('Contactable')->types([
                        Client::class,
                        Invoice::class,
                    ]),
                ]
            ]))->withToolbar(),

        ];
    }

关系标签页

image

// in app/Nova/Resource.php

use Eminiarts\Tabs\Tabs;

class User extends Resource
{
    public function fields(Request $request)
    {
        return [
            
           new Tabs('Relations', [
                HasMany::make('Invoices'),
                HasMany::make('Notes'),
                HasMany::make('Contacts')
            ]),

        ];
    }

}

在标签页中组合字段和关系

image

image

use Eminiarts\Tabs\Tabs;

public function fields(Request $request)
{
    return [

        (new Tabs(__('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\ActionsInTabs; // Add this Trait
use Laravel\Nova\Actions\ActionResource; // Import the Resource

class Client extends Resource
{
    use ActionsInTabs; // Use this Trait

    public function fields(Request $request)
    {
        return [
            
            (new Tabs('Client Custom Details', [
                'Address'  => [
                    ID::make('Id', 'id'),
                    Text::make('Name', 'name')->hideFromDetail(),
                ],
                'Invoices' => [
                    HasMany::make('Invoices'),
                ],
                'Actions'  => [
                    MorphMany::make(__('Actions'), 'actions', ActionResource::class), // Acc Actions whererver you like.
                ],
            ]))->withToolbar(),

        ];
    }
}

编辑视图中的标签页

image

如果您想在编辑视图中显示标签页,请在使用资源的类中添加 TabsOnEdit 特性。

// in app/Nova/Resource.php

use Eminiarts\Tabs\Tabs;
use Eminiarts\Tabs\TabsOnEdit; // Add this Trait

class Client extends Resource
{
    use TabsOnEdit; // Use this Trait
    //...
}

自定义

默认情况下,标签组件将搜索输入和创建按钮移动到标签页。如果您有很多标签页,可以将它们移回到自己的行

// in app/Nova/Resource.php

use Eminiarts\Tabs\Tabs;

class User extends Resource
{

    public function fields(Request $request)
    {
        return [
            
            (new Tabs('Relations', [
                HasMany::make('Invoices')
            ]))->defaultSearch(true),

        ];
    }
}

设置 ->defaultSearch(true) 以恢复默认设置。

image

升级到 1.0.0

感谢 dkulyk/nova-tabs,这个包变得更加简单。

  • 不再需要使用特性。从您的资源中移除所有 AvailableTabFields 特性。
  • 现在一切都在 Tabs 中。不再有 TabsPanel。移除所有 TabsPanels 并根据此 README 调整您的字段。