panakour/filament-flat-page

这是我包装的 filament-flat-page

v0.0.1 2024-10-02 14:46 UTC

This package is auto-updated.

Last update: 2024-10-03 10:00:21 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

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"

用法

  1. 创建一个新的页面,该页面扩展了 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'),
        ];
    }

}
  1. getFlatFilePageForm() 方法中定义您的表单模式。

  2. getTranslatableFields() 方法中指定可翻译字段。

  3. 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)。请参阅 许可证文件 以获取更多信息。