pinkwhalenl / jellyfish
Requires
- graham-campbell/markdown: ^11.0
- illuminate/support: ~6.0
- intervention/image: ^2.5
README
最简单且动态的Laravel CMS,内置语言、用户和媒体管理。使用 模块
,您可以根据预配置的字段(例如 文本
、多行文本框
、下拉列表
等)构建自己的后端页面。所有字段都将存储在 jelly_types
表的 JSON 列中。每个页面都将存储在 jelly_content
表中。在前端,您可以使用 Jelly
静态类查询它们,例如:Jelly::Module('categories')->get()
。
概览
要求
- Laravel 5.7.*(或更高版本)
- PHP 7.1(或更高版本)
- 预配置的数据库(支持 JSON 列)
升级指南
不再需要 data()
来从文档获取字段数据。 现在您可以这样做 $result->data->title
。您还可以在 jelly_content
表的 data
列中查询。请更新您的代码,在下一个版本中,将删除 data()
函数。
安装
- 运行
composer require pinkwhalenl/jellyfish
。 - 确保您的
.env
文件已配置(数据库)。 - 发布配置、CSS、JS 和字体文件
php artisan vendor:publish
。 - 运行新的迁移
php artisan migrate
。 - 转到
https://{YOURDOMAIN}}.com/backend
。 - 使用默认凭据登录;
info@pinkwhale.io
&secret
。
动态内容
模块就像MySQL数据库表一样,您将在 模块
中定义列以结构化您的数据并将它们分组。在这个平台的管理员侧,您可以将 字段
添加到您的JSON文件中,并通过告诉每个字段要做什么,您将获得一个用户友好的表单。当您完成 模块
后,您可以从导航栏开始添加一些文档。
添加模块
- 点击右上角的用户名。
- 点击
admin - 模块
。 - 点击
创建新模块
。 - 添加一个
标题
,并选择您需要的选项。 - 从头开始,并添加以下代码。
{
"fields":
[
]
}
- 使用下面的字段填充字段部分。
[注意] 添加模块时的默认复选框
您可以选择两个复选框。 sort
& published_at
这两个与 JSON 数据分开,并在 jelly_content
表中拥有自己的列。您也可以通过标准的 eloquent 方式查询它们。
// Example with published_date. Jelly::Module('example')->orderBy('published_at','desc')->get();
可用字段
在每个字段中,您仍然可以使用键 validation
管理从Laravel带来的验证规则。还有一些函数可以指定数据如何存储在您的数据库中。每个 字段
都有自己的选项。因此,请参阅下面的文档。
文本
当您使用文本字段作为标题时,您还可以添加 "slug":true
。系统将自动添加字段 {name}_slug
。注意;一旦文档已保存,就不能更改此字段!
{ "title":"Title of document", "placeholder":"eg. This is a title", "type":"text", "name":"title", "slug":true, "validation":"required" }
Markdown
{ "title":"Content", "placeholder":"...", "type":"markdown", "name":"content", "required":true, "validation":"required" }
选择选项
{ "title": "Select", "placeholder": "Pick a options", "type": "select", "name": "language", "options": [ "Nederlands", "Engels" ] },
其他模块的项目
此字段将列出其他模块及其选定的列。文档的唯一ID将存储在此字段中。
{ "title": "Written By", "type": "module", "name": "writtenby", "required": true, "function": { "module": "employees", "field": "name" }, "validation": "required" },
图片
此字段允许您从媒体库中选择图片。
{ "title":"Image", "placeholder":"...", "type":"media", "name":"picture", "required":true, "validation":"required" }
附件
此字段允许您从媒体库中选择文件。
{ "title":"attachment", "placeholder":"...", "type":"media", "name":"pdf", "required":false, "function": ["attachment"] }
前端使用
当您存储文档时,例如基于所选的 模块
。所有内容都将存储在 data
列表中。此列填充了模块的 JSON 值。
从所选模块获取文档
这只是 Laravel,我们只完成了前几个步骤。所以使用静态函数 Jelly::Module('MODULENAME')>{Query}
。在后台,我们使用 Content
模型并通过类型查询 ->where('type','MODALNAME')
。
// example 1. @foreach(Jelly::Module('articles')->get() as $article) <li>{{var_dump($article->data)}}</li> @endforeach // example 2. $content = Jelly::Module('articles')->where('data->slug',$slug)->firstOrFail(); // example 3. $content = Jelly:Module('articles')->where('data->code','7465')->first(); echo $content->created_at; echo $content->data->title;
打印图片
Jellyfish 支持广泛的图像和图像缓存功能。
<!-- Where 'picture' is field's name.) --> <img src="{{route('img',[$item->picture,'size=100x100'])}}"/>
使用Markdown字段
在使用 markdown 字段时,请添加 Markdown::convertToHtml()
函数将 markdown 转换为 HTML 格式。
{!! Markdown::convertToHtml($data->data()->content) !!}
存储表单
CMS 存储并允许您管理您的表单数据。下面是示例;
// ExampleController.php use JellyForms; public function store(){ // Validate request()->validate([ 'name' => 'required', ]); // Store JellyFroms::put('contact_form',request()->all()); // Store -> Alternatice JellyForms::put('contact_form',[ 'name' => request()->name, 'email' => request()->email ]); return redirect()->route('ROUTENAME')->with('alert','success'); }
身份验证
您可以通过输入 JellyAuth::Check()
检查用户是否已登录,此函数返回 true/false
。您还可以通过使用 User()
函数获取所有用户信息,例如:JellyAuth::User()
。当您想知道用户是否有 admin-access
时,请输入:JellyAuth::IsAdmin()
,这也返回 true/false
。
示例
// Show button is signed in. @if(JellyAuth::Check()) <ul> <li><a href="#">Click here..</a></li> </ul> @endif // Check user is an Admin. @if(JellyAuth::IsAdmin()) <li><a href="#">[Admin] - Debtors..</a></li> @endif // Get Userdata. JellyAuth::User()->id // Get unique ID JellyAuth::User()->name // Get name JellyAuth::User()->email // Get email
翻译
默认情况下,jellyfish 将识别 Laravel 的运行语言。您也可以强制将其设置为另一种语言。
{{Trans::get('home.title')}} // Most basic. {{Trans::get('home.title','nl')}} // With language. {{Trans::get('home.title','nl','lorem:10')}} // With language + Lorem Ipsum. {{Trans::get('home.title',null,'lorem:10')}} // No language.
在开发环境中
当您想要从 vendor
文件夹更改此包时,请输入:composer require pinkwhalenl/jellyfish dev-master --prefer-source