Introduction
Clusters are a hierarchical structure in panels that allow you to group resources and custom pages together. They are useful for organizing your panel into logical sections, and can help reduce the size of your panel’s sidebar. When using a cluster, a few things happen:- A new navigation item is added to the navigation, which is a link to the first resource or page in the cluster.
- The individual navigation items for the resources or pages are no longer visible in the main navigation.
- A new sub-navigation UI is added to each resource or page in the cluster, which contains the navigation items for the resources or pages in the cluster.
- Resources and pages in the cluster get a new URL, prefixed with the name of the cluster. If you are generating URLs to resources and pages correctly, then this change should be handled for you automatically.
- The cluster’s name is in the breadcrumbs of all resources and pages in the cluster. When clicking it, you are taken to the first resource or page in the cluster.
Creating a cluster
Before creating your first cluster, you must tell the panel where cluster classes should be located. Alongside methods likediscoverResources() and discoverPages() in the configuration, you can use discoverClusters():
php artisan make:filament-cluster command:
app/Filament/Clusters directory:
$navigationIcon property is defined by default since you will most likely want to customize this immediately. All other navigation properties and methods are also available to use, including $navigationLabel, $navigationSort and $navigationGroup. These are used to customize the cluster’s main navigation item, in the same way you would customize the item for a resource or page.
Adding resources and pages to a cluster
To add resources and pages to a cluster, you just need to define the$cluster property on the resource or page class, and set it to the cluster class you created:
Code structure recommendations for panels using clusters
When using clusters, it is recommended that you move all of your resources and pages into a directory with the same name as the cluster. For example, here is a directory structure for a panel that uses a cluster calledSettings, containing a ColorResource and two custom pages:
$cluster property. This is just a suggestion to help you keep your panel organized.
When a cluster exists in your panel, and you generate new resources or pages with the make:filament-resource or make:filament-page commands, you will be asked if you want to create them inside a cluster directory, according to these guidelines. If you choose to, then Filament will also assign the correct $cluster property to the resource or page class for you. If you do not, you will need to define the $cluster property yourself.
Setting the sub-navigation position for all pages in a cluster
The sub-navigation is rendered at the start of each page by default. It can be customized per-page, but you can also customize it for the entire cluster at once by setting the$subNavigationPosition property. The value may be SubNavigationPosition::Start, SubNavigationPosition::End, or SubNavigationPosition::Top to render the sub-navigation as tabs:
Customizing the cluster breadcrumb
The cluster’s name is in the breadcrumbs of all resources and pages in the cluster. You may customize the breadcrumb name using the$clusterBreadcrumb property in the cluster class:
getClusterBreadcrumb() to define a dynamic breadcrumb name:
Removing the sub navigation from a cluster
By default, all resources and pages in a cluster will show the sub-navigation. If you want to remove the sub-navigation from all resources and pages in a cluster, you can set the$shouldRegisterSubNavigation property to false in the cluster class:
shouldRegisterSubNavigation() method to define dynamic behavior: