clumsy / cms

此包已被废弃,不再维护。未建议替代包。

Laravel 内容管理系统


README

Laravel 白标内容管理系统

Latest Stable Version Latest Unstable Version Codacy Badge SensioLabsInsight

安装

使用 Composer 安装

composer require clumsy/cms

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

Clumsy\CMS\CMSServiceProvider::class,

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

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

发布 Clumsy 配置

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

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

php artisan migrate

最后,发布 Clumsy 的所有公共资源

php artisan clumsy:publish

使用

Clumsy 将创建一个管理区域,用户可以管理资源。在您开始添加资源和路由之前,确保您可以访问它是个好主意。理想情况下,如果您有多个用户,您会创建一个 seeder,在其中一次性注册他们。如果您只想为开发快速启动,可以使用以下内容

php artisan clumsy:user

您将被提示输入电子邮件、姓名、密码以及可选的用户级别。

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

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

创建新资源

将要在管理区域内管理的资源基本上是一个带有一些标准方法和属性的 Eloquent 模型。Clumsy 的大部分功能是通过这些模型方法以及一个标准化的控制器和一种我们称为 Panels 的类来实现的。因为 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 seeder
  • 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} 是您要自定义的资源的实际 Studly Case 名称(例如 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 将遍历一系列文件夹,在假设它们不存在并使用默认设置之前检查覆盖视图文件。作为一般规则,级联包括 操作。域是资源的缩略名,而操作与当前视图中的面板相关(索引、编辑、创建、重新排序)。您还可以拥有本地模板,这些模板在管理区域中的许多资源中是通用的。因此,对于给定的模板,在查看名为 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模板(除非另有说明)

  • index

    • inner-index
      • filter
      • table
        • table-tr
        • table-empty(在没有资源时,代替table-r
      • gallery(代替table
        • gallery-item
          • gallery-caption
      • filter-toggles
      • pagination
  • edit

    • edit-form
      • fields
      • bottom-buttons
    • delete-button
  • edit-nested(编辑具有子资源的资源时;扩展edit

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

  • reorder

    • inner-reorder
      • table-empty(当没有资源时)
    • bottom-buttons

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

Laravel中本地覆盖视图

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

为了发布Clumsy视图

php artisan vendor:publish --provider="Clumsy\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,必须使用它才能进行导入
  • 资源名称现在应该是类似slug的并且是有效的URL组件--不再使用下划线
  • 已删除AdminController属性resource_plural
  • AdminControllers的方法不再接收任意数据
  • 将大多数BaseModel属性切换到Panels
  • 所有属性现在都是驼峰命名
  • 已删除配置设置default-columns
  • 警报系统已更改;现在期望在重定向响应上调用 withAlert 方法,并传递一个关联数组,其中键是警报状态,值是警报消息
  • 不再有活动布尔值,而是 editableInline 输入(在索引类型的 Panels 上定义);此外,模型中的 booleans 方法现在已弃用,转而使用 Laravel 的属性转换
  • BaseModel 中删除了 has_slug 属性,改用 Trait,该 Trait 作用就像属性已经被设置一样
  • “内部视图”术语已更改为“面板类型”