Saltar al contenido principal

Clústeres

Introducción​

Los clústeres son una estructura jerárquica en paneles que le permiten agrupar recursos y [páginas personalizadas](páginas personalizadas). Son útiles para organizar su panel en secciones lógicas y pueden ayudar a reducir el tamaño de la barra lateral de su panel.

Cuando se utiliza un clúster, suceden algunas cosas:

  • Se agrega un nuevo elemento de navegación a la navegación, que es un enlace al primer recurso o página del clúster.
  • Los elementos de navegación individuales para los recursos o páginas ya no son visibles en la navegación principal.
  • Se agrega una nueva interfaz de usuario de subnavegación a cada recurso o página del clúster, que contiene los elementos de navegación para los recursos o páginas del clúster.
  • Los recursos y las páginas del clúster obtienen una nueva URL, con el prefijo del nombre del clúster. Si está generando URL para recursos y páginas correctamente, entonces este cambio debería manejarse automáticamente.
  • El nombre del clúster está en la ruta de navegación de todos los recursos y páginas del clúster. Al hacer clic en él, accederá al primer recurso o página del clúster.

Creando un clúster​

Antes de crear su primer clúster, debe indicarle al panel dónde deben ubicarse las clases del clúster. Además de métodos como discoverResources() y ​​discoverPages() en la configuración, puedes usar discoverClusters():

public function panel(Panel $panel): Panel
{
return $panel
// ...
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\Filament\\Clusters');
}

Ahora puede crear un clúster con el comando php artisan make:filament-cluster:

php artisan make:filament-cluster Settings

Esto creará una nueva clase de clúster en el directorio app/Filament/Clusters:

<?php

namespace App\Filament\Clusters\Settings;

use BackedEnum;
use Filament\Clusters\Cluster;
use Filament\Support\Icons\Heroicon;

class SettingsCluster extends Cluster
{
protected static string | BackedEnum | null $navigationIcon = Heroicon::OutlinedSquares2x2;
}

La propiedad $navigationIcon está definida de forma predeterminada, ya que lo más probable es que desee personalizarla de inmediato. Todas las demás propiedades y métodos de navegación también están disponibles para su uso, incluido $navigationLabel, $navigationSort y $navigationGroup. Se utilizan para personalizar el elemento de navegación principal del clúster, de la misma manera que personalizaría el elemento para un recurso o página.

Agregar recursos y páginas a un clúster​

Para agregar recursos y páginas a un clúster, solo necesita definir la propiedad $cluster en la clase de recurso o página y configurarla en la clase de clúster [que creó] (#creando-un-clúster):

use App\Filament\Clusters\Settings;

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

Recomendaciones de estructura de código para paneles que utilizan clústeres​

Cuando utilice clústeres, se recomienda mover todos sus recursos y páginas a un directorio con el mismo nombre que el clúster. Por ejemplo, aquí hay una estructura de directorio para un panel que utiliza un clúster llamado Settings, que contiene un ColorResource y ​​dos páginas personalizadas:

.
+-- Clusters
| +-- Settings
| | +-- SettingsCluster.php
| | +-- Pages
| | | +-- ManageBranding.php
| | | +-- ManageNotifications.php
| | +-- Resources
| | | +-- ColorResource.php
| | | +-- ColorResource
| | | | +-- Pages
| | | | | +-- CreateColor.php
| | | | | +-- EditColor.php
| | | | | +-- ListColors.php

Esta es una recomendación, no un requisito. Puede estructurar su panel como desee, siempre y cuando los recursos y las páginas de su clúster utilicen la propiedad $cluster. Esta es sólo una sugerencia para ayudarle a mantener su panel organizado.

Cuando existe un clúster en tu panel y generas nuevos recursos o páginas con los comandos make:filament-resource o make:filament-page, se te preguntará si deseas crearlos dentro de un directorio de clúster, de acuerdo con estas pautas. Si lo desea, Filament también asignará la propiedad $cluster correcta al recurso o clase de página por usted. Si no lo hace, deberá definir la propiedad $cluster usted mismo.

Establecer la posición de subnavegación para todas las páginas de un grupo​

La subnavegación se representa al inicio de cada página de forma predeterminada. Se puede personalizar por página, pero también puede personalizarlo para todo el clúster a la vez configurando la propiedad $subNavigationPosition. El valor puede ser SubNavigationPosition::Start, SubNavigationPosition::End o SubNavigationPosition::Top para representar la subnavegación como pestañas:

use Filament\Pages\Enums\SubNavigationPosition;

protected static ?SubNavigationPosition $subNavigationPosition = SubNavigationPosition::End;

Personalización de la ruta de navegación del clúster​

El nombre del clúster se encuentra en la ruta de navegación de todos los recursos y páginas del clúster.

Puede personalizar el nombre de la ruta de navegación utilizando la propiedad $clusterBreadcrumb en la clase de clúster:

protected static ?string $clusterBreadcrumb = 'cluster';

Alternativamente, puede usar getClusterBreadcrumb() para definir un nombre de ruta de navegación dinámica:

public static function getClusterBreadcrumb(): string
{
return __('filament/clusters/cluster.name');
}