devonab/filament-easy-footer
Add a customizable footer to your Filament admin with minimal setup. Configure position, custom text, logo + link, extra links, top border, optional GitHub version and page load time, enable/disable globally, and hide it on specific pages.
composer require devonab/filament-easy-footer:^2.0
AppServiceProvider or Filament panel provider:
use Devonab\FilamentEasyFooter\EasyFooterPlugin;
public function register(): void
{
Filament::serving(function () {
FilamentPanel::register(EasyFooterPlugin::make());
});
}
php artisan vendor:publish --tag="filament-easy-footer-config"
Add a basic footer with your app name (from .env or config) to the default panels::footer position:
EasyFooterPlugin::make()
->footerEnabled() // Optional (enabled by default)
Custom Footer Position Use render hooks for flexible placement:
EasyFooterPlugin::make()
->withFooterPosition('sidebar') // Options: 'footer', 'sidebar', 'sidebar.footer'
Dynamic Content Combine static and dynamic elements (e.g., load time + GitHub version):
EasyFooterPlugin::make()
->withLoadTime('Page loaded in ')
->withGithub(showLogo: true, showUrl: true)
Conditional Rendering Hide from specific pages (e.g., auth pages):
EasyFooterPlugin::make()
->hiddenFromPagesEnabled()
->hiddenFromPages(['admin/login', 'admin/forgot-password'])
Theming Integration Extend your custom theme by sourcing the plugin’s views:
/* theme.css */
@source '../../../../vendor/devonab/filament-easy-footer/resources/views/**/*';
withLogo() for branded footers, passing null for optional parameters (e.g., link/text).withLinks(), structured as ['title' => '...', 'url' => '...'].Livewire\HtmlString for rich text in withSentence() (e.g., <strong>Custom</strong> Footer).Missing Theme Configuration
@source directive is added to theme.css and run npm run build.GitHub Token Requirements
read-only permissions on "Contents".github.token in config/filament-easy-footer.php.Render Hook Conflicts
sidebar positions may overlap with Filament’s default sidebar content.sidebar vs. sidebar.footer) and adjust CSS if needed.Caching Quirks
cache_ttl isn’t updated.php artisan cache:clear) or adjust github.cache_ttl in config.renderHooks to verify footer placement:
Filament::registerRenderHook('panels::footer', fn () => view('filament-easy-footer::footer'));
php artisan vendor:publish --tag="filament-easy-footer-views"
Then modify resources/views/vendor/filament-easy-footer/footer.blade.php.Custom Views Extend the footer by copying the published view and adding your own sections (e.g., legal disclaimers).
Dynamic Data
Fetch real-time data (e.g., server stats) via a custom withSentence() closure:
->withSentence(fn () => "Users: " . User::count())
Conditional Logic
Use Filament’s authorize() or middleware to toggle the footer dynamically:
->footerEnabled(fn () => auth()->check())
Multi-Tenant Support Override config per tenant by binding the config to a service provider:
config(['filament-easy-footer.app_name' => tenant()->name]);
How can I help you explore Laravel packages today?