eminiarts/nova-tabs
Fork: 140 Star: 469 (更新于 2024-12-15 12:17:09)
license: 暂无
Language: PHP .
Laravel Nova Tabs Package
最后发布版本: 2.2.3 ( 2022-10-26 03:59:06)
Requirements
-
php: ^7.4 | ^8
-
laravel/nova: ^4
For Laravel Nova Version 3, please use nova-tabs v1 instead.
Installation
You can install the package in to a Laravel app that uses Nova via composer:
composer require eminiarts/nova-tabs
Usage
Tabs Panel
You can group fields of a resource into 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')
]),
]),
];
}
}
The first tab in every Tabs
instance will be auto-selected.
Note: If use non-ascii char as title(ex: chinese), you should define the tab name with ascii char to avoid get empty slug string.
public function fields(Request $request)
{
return [
Tabs::make('Some Title', [
Tab::make('頁籤一', [
Number::make('Balance', 'balance'),
Number::make('Total', 'total'),
])->name('tab-1'),
Tab::make('頁籤二', [
Number::make('Paid To Date', 'paid_to_date')
])->name('tab-2'),
]),
];
}
Relationship Tabs
These are a bit outdated, as the search and create buttons now show within the panel down where the actual content is displayed, not in the tab panel.
// 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')
]),
];
}
}
Combine Fields and Relations in Tabs
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')
]),
];
}
}
Actions in Tabs
If your Model uses the Laravel\Nova\Actions\Actionable
Trait you can put the Actions into a Tab like this:
// 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.
]),
]),
];
}
}
Tabs on Edit View
Tabs are always shown on edit view as of Nova 4 for now.
Tab object
As of v1.4.0 it's possible to use a Tab
class instead of an array to represent your tabs.
Property | Type | Default | Description |
---|---|---|---|
name | string |
null |
The name of the tab, used for the slug. Defaults to the title if not set |
showIf | bool or Closure |
null |
If the result is truthy the tab will be shown. showIf takes priority over showUnless and if neither are set, true is assumed. |
showUnless | bool or Closure |
null |
If the result is falsy the tab will be shown. showIf takes priority over showUnless and if neither are set, true is assumed. |
preload | bool or Closure |
null |
If the result is truthy the tab will be rendered on the initial page load. This may affect initial page load performance, as any requests required by the tab's fields will also be executed. |
bodyClass | string or array |
Empty array | A string or string array of classes to add to the tab's body. This sets the bodyClass property, if you want to append you can use addBodyClass instead. |
Customization
Display more than 5 items
By default, any HasMany
, BelongsToMany
and MorphMany
fields show 5 items in their index. You can use Nova's built-in static property $perPageViaRelationship
on the respective resource to show more (or less).
Tab change Global Event
Nova Tabs emits an event upon tabs loading and the user clicking on a tab, using Nova Event Bus. Developers can listen to the event called nova-tabs-changed
, with 2 parameters as payload: The tab panel name and the tab name itself.
Example of a component that subscribes to this event:
export default {
mounted () {
Nova.$on('nova-tabs-changed', (panel, tab) => {
if (panel === 'Client Details' && tab === 'address') {
this.$nextTick(() => this.map.updateSize())
}
})
}
}
Upgrade to 2.0.0
- Breaking changes
- Removed selectFirstTab, first tab is always displayed first.
- Even if you have other panels, tabs will always show up first and has the toolbar.
- TabsOnEdit is gone and non relational tabs will simply always display on edit.
- I don't use dusk, so didn't check the tests for it either, they might be broken.
- Added Eminiarts\Tabs\Traits\HasTabs to overwrite Nova 4 default panel methods in Laravel\Nova\ResolveFields.
- Moved Eminiarts\Tabs\ActionsInTabs to Eminiaarts\Tabs\Traits\HasActionsInTabs.
- Added position method to Tab to fix relational tabs showing up last.
Credits
Banner was created with https://banners.beyondco.de/
最近版本更新:(数据更新于 2024-09-15 02:09:40)
2022-10-26 03:59:06 2.2.3
2022-10-05 17:19:57 2.2.2
2022-09-08 21:46:33 2.2.1
2022-09-08 18:24:43 2.2.0
2022-06-28 20:58:33 2.1.0
2022-06-18 06:58:08 2.0.9
2022-06-15 01:52:41 2.0.8
2022-05-16 16:28:00 2.0.7
2022-05-13 21:52:41 2.0.6
2022-05-13 19:35:42 2.0.5
主题(topics):
laravel, nova
eminiarts/nova-tabs同语言 PHP最近更新仓库
2024-12-13 19:38:03 coollabsio/coolify
2024-12-13 09:22:46 w7corp/easywechat
2024-12-11 20:15:22 symfony/symfony
2024-11-29 16:49:37 symfony/var-dumper
2024-11-20 23:58:25 laravel/framework
2024-11-20 18:39:23 danielmiessler/SecLists