适用于 Laravel 的 CMS


README

Laravel 的白色标签 CMS

Latest Stable Version Latest Unstable Version Codacy Badge SensioLabsInsight

安装

使用 Composer 进行安装

composer require clumsy/cms

config/app.php 文件中,将以下内容添加到 providers

Wizclumsy\CMS\CMSServiceProvider::class,

可选地,您可以设置以下别名

'Clumsy' => Wizclumsy\CMS\Facades\Clumsy::class,
'Overseer' => Wizclumsy\CMS\Facades\Overseer::class,
'Shortcode' => Wizclumsy\CMS\Facades\Shortcode::class,

发布 Clumsy 配置

php artisan vendor:publish --provider="Wizclumsy\CMS\CMSServiceProvider" --tag=config

运行迁移以获取管理区域的认证表和媒体管理表

php artisan migrate

最后,发布所有 Clumsy 公共资产

php artisan clumsy:publish

使用说明

Clumsy 将创建一个管理区域,用户可以在此处管理资源。在您开始添加资源和路由之前,确保您有权访问它可能是个好主意。理想情况下,如果您有众多用户,您会创建一个种子器,将它们一次性全部注册。如果您只想为开发环境启动,可以使用以下命令

php artisan clumsy:user

您将需要输入电子邮件、姓名、密码,以及可选的用户级别。

有了您自己的用户,您就可以进入管理区域。默认情况下,这将是在 http://example.com/admin(您可以通过编辑配置中的 authentication-prefix 来配置此设置)。认证成功后,如果您尚未定义一个解析 http://example.com/admin URL 的路由,您将看到一条简单的消息,内容为:[管理员首页] Clumsy 设置正确。

向已认证的管理区域添加路由很简单:任何使用 clumsy 中间件的路由都将自动由 Clumsy 管理。

创建新资源

将在管理区域内管理的资源基本上是一个具有一些标准方法和属性的 Eloquent 模型。Clumsy 的许多功能都是通过这些模型方法以及标准控制器和一种我们称之为 面板 的类来实现的。因为 Clumsy 管理区域可以完全自定义,所以所有这些类都位于您本地应用程序的文件夹中,而不是包中。幸运的是,有一种简单的方法可以一次性创建所有这些对象

php artisan clumsy:resource post

资源名称(例如,本例中的 post)定义了类的名称。上面的命令将创建以下内容

  • App\Post.php 模型
  • App\Http\Controllers\PostsController.php 控制器
  • Panels\Post\Table.php 面板
  • database\migrations\(...)_create_posts_table.php 迁移
  • database\seeds\PostsSeeder.php 种子器
  • database\factories\ModelFactory.php 类中的某些样板代码
  • resources\views\admin\post 文件夹

(上述路径基于默认配置。所有对象命名空间都可以被覆盖,以便资源生成器将它们放在您本地应用程序的正确位置。)

命令输出还将提供资源路由。此时,您的 routes\web.php 可能看起来像这样

<?php

Route::group(['prefix' => 'admin', 'middleware' => ['web', 'clumsy']], function () {
    Route::resource('post', 'PostsController');
});

这意味着,在运行新创建的迁移后,您可以访问 http://example.com/admin/post,并看到 post 资源的索引,然后从中创建、更新和删除条目。

面板:自定义数据和功能

默认情况下,管理员面板的所有功能都是禁用的。索引假定您想显示所有项目,并且存在一个标题列,您只能查看和编辑它。当然,这只是一些默认设置,旨在易于扩展或覆盖。为了实现这一点,Clumsy依赖于一个我们称之为面板的对象,它可以被视为您想要渲染的视图的对象表示。资源的索引由一个Index面板生成,编辑表单由一个Edit面板生成,依此类推。自定义面板位于您的app/Panels/{Resource}文件夹中(除非由配置覆盖),其中{Resource}是您想要定制的资源的实际Pascal大小写名称(例如:app/Panels/Post)。

自定义视图

当在您的views/admin文件夹中可用时,Clumsy会优先使用您本地应用程序的视图,并回退到其默认模板。Clumsy的模板是使用Blade语法的代码片段,故意很小,以便您可以非常细致地覆盖它们。

假设您想覆盖post资源的编辑表单。您不必覆盖整个页面,只需创建一个resources\views\admin\post\fields.blade.php,并将您的HTML输入放置在其中。Clumsy将使用它们创建和编辑表单。如果您的创建表单与编辑表单不同,您可以创建一个resources\views\admin\post\create\fields.blade.php,它将在创建过程中使用。

视图优先级级联

Clumsy的ViewResolver将遍历一系列文件夹,在假定它们不存在并使用默认值之前检查覆盖视图文件。一般来说,级联包括操作。域是资源的slug,而操作与当前视图中的面板相关(索引、编辑、创建、排序)。您还可以拥有在管理区域内对许多资源通用的本地模板。因此,在查看名为post的资源列表时,以下顺序是它将运行的文件,以查看是否应该覆盖主索引视图:

  • admin/post/index/index.blade.php(特定操作和特定域的覆盖)
  • admin/post/index.blade.php(特定域的覆盖)
  • admin/templates/index.blade.php(模板覆盖)

如果找不到这些文件,Clumsy将在其自己的模板文件夹内执行相同的级联(域+操作>域>模板)。

为了清晰起见,假设您想在编辑post资源时在页面标题之后添加一个按钮。有一个名为after-title的模板专门用于此目的,它可以位于这些文件夹中的任何一个,以便Clumsy可以使用它而不是默认模板

  • admin/post/edit/after-title.blade.php(仅当编辑时覆盖)
  • admin/post/after-title.blade.php(在查看post页面时覆盖所有after-title模板)
  • admin/templates/after-title.blade.php(在所有资源中覆盖所有after-title模板)

域无关模板

可以使用Clumsy的控制器和视图轻松构建管理区域。但您也可以选择使用自己的控制器和视图,而不扩展Clumsy,这也可以。不过,为了保持一致性,它假定即使在那些不使用Clumsy代码的“独立”页面上也会显示导航栏,这意味着导航栏是一组域无关模板:如果您想自定义它,请将覆盖放在views/admin文件夹的根目录中。以下是完整的域无关模板列表:

  • navbar-wrapper.blade.php
  • navbar-home-link.blade.php
  • navbar.blade.php
  • navbar-buttons.blade.php

可用模板

以下是Clumsy使用的模板列表以及可以覆盖的模板:

  • master
    • head
      • alert
      • alert-errors(代替alert
      • navbar-wrapper
        • navbar-home-link
        • navbar
        • navbar-buttons
    • breadcrumb
    • page-header
      • title-prepend
      • title-append
      • after-title
    • [...]
    • footer

其中[...]是当前视图中的给定面板的模板,这些模板扩展了master模板(除非另有说明)。

  • 索引

    • 内部索引
      • 筛选器
      • 表格
        • 表格行
        • table-empty(当没有资源时,代替table-r
      • gallery(代替table
        • 相册项
          • 相册标题
      • 筛选器切换
      • 分页
  • 编辑

    • 编辑表单
      • 字段
      • 底部按钮
    • 删除按钮
  • edit-nested(在编辑有子资源的资源时;扩展edit

    • edit-nested-tablist
    • edit-nested-tab-content
  • create(扩展edit

  • 重新排序

    • 内部重新排序
      • table-empty(当没有资源时)
    • 底部按钮

请注意,模板还使用Blade部分,因此您可以通过使用Blade的本地语法来覆盖某些模板,而无需替换每个单独的文件。这两种技术的组合应该为开发者提供几乎无限的可能性来自定义Clumsy的模板。

在Laravel中本地覆盖视图

当然,您也可以通过使用Laravel的本地供应商发布来覆盖所有Clumsy视图。当放置在您的views/vendor文件夹中时,Clumsy的备用模板将从那里加载,并具有高于包视图的优先级。这对于不需要级联优先级处理的视图特别有用,例如身份验证模板。

为了发布Clumsy视图

php artisan vendor:publish --provider="Wizclumsy\CMS\CMSServiceProvider" --tag=views

旧版

  • 为了支持Laravel 5.3,请使用版本0.28.*
  • 为了支持Laravel 5.2,请使用版本0.27.*
  • 为了支持Laravel 5.1,请使用版本0.24.*
  • 为了支持Laravel 4.1或4.2,请使用0.22.*

从0.22升级

  • 用户、组和密码重置数据库结构现在遵循Laravel的默认设置
  • 除了Form::locationForm::delete之外,已移除表单宏
  • 父/子关系现在需要显式声明为方法和返回Laravel Relation对象才能工作
  • 资源视图文件夹现在是单数
  • 外部资源
    • Route::externalResource不再存在;相反,当注册普通资源路由时,应传递一个external选项,例如Route::resource('resource', 'Controller', ['external' => true]);
    • ExternalResource不再是一个要扩展的控制器,而是一个Trait,必须使用它来实现相同的效果
    • Importable现在是一个模型Trait,必须使用它才能实现导入
  • 资源名称现在应该是类似短语的,并且是有效的URL组件 -- 不再使用下划线
  • 已从BaseModel中删除AdminController属性resource_plural
  • AdminControllers的方法不再接收任意数据
  • 将大多数BaseModel属性转换为Panels
  • 所有属性现在都是驼峰式命名
  • 已删除配置设置default-columns
  • 警报系统已更改;现在期望在重定向响应上调用withAlert方法,并传递一个关联数组,其中键是警报状态,值是警报消息
  • 不再有活动布尔值,而是editableInline输入(要在索引类型的Panels上定义);此外,模型中的booleans方法现在已弃用,转而使用Laravel的属性转换
  • BaseModel中删除了has_slug属性,改用作为已设置属性行为的Trait
  • “内部视图”术语已更改至“面板类型”