antonioprimera / laravel-web-page
一个可扩展、可翻译和可管理的网页组件
Requires
Requires (Dev)
This package is auto-updated.
Last update: 2024-01-28 14:38:21 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()