niku-solutions / cart
一个可编码且灵活的自定义购物车管理器,用于Laravel,并支持自定义字段。可扩展,满足您的一切需求。
Requires
- php: ^7.0|^7.1
- illuminate/auth: ^5.2
- illuminate/database: ^5.2
- illuminate/http: ^5.2
- illuminate/support: ^5.2
- niku-solutions/cms: ^3.1
This package is auto-updated.
Last update: 2024-09-17 21:23:47 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
如果您运行以下供应商发布,您将收到一组示例文章类型以使用
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许可证。