marshmallow/nova-tabs

Laravel Nova - 标签页.


README

Nova Tabs, awesome resource tabs for Nova

Latest Version on Github

  1. 要求
  2. 安装
  3. 用法
    1. 标签面板
    2. 关系标签
    3. 在标签中组合字段和关系
    4. 标签中的操作
    5. 编辑视图中的标签
  4. 标签对象
  5. 自定义
    1. 标签
    2. 默认搜索
    3. 显示超过5个条目
  6. 升级到V2

要求

  • php: ^7.4 | ^8
  • laravel/nova: ^4

对于Laravel Nova 3版本,请使用nova-tabs v1。

安装

您可以通过composer在使用Nova的Laravel应用程序中安装此包。

composer require eminiarts/nova-tabs

用法

标签面板

image

您可以将资源的字段分组到标签中,您可以使用数组或标签对象(从1.4.0版本开始):

// in app/Nova/Resource.php

use Eminiarts\Tabs\Traits\HasTabs;
use Eminiarts\Tabs\Tabs;

class User extends Resource
{
    use HasTabs;
    
    public function fields(Request $request)
    {
       return [
   
           new Tabs('Some Title', [
               'Balance'    => [
                   Number::make('Balance', 'balance'),
                   Number::make('Total', 'total'),
               ],
               'Other Info' => [
                   Number::make('Paid To Date', 'paid_to_date'),
               ],
           ]),
       ];
   }
}

// 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')
            ]),
         ]),
      ];
    }
 }

每个实例的第一个标签将被自动选中。

关系标签

image 这些有点过时,因为搜索和创建按钮现在显示在显示实际内容的面板下方,而不是在标签面板中。

// 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')
            ]),

        ];
    }
}

在标签中组合字段和关系

image

image

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 ActionsInTabs; // 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.
                ]),
            ]),
        ];
    }
}

编辑视图中的标签

image

截至Nova 4,标签始终显示在编辑视图中。

标签对象

从v1.4.0版本开始,您可以使用Tab类代替数组来表示您的标签。

自定义

显示超过5个条目

默认情况下,任何HasManyBelongsToManyMorphMany字段在其索引中显示5个条目。您可以使用Nova的内置静态属性$perPageViaRelationship在相应的资源中显示更多(或更少)。

升级到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/ 创建的