在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:lightCMS开源软件地址:https://gitee.com/eddy/lightCMS开源软件介绍:LightCMS项目简介
演示站点:LightCMS Demo。登录信息:admin/admin。请勿存储/删除重要数据,数据库会定时重置。
版本库分支说明:
功能点一览后台:
前台:
更多功能待你发现~ 后台预览系统环境
注意事项
系统部署获取代码并安装依赖首先请确保系统已安装好composer。国内用户建议先设置 composer 镜像,避免安装过程缓慢。 cd /data/wwwgit clone git_repository_urlcd lightCMScomposer install 系统配置并初始化设置目录权限: # 此处权限设置为777只是为了演示操作方便,实际只需要给web服务器写入权限即可sudo chmod 777 -R storage/ bootstrap/cache/ 新建一份环境配置,并配置好数据库等相关配置: cp .env.example .env 初始化系统: php artisan migrate --seed 配置Web服务器(此处以 |
事件名 | 事件参数 | 触发时间 | 备注 |
---|---|---|---|
App\Events\ContentCreating | Illuminate\Http\Request $request, App\Model\Admin\Entity $entity | 新增内容前 | |
App\Events\ContentCreated | App\Model\Admin\Content $content, App\Model\Admin\Entity $entity | 新增内容后 | |
App\Events\ContentUpdating | Illuminate\Http\Request $request, App\Model\Admin\Entity $entity | 更新内容前 | |
App\Events\ContentUpdated | Array $id, App\Model\Admin\Entity $entity | 更新内容后 | $id 为更新内容的 ID 合集 |
App\Events\ContentDeleting | Illuminate\Support\Collection $contents, App\Model\Admin\Entity $entity | 删除内容前 | $contents 为被删除内容的 App\Model\Admin\Content 对象合集 |
App\Events\ContentDeleted | Illuminate\Support\Collection $contents, App\Model\Admin\Entity $entity | 删除内容后 | $contents 为被删除内容的 App\Model\Admin\Content 对象合集 |
App\Events\ContentCreateShow | App\Model\Admin\Entity $entity, App\Foundation\ViewData $viewData | 新增内容表单展示前 | 通过调用$viewData的addCss、addJs、addTemplate方法,注入自定义css文件、js文件、模板至新增表单中 |
App\Events\ContentEditShow | App\Model\Admin\Entity $entity, Illuminate\Database\Eloquent\Model $model, App\Foundation\ViewData $viewData | 更新内容表单展示前 | 通过调用$viewData的addCss、addJs、addTemplate方法,注入自定义css文件、js文件、模板至更新表单中 |
App\Events\ContentListShow | int $entityId | 内容列表页展示前 | 一般用于自定义内容列表页展示字段、搜索字段等 |
App\Events\ContentListDataReturning | int $entityId, Illuminate\Contracts\Pagination\Paginator $data | 内容列表页数据接口返回内容前 | 一般用于自定义内容列表页数据接口返回数据 |
对于支持远程搜索的select
表单类型,后端 API 搜索接口需返回的数据格式如下所示。code为0时, 表示正常, 反之异常。
{ "code": 0, "msg": "success", "data": [ {"name":"北京","value":1,"selected":"","disabled":""}, {"name":"上海","value":2,"selected":"","disabled":""}, {"name":"广州","value":3,"selected":"selected","disabled":""}, {"name":"深圳","value":4,"selected":"","disabled":"disabled"}, {"name":"天津","value":5,"selected":"","disabled":""} ]}
对于短文本(input,自动完成)表单类型,后端 API 接口需返回的数据格式如下所示:
{ "suggestions": [ "cms", "cms是什么意思啊", "cms是指的什么意思啊", "cm是什么单位", "沉默是金", "cm是厘米还是分米", "cm是什么", "cm是什么意思啊", "cm是什么意思单位", "cm是什么单位的名称" ]}
对于select
多选类型表单,默认数据库保存值为半角逗号分隔的多个选择值。当你设置字段类型为无符号整型时,数据库会保存多个选择值的求和值(当然前提是选择值都是整型数据)。
通过配置搜索字段,可以很方便的在模型的列表页展示搜索项。如下是一个示例配置:
public static $searchField = [ 'name' => '用户名', // input搜索类型。key 为字段名称,value 为标题 'status' => [ // key 为字段名称,value 为相关配置 'showType' => 'select', // 下拉框选择搜索类型 'searchType' => '=', // 说明字段在数据库的搜索匹配方式,默认为like查询 'title' => '状态', // 标题 'enums' => [ // select下拉搜索项 0 => '禁用', 1 => '启用', ], ], 'recommend' => [ // key 为字段名称,value 为相关配置 'showType' => 'select', // 下拉框选择搜索类型 'searchType' => 'whereRaw', // 对于一些特殊的查询条件,无法通过上述普通的搜索匹配值来实现时,可将此值设置为 whereRaw 'searchCondition' => 'recommend & ? = ?', // 与 whereRaw 配合使用,? 表示查询条件值参数绑定。例:如果用户输入的查询值为 2,则最终生成的 sql 查询条件是: recommend & 2 = 2 'title' => '推荐位', // 标题 'enums' => [ // select下拉搜索项 1 => '推荐位1', 2 => '推荐位2', 4 => '推荐位3', ], ], 'created_at' => [ // key 为字段名称,value 为相关配置 'showType' => 'datetime', // 日期时间搜索类型 'title' => '创建时间' // 标题 ] ];
通过配置列表字段,可以很方便的在模型的列表页展示列表项。如下是一个示例配置:
public static $listField = [ // pid 是列表字段名(不一定是模型数据库表的字段名,只要列表数据接口返回数据包含该字段即可);title、width、sort 等属性参考 layui 的 table 组件表头参数配置即可 'pid' => ['title' => '父ID', 'width' => 80], 'entityName' => ['title' => '模型', 'width' => 100], 'userName' => ['title' => '用户名', 'width' => 100], 'content' => ['title' => '内容', 'width' => 400], 'reply_count' => ['title' => '回复数', 'width' => 80, 'sort' => true], 'like' => ['title' => '喜欢', 'width' => 80, 'sort' => true], 'dislike' => ['title' => '不喜欢', 'width' => 80, 'sort' => true], ];
通过配置列表操作项,可以很方便的在模型的列表页操作列添加自定义链接。如下是一个示例配置:
public static $actionField = [ // chapterUrl 是字段名(不一定是模型数据库表的字段名,只要列表数据接口返回数据包含该字段即可) 'chapterUrl' => ['title' => '章节', 'description' => '当前小说的所有章节'], ];
通过配置排序字段,可以很方便的在模型的列表页自定义数据的排序规则。如下是一个示例配置:
public static $actionField = [ // 数组的键为排序字段名和升序/降序配置(半角逗号分隔),值为前台展示名称 'updated_at,desc' => '更新时间(降序)', 'id,asc' => 'id(升序)', ];
通过配置按钮字段,可以很方便的在模型的列表页自定义操作按钮。如下是一个示例配置:
public static $btnField = [ [ 'title' => 'Google', 'description' => '搜索引擎', 'url' => 'https://www.google.com', 'target' => '_blank', 'class' => '', ], ];
小提示:如果你是自定义模型,建议自定义模型继承
App\Model\Admin\Model
模型,方便对上述配置项进行自定义。
通过监听特定的事件来配置上述属性,可以方便的自定义各种展示效果。
lightCMS
集成了一套简单的日志系统,默认情况下记录后台的所有操作相关信息,具体实现可以参考Log
中间件。
可以利用Laravel
的任务调度来自动清理系统日志。启用任务调度需要在系统的计划任务中添加如下内容:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
可以通过配置log_async_write
项来决定是否启用异步写入日志(默认未启用),异步写入日志需要运行Laravel
的队列处理器:
php artisan queue:work
对于一个普通的模型,管理后台通常有增删改查相关的业务需求。lightCMS
拥有一键生成相关代码的能力,在建好模型的数据库表结构后,可以使用如下artisan
命令生成相关代码:
# config 为模型名称 配置 为模型中文名称php artisan light:basic config 配置
成功执行完成后,会创建如下文件(注意:相关目录需要有写入权限):
routes/auto/
目录下的路由。list
方法,该方法用来返回列表数据。需要注意的是如果列表中的数据不能和数据库字段数据直接对应,则可对数据库字段数据做相应转换,可参考list
方法中的transform
部分。$formNames
属性,用来配置新增/编辑表单请求字段的白名单。此属性必需配置,否则获取不到表单数据。参考 request 对象的 only 方法最后,如果想让生成的路由展示在菜单中,只需在菜单管理页面点击自动更新菜单即可。
如果需要对发表的内容(文章、评论等)进行内容审查,则可直接调用LightCMS
提供的checkSensitiveWords
函数即可。示例如下:
$result = checkSensitiveWords('出售正品枪支');print_r($result);/*[ "售 出售 枪", "正品枪支"]*/
LightCMS中图片默认上传到本地服务器。如果有自定义需求,比如上传到三方云服务器,可参考config/light.php
配置文件中的image_upload
配置项说明,自定义处理类需要实现App\Contracts\ImageUpload
接口,方法的返回值数据结构和系统原方法保持一致即可。
{ "code": 200, "state": "SUCCESS", "msg": "", "url": "xxx"}
做这个说明的主要目的是让开发者了解一些核心功能,方便自定义各类功能开发。毕竟框架是不可能代劳所有事情滴^_
方法名称:App\Repository\Admin\CategoryRepository::tree()
功能说明:
返回分类的树结构信息。数据结构可以参考下图所示:
此数据结构基本包含了分类的所有结构化信息。相关字段的含义也比较清楚,此处只对path
字段做下说明:该字段是指当前分类的所有上级分类链,这样可以很方便的知道某个分类的所有父级分类。比如图中的test
分类的path字段值为[1, 2]
,那么很容易的知道它的父级分类是:游戏 射击
异常:App\Exceptions\InvalidAppDataException
应用场景:在应用程序中抛出该异常,框架会自动跳转到信息提示页面,提示内容为自定义异常内容。一般用于应用运行时错误的页面提示。
App\Repository\Admin\CategoryRepository
类中与分类操作相关的方法:
/** * 获取指定层级的所有分类,根分类层级为 0 * * @param int $level * @param null $tree * @return Collection */public static function levelCategories(int $level = 0, $tree = null): Collection/** * 获取指定分类的所有叶子节点分类,$categoryId 为 0 时获取所有叶子节点分类 * * @param int $categoryId * @param null $tree * @return Collection */public static function leafCategories(int $categoryId = 0, $tree = null): Collection/** * 获取指定分类的所有父级分类,没有父分类时返回空数组 * * @param int $categoryId * @param null $tree * @return array */public static function parentCategories(int $categoryId, $tree = null): array
LightCMS
集成了一套简单的用户注册登录系统,支持微信、QQ、微博三方登录。三方登录相关配置请参考config/light.php
。
有问题可以提 issue ,为项目贡献代码可以提 pull request
Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.
请发表评论