Skip to content

Overview ​

Clusters in AureusERP help organize resources and custom pages within the FilamentPHP panel. They allow logical grouping of related sections, reducing sidebar clutter and enhancing navigation.

When using clusters ​

  • A new navigation item links to the first resource or page within the cluster.
  • Individual navigation items are removed from the main sidebar.
  • A sub-navigation UI is added within the cluster.
  • URLs of resources and pages are prefixed with the cluster name.
  • Breadcrumbs display the cluster name, linking to the first resource or page.

Creating a Cluster ​

To enable clusters in AureusERP, configure the panel to discover cluster classes. Add the following in your panel configuration:

php
    public function register(Panel $panel): void
    {
        $panel
            ->when($panel->getId() == 'admin', function (Panel $panel) {
                $panel
                    ->discoverResources(
                        in: __DIR__.'/Filament/Admin/Resources',
                        for: 'Webkul\\Blog\\Filament\\Admin\\Resources'
                    )
                    ->discoverPages(
                        in: __DIR__.'/Filament/Admin/Pages',
                        for: 'Webkul\\Blog\\Filament\\Admin\\Pages'
                    )
                    // below method is responsible to discover the clusters form blog plugin.
                    ->discoverClusters(
                        in: __DIR__.'/Filament/Admin/Clusters',
                        for: 'Webkul\\Blog\\Filament\\Admin\\Clusters'
                    )
                    ->discoverWidgets(
                        in: __DIR__.'/Filament/Admin/Widgets',
                        for: 'Webkul\\Blog\\Filament\\Admin\\Widgets'
                    );
            });
    }

Now, generate a cluster using:

sh
php artisan make:filament-cluster Posts

This creates a Posts cluster in Webkul\Blog\Filament\Admin\Clusters:

php
<?php

namespace Webkul\Blog\Filament\Admin\Clusters;

use BackedEnum;
use Filament\Clusters\Cluster;
use UnitEnum;
use Webkul\Support\Enums\NavigationGroup;

class Posts extends Cluster
{
    protected static ?string $slug = 'blog/posts';

    protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-document-text';

    protected static ?int $navigationSort = 2;

    public static function getNavigationLabel(): string
    {
        return __('Posts');
    }

    public static function getNavigationGroup(): string|UnitEnum
    {
        return NavigationGroup::Website;
    }
}

You can customize the navigation using $navigationLabel, $navigationSort, and $navigationGroup. Note that in Filament 5 the $navigationIcon property is typed string|BackedEnum|null, and getNavigationGroup() returns string|UnitEnum. AureusERP plugins group their navigation using the shared Webkul\Support\Enums\NavigationGroup enum so that all plugins appear under consistent groups in the sidebar.

Adding Resources and Pages to a Cluster ​

To assign a resource or page to a cluster, set the $cluster property:

php
use Webkul\Blog\Filament\Admin\Clusters\Posts;

protected static ?string $cluster = Posts::class;

For better organization, store related resources and pages inside a directory matching the cluster name:

+-- Clusters
|   +-- Posts.php
|   +-- Posts
|   |   +-- Resources
|   |   |   +-- PostResource.php
|   |   |   +-- PostResource
|   |   |   |   +-- Pages
|   |   |   |   |   +-- CreatePost.php
|   |   |   |   |   +-- EditPost.php
|   |   |   |   |   +-- ListPosts.php

More Information ​

For more details, refer to the FilamentPHP Clusters Documentation.

Released under the MIT License.