psagnataf / cms
Laravel的自定义文章类型管理器,具有自定义字段。可扩展,可以根据需要进行动态化。
Requires
- php: ^7.0|^7.1
- illuminate/auth: ^5.2
- illuminate/database: ^5.2
- illuminate/http: ^5.2
- illuminate/support: ^5.2
- dev-master
- 3.2.80
- 3.2.79
- 3.2.78
- 3.2.77
- 3.2.76
- 3.2.75
- 3.2.74
- 3.2.73
- 3.2.72
- 3.2.71
- 3.2.70
- 3.2.69
- 3.2.68
- 3.2.67
- 3.2.66
- 3.2.65
- 3.2.64
- 3.2.63
- 3.2.62
- 3.2.61
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.9
- 3.1.8
- 3.1.7
- 3.1.6
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0
- 2.7.0
- 2.6.45
- 2.6.21
- 2.6.7
- 2.6.6
- 2.6.5
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.01
- 2.6
- 2.5.991
- 2.5.99
- 2.5.98
- 2.5.97
- 2.5.96
- 2.5.95
- 2.5.94
- 2.5.93
- 2.5.92
- 2.5.91
- 2.5.9
- 2.5.8
- 2.5.7
- 2.5.6
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.4
- 2.3.3
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.9
- 2.2.8
- 2.2.7
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.8
- 2.0.3
- 2.0.1
- 2.0.0
- 1.2.2
- 1.2.1
- 1.2
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dev
This package is not auto-updated.
Last update: 2024-10-01 10:12:37 UTC
README
一个基于API的自定义字段可编程文章管理器,用于Laravel。可扩展,可以根据需要自定义。根据API请求,您将以您构建前端的方式接收文章类型配置。我们将负责CRUD功能,支持分类、媒体管理和文章元数据。
我们在项目中使用我们的包来去除基本文章管理的需求。现在,我们可以为所有类型的文章数据设置高级仪表板功能,例如页面、文章、产品以及您需要的任何文章类型或分类。您可以随时添加或删除自定义字段,而无需接触数据库,因为该包会自动为您处理数据,并在显示编辑表单时显示数据。
我们正在使用Vue.js和Axios开发一个解耦的前端包,这使得在Laravel项目或单页应用程序中与API交互成为可能。
功能
- 自定义文章类型
- 配置页面
- 如分类之类的分类法
- 具有上传功能和管理功能的媒体管理器
- 重复的自定义字段组
- 自定义字段
- 自定义字段的验证规则
- 基于模板选择的条件自定义字段
- 基于用户是否登录的简单默认用户认证
- 允许用户仅查看他们自己的文章
- 菜单管理支持,您需要我们的前端包来实现这一点。
安装
通过composer安装包
composer require psagnataf/cms
将以下类注册到config/app.php中的'providers'数组中
Niku\Cms\CmsServiceProvider::class,
将以下中间件注册到路由文件中,以允许您的文章类型和配置组。您不需要做任何其他事情,因为我们使用它来保护文章管理器的API路由。
use Niku\Cms\Http\Middlewares\WhitelistPostTypesMiddleware; use Niku\Cms\Http\Middlewares\WhitelistConfigGroupsMiddleware; protected $routeMiddleware = [ ... 'posttypes' => WhitelistPostTypesMiddleware::class, 'groups' => WhitelistConfigGroupsMiddleware::class, ... ];
您需要运行以下artisan命令以发布所需的配置文件以注册您的文章类型。
php artisan vendor:publish --tag=niku-config
如果您运行以下vendor publish,您将收到一组示例文章类型以供使用
php artisan vendor:publish --tag=niku-posttypes
通过运行以下命令迁移数据库表
php artisan migrate
用法
在使用文章类型之前,您需要将所需的自定义字段和模板白名单和设置在config/niku-cms.php文件中。
return [ 'post_types' => [ // Default 'attachment' => App\Cms\PostTypes\Attachment::class, // CMS 'page' => App\Cms\PostTypes\Pages::class, 'posts' => App\Cms\PostTypes\Pages::class, 'posts-category' => App\Cms\PostTypes\PostsCategory::class, ], 'config_types' => [ // Registering the single config page 'defaultsettings' => App\Cms\ConfigTypes\DefaultSettings::class, ];
您可以通过在路由文件中粘贴以下方法来注册路由。您可以像通常那样添加中间件,例如使用认证等来保护路由。注册的路由中的post_type是可变的,但通过方法中的参数进行保护,因此默认情况下不启用API请求。
要启用API路由,您需要注册您想要使用的文章类型的名称,如下所示在'register_post_types'数组键下。在注册文章类型时,您在config/niku-cms.php文件中填写数组键的名称。有关配置的更多信息,请继续阅读。
例如,如果您有两个用户角色需要与同一文章类型通信,但需要不同的权限,您可以创建两个配置文件,其中普通用户账户只能查看他们自己的文章,而超级管理员可以查看所有用户的文章。您通过命名config/niku-cms.php的唯一数组键并创建两个配置文件来实现这一点,其中'$identifier'指向相同的'post_type'。
Niku\Cms\Cms::postTypeRoutes([ 'register_post_types' => [ 'posts', 'superadminposts', ], ]); // Registering the routes for config pages Niku\Cms\Cms::postTypeRoutes([ 'register_groups' => [ 'defaultsettings', ], ]);
对于每个已注册的帖子类型,您可以设置默认数据和自定义字段。您可以在插入的自定义字段的验证数组键中添加验证。所有Laravel验证规则都将得到支持,因为它只会将其传递给验证器类。
namespace App\Cms\PostTypes; use Niku\Cms\Http\NikuPosts; class Pages extends NikuPosts { // The label of the custom post type public $label = 'Pages'; // Custom post type identifer public $identifier = 'page'; // Users can only view their own posts when this is set to true public $userCanOnlySeeHisOwnPosts = false; public $config = [ ]; // Setting up the template structure public $templates = [ 'default' => [ 'customFields' => [ 'post_content' => [ 'component' => 'niku-cms-text-customfield', 'label' => 'Text', 'value' => '', 'validation' => 'required', ], 'author' => [ 'component' => 'niku-cms-text-customfield', 'label' => 'Author', 'validation' => 'required', ], // more custom fields ], ], ]; }
您想根据模板更改显示的自定义字段吗?您可以添加多个视图,这些视图在前端可供最终用户选择,并更改可见的自定义字段。
public $templates = [ 'default' => [ 'label' => 'Default page', 'template' => 'default', 'customFields' => [ 'text' => [ 'component' => 'niku-cms-text-customfield', 'label' => 'Text', 'value' => '', 'validation' => 'required', ] ] ], 'sidebar' => [ 'label' => 'Sidebar layout', 'template' => 'sidebar-layout', 'customFields' => [ 'text' => [ 'component' => 'niku-cms-text-customfield', 'label' => 'Text', 'value' => '', 'validation' => 'required', ] ] ], ];
博客
如果您想有一个类似博客的方法,您可以执行以下操作。
在您的 routes/web.php 中启用以下类型。
Route::get('blog', 'BlogController@blog'); Route::get('blog/{slug}', 'BlogController@singleBlog');
接下来,在控制器中启用所需的方法。
public function blog() { $posts = Posts::where([ ['status', '=', '1'], ['post_type', '=', 'post'] ])->with('postmeta')->get(); return view('static.blog', compact('posts')); }
然后,在您的视图中执行以下操作。这种语法将在未来被重构成更流畅的形式,但现在它是有效的。
@foreach($posts as $post) <div class="row"> @if(!empty($post->getMeta('image'))) <?php $image = json_decode($post->getMeta('image')); $image = $image->url; ?> <div class="col-md-3"> <img src="{{ $image }}" class="img-responsive"> </div> @endif <div class="col-md-8"> <h2>{{ $post->post_title }}</h2> <p>{!! $post->getMeta('excerpt') !!}</p> <br/> <a class="btn btn-default" href="/blog/{{ $post->post_name }}">Read more</a> </div> </div> @endforeach
切换模板
如果您在 config/niku-cms.php 中启用了多个帖子类型模板,您将在后端看到出现一个选项来切换模板。当您选择了一个模板后,您可以通过这种方式在前端切换视图。
@extends('static.layouts.' . $posts->template)
API
要检索您的帖子类型的基本结构,您可以请求以下帖子API,其中值是0。这意味着我们正在创建一个新的帖子。此请求的结果将为您提供您在配置文件中插入的结构。使用这些数据,您可以构建您页面的前端以自动创建创建表单的输入字段。
您将在创建新帖子项的页面初始化时触发此API。(/superadmin/pages/create)。
POST /your-prefix/{post_type}/show/0
{
"post": {
"template": "default"
},
"postmeta": [],
"templates": {
"default": {
"customFields": {
"text": {
"component": "niku-cms-text-customfield",
"label": "Text",
"value": "",
"validation": "required",
"id": "text"
},
"PostMultiselect": {
"component": "niku-cms-posttype-multiselect",
"label": "Post multiselect",
"post_type": [
"page"
],
"validation": "required",
"id": "PostMultiselect"
},
"periods": {
"component": "niku-cms-repeater-customfield",
"label": "Perioden",
"validation": "required",
"customFields": {
"label": {
"component": "niku-cms-text-customfield",
"label": "Label",
"value": "",
"validation": ""
},
"boolean": {
"component": "niku-cms-boolean-customfield",
"label": "Boolean button",
"value": "",
"validation": ""
}
},
"id": "periods"
}
}
}
},
"config": []
}
扩展自定义字段和定义自己的
您可以通过使用已注册的组件标识符来创建自己的自定义字段,以标识需要显示哪个Vue组件。此信息将在请求以下API时附加到API请求;
'text' => [ 'component' => 'niku-cms-text-customfield', 'label' => 'Text', 'value' => '', 'validation' => 'required', ],
使用在帖子类型配置中定义的键注册您的组件。
Vue.component('niku-cms-text-customfield', require('./components/customFields/text.vue'));
例如,可以使用以下代码结构
<template> <div class="form-group"> <label for="post_name" class="col-sm-3 control-label">{{ data.label }}:</label> <div class="col-sm-9"> <input type="text" name="{{ data.id }}" v-model="input" class="form-control" value="{{ data.value }}"> </div> </div> </template> <script> export default { data () { return { 'input': '', } }, props: { 'data': '' }, ready () { } } </script>
安全漏洞
如果您发现任何安全漏洞,请直接发送电子邮件至 Nick Kuijpers,邮箱地址为 n.kuijpers@niku-solutions.nl。
许可
MIT许可(MIT)。有关更多信息,请参阅MIT许可。