haringsrob/filament-page-builder

Filament的可视化页面构建器


README

Latest Version on Packagist run-tests Fix PHP code style issuesTotal Downloads

使用此包,您将拥有一个新的Filament字段(类似于Builder),但它具有可视UI和动态类型。

请注意,这是一个预生产包,许多功能可能仍然存在bug,并且可能无法与其他包(如翻译)一起工作。

方法和流程在第一次发布之前可能会改变,因此如果您使用它,请注意,Composer更新可能会破坏它。

如果您遇到问题,请提供pull request。

查看演示

Simple demo

安装

您可以通过composer安装此包

composer require sevendays/filament-page-builder

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --tag="filament-page-builder-migrations"
php artisan migrate

您可以使用以下命令发布配置文件(目前没有配置)

php artisan vendor:publish --tag="filament-page-builder-config"

可选地,您可以使用以下命令发布视图

php artisan vendor:publish --tag="filament-page-builder-views"

这是已发布配置文件的内容

return [
];

用法

Filament页面构建器是一个自定义的Filament字段,它在上面的Builder字段上增加了功能。

13-11-2023 预览现在可以通过配置进行选择。

  • 预览可能会干扰块内配置的表单
  • 预览将所有块字段设置为响应式,以进行“实时”预览部分

如果您同意,您可以通过以下方式启用预览

return [
    'enablePreview' => true,
];

要使用此功能,请根据Filament文档创建一个模型和资源,然后执行以下操作

1. 生成一个块

您可以使用以下命令生成一个块

php artisan make:page-builder-block DemoBlock

这将创建2个文件

app/Filament/Blocks/DemoBlock.php:这是您定义表单字段和渲染视图的地方。resources/views/filament/blocks/demo-block.blade.php:这是您的块应该如何渲染。

默认生成器仅提供了一个'title'字段。

注意:所有字段默认可翻译。但是,您可以通过添加以下方法并使用字段ID来具有共享字段

public static function getSharedFields(): array
{
    return ['show'];
}

public function form(): array
{
    return [
        TextInput::make('title'),
        Toggle::make('show')
    ];
}

2. 将合约和特性添加到您的模型中

为了保存块,您需要将Blockable接口和HasBlocks特性添加到您的模型中。

<?php

namespace App\Models;

use Sevendays\FilamentPageBuilder\Models\Contracts\Blockable;
use Sevendays\FilamentPageBuilder\Models\Traits\HasBlocks;
use Illuminate\Database\Eloquent\Model;

class Page extends Model implements Blockable
{
    use HasBlocks;

    protected $fillable = [
        'title'
    ];
}

3. 将字段添加到您的资源表单中

在您的资源表单中,我们现在可以添加字段

<?php
use Sevendays\FilamentPageBuilder\Forms\Components\BlockEditor;
use App\Filament\Blocks\DemoBlock;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            BlockEditor::make('blocks')
                ->blocks([ // You can add more blocks here.
                    DemoBlock::class,
                ])
                ->renderInView('blocks.preview'), // Optional: To render the preview in a different view.
        ]);
}

如果一切顺利,您现在应该在页面上拥有块构建器。不要忘记运行迁移。

4. 前端渲染

目前还没有很多工具,但基本的渲染工作如下

@foreach($page->blocks as $block)
    {!! \Sevendays\FilamentPageBuilder\Facades\BlockRenderer::renderBlock($block) !!}
@endforeach

$page是具有块的模型。

测试

尚未完成。

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件