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:

src/Settings/AnalyticsSettings.php
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

database/migrations/create_analytics_settings.php
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:

src/SettingsTabs/AnalyticsSettingsTabProvider.php
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:

src/AnalyticsServiceProvider.php
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

php
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

Next Steps