Settings Tabs
Add your own tabs to the FrankenCMS Settings page to give users a central place to configure your package or application features.
Create a Settings Class
First, create a settings class using spatie/laravel-settings:
namespace YourVendor\Analytics\Settings;
use Spatie\LaravelSettings\Settings;
class AnalyticsSettings extends Settings
{
public string $tracking_id = '';
public bool $enable_tracking = true;
public bool $anonymize_ip = true;
public static function group(): string
{
return 'your_analytics';
}
}
Create the Migration
use Spatie\LaravelSettings\Migrations\SettingsMigration;
return new class extends SettingsMigration
{
public function up(): void
{
$this->migrator->add('your_analytics.tracking_id', '');
$this->migrator->add('your_analytics.enable_tracking', true);
$this->migrator->add('your_analytics.anonymize_ip', true);
}
};
Create a Tab Provider
Implement SettingsTabProviderInterface and return a Filament Tab from
the getTab() method. Use statePath() to bind the tab's form fields to
your settings group:
namespace YourVendor\Analytics\SettingsTabs;
use Filament\Forms\Components\Section;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Schemas\Components\Tabs\Tab;
use FrankenCms\Contracts\SettingsTabProviderInterface;
use YourVendor\Analytics\Settings\AnalyticsSettings;
class AnalyticsSettingsTabProvider implements SettingsTabProviderInterface
{
public function getTab(): Tab
{
return Tab::make('Analytics')
->icon('heroicon-o-chart-bar')
->statePath(AnalyticsSettings::group())
->schema([
Section::make('Google Analytics')
->schema([
TextInput::make('tracking_id')
->label('Tracking ID')
->placeholder('G-XXXXXXXXXX'),
Toggle::make('enable_tracking')
->label('Enable Tracking'),
Toggle::make('anonymize_ip')
->label('Anonymize IP'),
]),
]);
}
public function getSettingsClass(): string
{
return AnalyticsSettings::class;
}
public function getOrder(): int
{
return 100;
}
public function getTabKey(): string
{
return 'analytics';
}
}
Register the Tab
In your service provider, register the tab through the SettingsTabService:
use FrankenCms\Services\SettingsTabService;
use YourVendor\Analytics\SettingsTabs\AnalyticsSettingsTabProvider;
public function boot(): void
{
$settingsTabService = $this->app->make(SettingsTabService::class);
$settingsTabService->registerTab(new AnalyticsSettingsTabProvider);
}
Accessing Settings
use YourVendor\Analytics\Settings\AnalyticsSettings;
$settings = app(AnalyticsSettings::class);
$trackingId = $settings->tracking_id;
$isEnabled = $settings->enable_tracking;
Interface Reference
The SettingsTabProviderInterface requires these methods:
| Method | Return Type | Description |
|---|---|---|
getTab() |
Tab | A Filament Tab with your form schema |
getSettingsClass() |
string | Fully qualified Spatie Settings class name |
getOrder() |
int | Tab position — lower numbers appear first |
getTabKey() |
string | Unique identifier for the tab |