antonioprimera/laravel-web-page

此包已废弃,不再维护。未建议替代包。

一个可扩展、可翻译和可管理的网页组件

v2.2 2022-03-28 10:23 UTC

README

安装

用法

架构

网页使用组件和块来存储任何可配置的数据。组件用于分组其他组件和块。块用于存储文本、图片URL或其他要显示的数据。

组件

组件是 Eloquent 模型,

通过 Artisan 创建配方

要创建新的配方文件,可以使用以下 artisan 命令

php artisan web-page:make:recipe RecipeName

这将生成一个简单的配方文件,类似于数据库迁移,其中您可以定义要创建在根级别的组件和块列表及其组件和块结构。

如果您想创建复杂的配方,定义组件、别名和块别名,可以在上述 artisan 命令中添加 --complex 标志。

使用配方文件创建/删除组件

一旦您创建了配方文件,其中包含您的网页所需的必要组件和块,您可以使用另一个 artisan 命令在实际数据库中创建文件中定义的 Web 组件作为 Eloquent 模型

php artisan web-page:recipe RecipeName

这将使用配方文件 RecipeName 并运行其 up() 方法来创建您从 recipe() 方法返回的结构。

如果您想撤销从配方文件创建组件,可以在上述命令中使用 --down 标志,这将查找所有创建的 Web 组件和块并将它们删除(类似于 'migrate:rollback' 命令)。这基本上只是运行配方的 down() 方法,如果没有覆盖,它将盲目尝试递归地删除由 up() 方法创建的所有 Eloquent 模型。

ComponentManager

创建组件

方法签名

createComponent(string $description, array $definition = []): ?Component

描述格式如下:“type:name:uid”。类型是必需的,但名称和 uid 是可选的。如果未提供,uid 将是组件名称的 kebab 案。如果未提供,则名称将是组件类型。

示例

  • "Page:Home:home-page" 将创建一个类型为 "Page",名称为 "Home" 且 uid 为 "home-page" 的组件
  • "Page:Home" 将创建一个类型为 "Page",名称为 "Home" 且 uid 为 "home" 的组件
  • "Page" 将创建一个类型为 "Page"、名称为 "Page"、UID 为 "page" 的组件。

必须在配置中描述类型: webComponents.components。每个组件类型必须以类型作为键,并以包含组件定义的数组作为值。如果一个组件必须包含其他组件,则组件列表将以索引数组的形式提供。如果一个组件必须包含一组位,则位列表将以索引数组的形式提供。

配置示例(webComponents.php)

    return [
        'components' => [
            'Page' => [],
            
            'Section' => [],
            
            'Link' => [
                'bits' => [
                    'Label', 'Url'
                ]
            ],
            
            'Picture' => [
                'bits' => [
                    'Source', 'Label'
                ]
            ],
        ],
        
        'bits' => [
            'ShortText' => [
                'editor'   => 'input#text',				//default editor, so it can be omitted
                'rules'    => ['string', 'max:255'],
            ],
            
            'LongText' => [
                'editor' => 'textarea',
                'rules'  => ['string'],					//default rule, so it can be omitted
            ],
            
            //short text aliases
            'Label' => 'alias:ShortText',
            'Title' => 'alias:ShortText|required',
            'Url'   => 'alias:ShortText|rules:url',
            
            //used for file uploads by the admin
            'File' => [
                'editor' => 'input#file',
            ],
        ],
    ];

创建位

方法签名

createBit(string $description): ?Bit

描述格式如下:"type:name:uid"。类型是必须的,但名称和UID是可选的。如果未提供,UID将是位名称的短横线命名法。如果未提供,名称将是位类型。

示例

  • "Title:MainTitle:main-title" 将创建一个类型为 "Title"、名称为 "MainTitle"、UID 为 "main-title" 的位。
  • "Title:PageTitle" 将创建一个类型为 "Title"、名称为 "PageTitle"、UID 为 "page-title" 的位。
  • "Title" 将创建一个类型为 "Title"、名称为 "Title"、UID 为 "title" 的位。

辅助工具

webPage()->getLanguage()

外观

WebPage::getLanguage()