niku-solutions / 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 auto-updated.
Last update: 2024-09-06 00:10:05 UTC
README
一个基于 API 的可编写帖子管理器,用于 Laravel,具有自定义字段。可根据您的需求扩展。基于 API 请求,您将以一种可以构建您的前端的方式接收帖子类型配置。我们将负责 CRUD 功能,支持分类、媒体管理和帖子元数据。
我们将在我们的项目中使用我们的包来消除基本帖子管理需求。我们现在可以为所有类型的帖子数据(如页面、帖子、产品等)设置高级仪表板功能。您可以在不接触数据库的情况下快速添加或删除自定义字段,因为该包会自动为您保存数据并在显示编辑表单时显示它。
我们正在使用 Vue.js 和 Axios 开发一个解耦的前端包,这使得在 Laravel 项目或单页应用程序中与 API 交互成为可能。
特性
- 自定义帖子类型
- 配置页面
- 分类等分类法
- 带有上传功能和管理的媒体管理器
- 可重复的自定义字段组
- 自定义字段
- 自定义字段的验证规则
- 基于模板选择的条件自定义字段
- 基于用户是否登录的简单默认用户身份验证
- 允许用户仅查看他们自己的帖子
- 菜单管理支持,您需要我们的前端包来实现。
安装
通过 composer 安装包
composer require niku-solutions/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 许可协议。