panakour / filament-flat-page
这是我包装的 filament-flat-page
v0.0.1
2024-10-02 14:46 UTC
Requires
- php: ^8.2
- filament/filament: ^3.0
- spatie/laravel-package-tools: ^1.15.0
- spatie/valuestore: ^1.3
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^3.2
- pestphp/pest-plugin-arch: ^v3.0.0
- pestphp/pest-plugin-laravel: ^v3.0.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
FilamentFlatPage 是一个用于 Filament 的插件,它允许您轻松创建和管理支持翻译的扁平文件页面。它提供了一种简单的方法,无需数据库即可将可配置的、可翻译的页面添加到您的 Filament 管理面板。
功能
- 轻松创建具有自定义表单的扁平文件页面
- 无需数据库;数据存储在 JSON 文件中
- 内置多语言支持,用于创建可翻译内容
- 无缝集成 Filament 管理面板
- 在管理页面标题中的语言切换器(如果可用,则与 Spatie Translatable 集成)
安装
您可以通过 composer 安装此包
composer require panakour/filament-flat-page
可选,您可以使用以下方式发布配置文件
php artisan vendor:publish --tag="filament-flat-page-config"
这将创建一个 config/filament-flat-page.php 文件,您可以在其中设置首选选项
return [ 'locales' => ['en', 'fr', 'el'], ];
可选,您可以使用以下方式发布视图
php artisan vendor:publish --tag="filament-flat-page-views"
用法
- 创建一个新的页面,该页面扩展了
FlatPage
<?php namespace App\Filament\Pages; use Filament\Forms\Components\Section; use Filament\Forms\Components\Tabs; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Panakour\FilamentFlatPage\Pages\FlatPage; class Settings extends FlatPage { protected static ?string $navigationIcon = 'heroicon-o-cog-6-tooth'; protected static ?string $navigationGroup = 'Settings'; protected static ?string $title = 'Settings'; public function getSubheading(): ?string { return __('Manage your website settings'); } public function getFileName(): string { return 'settings.json'; } protected function getTranslatableFields(): array { return ['site_name', 'site_description', 'contact_address', 'contact_form_title', 'contact_form_content']; } protected function getFlatFilePageForm(): array { return [ Tabs::make('Settings') ->tabs([ Tabs\Tab::make('General') ->icon('heroicon-o-computer-desktop') ->schema([ Section::make('App Settings') ->icon('heroicon-o-computer-desktop') ->schema([ TextInput::make('site_name') ->required() ->hint('Translatable field.') ->hintIcon('heroicon-o-language') ->label('Site Name'), Textarea::make('site_description') ->hint('Translatable field.') ->hintIcon('heroicon-o-language') ->label('Site Description') ->rows(3), ]), ]), Tabs\Tab::make('Contact') ->icon('heroicon-o-envelope') ->schema([ Section::make('Contact Information') ->icon('heroicon-o-envelope') ->schema([ TextInput::make('contact_email') ->email() ->required() ->label('Contact Email'), TextInput::make('contact_phone') ->tel() ->label('Contact Phone'), Textarea::make('contact_address') ->hint('Translatable field.') ->hintIcon('heroicon-o-language') ->label('Address') ->rows(3), ]), Section::make('Contact Form') ->schema([ TextInput::make('contact_form_title') ->hint('Translatable field.') ->hintIcon('heroicon-o-language') ->label('Contact Form Title'), Textarea::make('contact_form_content') ->hint('Translatable field.') ->hintIcon('heroicon-o-language') ->label('Contact Form Content') ->rows(3), ]), ]), Tabs\Tab::make('Social Networks') ->icon('heroicon-o-heart') ->schema([ Section::make('Social Media Links') ->icon('heroicon-o-heart') ->schema([ TextInput::make('facebook') ->url() ->label('Facebook URL'), TextInput::make('twitter') ->url() ->label('Twitter URL'), TextInput::make('instagram') ->url() ->label('Instagram URL'), TextInput::make('linkedin') ->url() ->label('LinkedIn URL'), ]), ]), ]) ->columnSpan('full'), ]; } }
-
在
getFlatFilePageForm()方法中定义您的表单模式。 -
在
getTranslatableFields()方法中指定可翻译字段。 -
在
getFileName()方法中设置用于存储扁平文件数据的文件名。
使用 FlatPage Facade
您可以使用 FlatPage facade 从应用程序的任何地方轻松访问扁平文件数据
use \Panakour\FilamentFlatPage\Facades\FilamentFlatPage; // Get a non-translatable field $contactEmail = FilamentFlatPage::get('settings.json', 'contact_email'); // Get a translatable field (uses current locale) $siteName = FilamentFlatPage::get('settings.json', 'site_name'); // Get a translatable field in a specific locale $siteNameGreek = FilamentFlatPage::get('settings.json', 'site_name', 'el'); // Get all $allSettings = FilamentFlatPage::all('settings.json');
在 Blade 模板中,您可以像这样使用它
<h1>{{ \Panakour\FilamentFlatPage\Facades\FilamentFlatPage::get("page.json", "title") }}</h1> <p>Contact Email: {{ Panakour\FilamentFlatPage\Facades\FilamentFlatPage::get('settings.json', 'contact_email') }}</p> <p>Site Name: {{ Panakour\FilamentFlatPage\Facades\FilamentFlatPage::get('settings.json', 'site_name', 'en') }}</p>
测试
在 FlatPageTest.php 文件中,您可以运行测试以检查测试是否通过
composer test
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
致谢
展示您的支持
如果您喜欢此项目或发现它有帮助,请给它一个 ⭐️!
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。