功能特性
使用手册
更新记录
QQ群:99563402
ANQIQI
STUDIO
特性
手册
更新
# QIQICMS使用手册 版本:1.0.0 | 开发者:安奇奇工作室 | www.anqiqi.com --- ## **一、系统概述** ### 1.1 特性 - **轻量简洁:**核心文件小于10个文件,让每行代码了然于心。 - **PHP原生**:函数式PHP原生开发,没有抽象类,功能实现直观易懂,上手容易。 - **高度自由**:没有定式标签规则,模板既是项目文件,根据项目需求自由扩展功能。 - **模型驱动**:自定义模型(支持字段类型:文本/图片/文件/关系表等常用字类型) - **权限控制**:角色权限控制(前后台均可自定义角色,自由组合权限控制) - **多端应用**:可作为网站、APP等Web应用的数据控制台 ### 1.2 文件目录结构 > **/cache --- 缓存文件目录** > > **/install --- 系统初始安装文件** > |----index.php 初始安装 > |----qiqicms.sql 初始SQL数据文件 > |----/URL-rewrite/ URL规则文件及IIS插件安装包 > > **/common --- 公共函数、扩展文件及API接口文件** > **|----/api API扩展** > |------/qiniu 七牛组件库 > |------qiniu.php 七牛上传组件 > |------upload.php 上传接口文件 > |------verify.php 验证码 > |------filezone.php 用户图片及附件空间 > |------pv.php 统计调用文件 > **|----/inc 引用文件** > |------404.php 默认错误页 > |------close.php 公共页脚处理 > |------function.php 全局函数库 > |------qrcode.php 二维码组件phpQRcode > |--config.php 系统配置文件(系统生成) > |--dbc.php 数据库配置文件(系统生成) > > **/public --- 公共资源目录** > **|----/css** > |----default.css 默认前台风格,样式文件 > |----system.css 浅色后台风格,样式文件 > |----system-dark.css 深色后台风格,样式文件 > > **|----/editor** > |----...kindeditor富文本编辑器 > > **|----/editormd** > |----...editor.md编辑器 > > **|----/file** > |----/up 前后台用户附件目录 > > **|----/font** > |----SyNormal.otf 通用字体文件思源黑体 > |----verify.ttf 验证码字体文件 > > **|----/img** > |----...项目图片文件 > **|----/js** > |----echarts.min.js 图表数据echarts组件 > |----jquery.js JS框架jquery > |----jquery-ui.min.js jquery扩展UI组件 > > **|----/layui** > |----...layui框架文件 > > **/system --- 后台管理文件** > |----content.php 内容编辑功能页 > |----end.php 页脚标签闭合页 > |----head.php 页头标签起始页 > |----list.php 信息数据管理列表 > |----login.php 后台登录页 > |----main.php 后台首页 > |----model.php 模型管理页 > |----node.php 节点配置页 > |----role.php 权限控制页 > |----set.php 系统设置页 > |----sys.php 后台页面文件注册 > > **/template --- 项目模板文件** > |----/default 默认前台模板目录 > |----home.php 首页模板文件 > |----... > > **index.php --- 路由入口文件** ### 1.3 数据表结构 > **pre_admin (管理账号表)** > 字段:自增id 账号:admin_name 密码:admin_password 角色ID:admin_roleid 备忘便签:admin_notes > > **pre_config (配置表)** > 字段:自增ID 分类class 名称name 标识ename 表单类型type 提示语tip 数据处理标记data 设置值value 高级项sys 写入文件file 排序sort > > **pre_field (字段表)** > 字段:自增ID 模型ID:model_id 字段标识:field_sign 字段名:field_ename 表单类型field_type 列表开关:field_list 必填开关:field_must 表单隐藏:field_hide 前台开关:field_show 字段默认值:field_value 预设选项:field_opt 列表参数:field_listset 个性样式:field_style 表单提示语:field_tip 列表排序:list_sort 表单排序:sort > > **pre_model (模型表)** > 字段:自增ID 模型名称:model_name 数据表名:model_tab 模型类型:model_type 模型扩展:model_ext 列表类型:model_list 排序:sort > > **pre_node (分类节点表)** > 字段:自增ID 子节点:pid 关联模型ID:model_id 节点名:node_name 节点值:node_value 模型扩展数据:node_ext 节点备注:node_notes 节点连接:node_link 添加按钮的名:node_addbtn 树结构展开状态:spread 系统节点:sys 排序:sort > > **pre_pv_ext (pv统计表,模型扩展生成)** > 字段:自增ID 节点ID:node_id(模型新建表自带) 统计日期:pv_date PV计数:pv 统计终端:type > > **pre_role (角色表)** > 字段:自增ID 角色分类:role_class 角色名称:role_name 权限ID集合:rule_id 节点ID集合:node_id > > **pre_rule (权限表)** > 字段:自增ID 子ID:pid 权限名称:rule_name 隶属角色分类:role_class 排序sort ### 1.4 运行机制 ```mermaid graph TD A[前端访问] --> |入口文件index.php|B[加载配置文件及函数库] B--> C[建立MySQLi连接] C --> D{路由解析} D --> E[载入模板] E --> F[判断缓存写入或读取] F --> G[界面呈现] G --> H[关闭数据连接] ``` --- ## **二、运行环境** ### 2.1 基础要求 | 组件 | 版本 | 配置说明 | | --------- | ---------------------- | ------------------------- | | PHP | 7.2+ | 开启常用扩展,无特定依赖 | | MySQL | 5.6+ | InnoDB引擎,字符集utf8mb4 | | Web服务器 | 可选Nginx、Apache或IIS | 需配置相应URL规则 | ### 2.2 安装步骤 - **克隆代码库或下载压缩包** ```bash #克隆代码仓库 git clone 正在筹备发布中... ``` - **Web服务器配置** ``` php ###Nginx配置### error_page 404 /common/404.php; location ~ ^/(common|system|template)/ { deny all; return 404; } location / { try_files $uri $uri/ /index.php?do=$uri&$args; } ``` ```nginx ###Apache配置### ErrorDocument 404 /common/404.php RewriteEngine On RewriteRule ^(common|system|template)/ - [R=404,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?do=$1&$args [L,QSA] ``` ``` php ###IIS配置URL规则### #下载安装url-rewrite | https://www.iis.net/downloads/microsoft/url-rewrite #导入URL规则,新建.htaccess(规则内容与Apache相同) #IIS环境首次安装QIQICMS,需要注意文件目录可写操作 ``` - **初始化安装** 浏览器打开项目要地址,根据提示填写相关数据库参数,执行即可完成初始安装~ ## **三、核心功能说明** ### 3.1 自定义模型 - **进入模型管理** 后台路径:`QIQICMS后台 > 模型管理` - **创建新模型** 模型命名 > 添加字段草拟模型结构>执行建表>完成 - **字段属性** > **表单类型:**单行文本、多行文本、单选按钮、多选按钮、下拉框、单图上传、批量传图、日期时间 > HTML富文本编辑器、Markdown编辑器、小数值、整数值、标签、密码框、虚拟字段、颜色选择器、 > 计划表(支持拖拽排序及自定义选项说明的多选框) > 数据类型根据表单项自动生成:详见后台>模型管理中的【数据字典速查】 > **字段sign:**数据表中实际存在的名称,英文字符 > **字段名称:**界面显示名称,一般为中文字符 > **默认数值:**表单初始自带值,主要用于文本类表单项 > **提示语:**表单中对该项的使用提示说明 > **样式代码:**可直接写入style样式定义,表单项的宽度及个性化样式 > **选项内容:**除了用于选项类表单,定义选项值(一行一个选项名|选项值)以为,在虚拟字段及计划表中有特殊用途,详见之后的开发示例 > **列表参数:** ``` php 列宽|位置|排序|统计|模板|编辑(定义字段在列表中的属性,列宽-数值|位置-left/center/right|排序-0/1|统计-0/1|模板-ename|编辑-0/1) 统计开启:需在模型中先开启统计; 模板:参见layui模板自定义扩展,目前对字段sign为:title,url,img,可使用三种模板:linktpl、urltpl、imgtpl(点击:打开编辑|图片预览|链接跳转) 编辑:开启后,点击列表单元格,可直接修改数据 ``` - **模型属性** > **模型名称**:中文名称 > **数据表**:表前缀+数据表名+ext (模型生成的数据表,自带_ext后缀,易于数据库时直观辨识) > **模型分类**:分为内容模型和数据模型,仅用于区分模型用途,无特殊定义 > **列表参数**:统计|默认列宽 (数据管理列表显示统计,默认列宽设定200,例:1|200) > **扩展**: ``` php 每行定义一个扩展项,扩张项在关联节点显示(比如为模型关联节点”我的博客“添加一个图片项,示列:栏目封面|imgfm) 字母扩展标识由img开头为单图上传、txt开头为文本域,其余字符默认为文本框 扩展项内容会以,扩张标识名|扩张内容 形式存入节点数据表中node_ext字段 ``` - **字段开关** > **列表**:开启后列表页显示该字段 > **必填**:开启后增改内容时,必填项验证 > **隐藏**:开启后,内容管理的表单中不见(用于一些关联字段,仅限表单隐藏,列表隐藏请使用列表开关) > **前台**:开启后,前台表单及列表可见(列表开启情况下) - **字段排序** > **表单排序**:表单排序,可在内容编辑时,点击右上角排序,进行拖拽调整 > **列表排序**:模型管理中,调整列表排序,可改变内容管理列表的列顺序 - **克隆与复制模型** > **克隆模型**:按照现有模型结构新建模型,不带数据 > **复制模型**:创建现有模型副本,带有数据,可用于备份或调试开发 > **复制信息**:内容编辑时的复制功能,可快速生成占位调试数据,方便开发调试 ### 3.2 权限控制系统 - **角色权限分配** 后台路径:`QIQICMS后台 > 权限控制` 控制粒度:建议保留系统默认权限外,根据项目自定义扩张 (使用ID作为权限标识,只为加快项目实现,减少权限命名纠结的时间) - **访问控制** ```php //前台使用uauth()函数,鉴权控制访问 if(uauth(1,2)){//参数1为,后台自定义的权限ID,参数2为节点ID,如不对节点鉴权,可缺省参数2 echo "鉴权成功,显示内容"; }else{ echo "无权查看内容" } //后台鉴权函数为auth(),使用方法一致 ``` ### 3.3 节点配置 - **创建节点** 后台路径:`QIQICMS后台 > 节点配置` 节点为无极树形分类结构,根据项目需要自行配置即可 - **节点属性** > **关联模型:**关联模型后,该节点内容将保存到相应模型数据表(新建模型会自带一个node_id字段,用于储存关联节点ID) > **上级节点:**用于修改节点隶属关系(不影响关联模型,可自由调整,内容转移仅限于同模型转移) > **自定义项:**节点值、节点连接,无固定用途可自定义,按钮别名用于定义,该节点数据列表页,""添加按钮""的别称。 > **备注:**节点描述、或备忘说明 > **扩展项:**如关联的模型,设置了扩展项,则在此设置 - **节点排序** 节点数据表带有排序字段sort,在此拖拽排序后,开发中调用时可排序显示 ### 3.4 系统设置 - **设置项管理** 后台路径:`QIQICMS后台 > 系统设置 > 设置项管理` - **新增设置项:** > **名称:**设置项中文名称(对应config表的name字段) > **标识:**属性标识,英文字符(对应config表的ename字段) > **表单说明:**设置项表单提示语 > **归类:**设置项隶属选项卡 (分类可选值变换频率不高,如需更改请自行动手,修改config表及系统目录中set.php内对应数组值) > **表单:**支持选择文本框、文本域、开关项和图片项(基本满足常规参数定义) > **类型:**可选字符串、密钥值(表单显示隐藏中间部分)、及数值(生成的配置文件中为数值型) > **特性:**高级设置(对应权限控制,可对终端用户隐藏不必要设置项),全局常量(参数写入config文件,全局可调用) - **选项卡调整** 系统默认非高级选项,仅显示“网站设置”选项卡,如需增加需改动set.php相关代码 建议将终端用户可调项,归类为“网站设置”,减少代码改动。 - **系统设置项说明** > **网站设置:**一些网站常用选项,调用名参见后台设置项管理 > **附件设置:**附件储存目录(附件按照用户分别储存)、单附件大小限制(限于运行环境最大值之内) > **水印设置:** 支持文字或图片(png\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\jpg)水印,可设置位置及透明度,全局开关 > **七牛云:**开启后,附件直推七牛云,储存空间根目录 > **短信设置:**接入短信宝API服务 > **缓存设置:**缓存全局开关,缓存时间/分钟,缓存白名单(列入不需要缓存的,路由一段字符URI[1]) > **其他设置:**H5路由、后台路由、API路由(特定路由地址均可自行定义),模板方案目录名、PV统计显示天数,深色模式(后台风格切换) ## **四、开发手册** ### 4.1 开始实践 - **Demo1-向世界问好!** 在template/default/目录下新建demo1.php (初始系统自带demo,如自行新建,注意编码问题,建议使用开发工具新建,避免中文乱码) ```php "; echo '网站名称:'.SITE_NAME."
"; echo '我是路由1段:'.$uri[1]."
"; echo date('Y-m-d h:i:s',time()); //在浏览器输入:http://localhost/demo1 ?> ``` 通过demo1实践,可了解QIQICMS模板简单写法及路由逻辑,你还可尝试在后台开启缓存,了解一下缓存机制。 - **Demo-2数据查询** 在template/default/目录下新建demo2.php ```php ";//同样返回了网站名称和设置项名称 //使用Rs()查看config表有多少行数据记录 $toatl=Rs('config',' ','#row');//获取全表数据行数,所以这里条件语句为空 echo "config表有".$toatl."条记录"."
"; //使用Rsa()读取十条config表中网站设置相关信息 $config=Rsa('config','where class="site" limit 10'); echo "循环输出10条记录
"; while($row=mysqli_fetch_assoc($config)){ echo '循环输出:'.$row['name'].":".$row['value']."
"; } ?> ``` 通过demo2的体验,你已掌握QIQICMS的数据读取方式 - **数据增、删、改**:在template/default/目录下新建demo3.php ``` php '我是标题'.randabc(2), //randabc() 是qiqicms内置的生成随机字母函数 'content' => '我是内容'.randabc(4), 'addtime' => time() ]; $act=Add('test_ext',$data);//执行数据添加,Add()函数接收参数1为数据表名,参数2为数据数组,数组键值对应数据表字段 if($act){ echo '成功~添加了一条数据到test_ext表'; }else{ echo '数据添加失败~'; } } //查看一下数据库,或者后台测试模型中数据ID,接下来演示一下删除一条数据 if($id && $ac=='del'){ $act=Del('test_ext',$id);//执行删除操作,Del()接收参数1依然为数据表名,参数2为数据ID if($act){ echo '成功~删除了test_ext表里ID为'.$id.'的数据'; }else{ echo '数据删除失败~'; } } //尝试在浏览器输入http://localhost/demo3?ac=del&id=数据表tesx_ext中随意一个ID //接下来演示一下修改一条数据 if($id && $ac=='up'){ $data=[ 'title' => '我是标题修改演示'.randabc(2), //randabc() 是qiqicms内置的生成随机字母函数 'content' => '我是内容修改演示'.randabc(4), 'addtime' => time() ]; $act=Upd('test_ext',$data,'id',$id);//执行修改操作,Upd()接收参数1依然为数据表名,参数2为要更新的数据数组,参数3为匹配的字段,参数4为匹配的值 if($act){ echo '成功~修改了test_ext表里ID为'.$id.'的数据'; }else{ echo '数据无变动~'; } } //尝试在浏览器输入http://localhost/demo3?ac=up&id=数据表tesx_ext中随意一个ID ?> ``` 通过以上三个简单Demo的演示,相信只要简单入门PHP语法,就可以开始搭建自己的项目了,更多实例可以先参见默认模板的写法。 ### 4.2 常用说明示例 - **模板命名与路由说明** (QIQICMS没有模板标签概念,自定义函数添加到common/function.php中,模板中即可调用) ``` text /路由根目录默认加载 home.php 首页模板 /路由1段加载 youtest.php 频道首页模板 /路由2段加载 youtest-list.php 栏目模板或称列表模板 /路由2段 包含.html且1段为youtest 则加载 youtest-show.php 详情页模板 #示例说明,default目录为默认模板方案,可自行新增后台切换 www.youname.com/ 加载 /template/default/home.php www.youname.com/blog 加载 /template/default/blog.php (echo uri[1]; //blog) www.youname.com/blog/it 加载 /template/default/blog-list.php (echo uri[2]; //it 获得it字符,即可编写业务逻辑) www.youname.com/blog/1.html 加载 /template/default/blog-show.php (echo $id; //1 获得ID为1) 所有URL都支持附加get参数传输 #二级域名绑定模板目录 oa.youname.com 加载 /template/default/oa/home.php (在oa目录进行oa项目开发即可,其余规则同上) oa.youname.com/login 加载 /template/default/oa/login.php #手机版模板目录设置 新建与手机版二级域名或系统设置H5路由同名目录,解析规则同上 ``` - **虚拟字段使用说明** ``` text 字段中新增的虚拟字段,不会在实体表中创建字段 主要用于数据联查,在字段属性“选项内容”中写入联查声明 声明格式:联查数据表名|联查字段|匹配当前字段|返回值的字段名 举例:在用户列表新增一个虚拟字段,联查用户等级表并返回用户等级名称 声明示例:userclass_ext|user_lv|lv|class_name userclass_ext是用户等级表,user_lv是表中等级数值,class_name是表中等级名称,lv是用户表中的等级值 完成联查声明后,开启该字段的列表开关即可显示 ``` - **如何扩展表单类型** ``` text 在/common/function.php 函数fieldtype中添加新项目 在/system/model.php 数组fieldtypearr中添加新项目 在/system/content.php 表单循环中,添加对应名称项目 ``` - **新增后台功能模块** ``` text 在/system 新建文件,路由遵循全局规则,建议页面按照如下结构编写
前端main区域界面代码,top与side部分代码已自动加载
``` - **开发环境更到线上项目步骤** ``` php 项目已上线运行,数据实时在变化,新功能在本地开发完成,同步到线上步骤 1、做好线上项目文件及数据备份; 2、将开发环境中,数据库导出sql文件 3、修改SQL文件 如有新建模型 保留【新模型】的SQL更新语句,自增ID设为NULL SET @model_id LAST_INSERT_ID();将最新模型自增ID赋值为SQL变量 保留【新字段】的SQL更新语句,将现有model_id改为变量@model_id,自增ID设为NULL 保留【新节点】的SQL更新语句,将现有model_id改为变量@model_id,自增ID设为NULL(如功能模块中有写死的nodeID,需要核对与线上项目节点ID是否冲突) 4、复制相关文件到目标项目 ``` - **多语种实现方式** ``` php 路由1段中“en-us、zh-cn”等由横线连接的字符,用于分辨语种,路由2段遵循基本路由规则,在页面中获取$uri[1]进行逻辑判断 后台添加内容用上箭头字符'^'分割多语种,比如标题分为中英两种,“我是标题^I am the title”,可分割更多语种 前台调用时候使用strlang()函数,根据语种ID获取,语种ID自行定义,内容分割顺序从左到右从1开始计数 比如定义英文语种ID为2并调用英文标题,示例如下: 正文内容可能包含'^',strlang($content,$langid,'^diy^')可传入第三个参数,自定义分割字符 ``` 文档陆续更新中... ## **五、性能与安全** ### 5.1 性能优化 - 数据库索引优化 - 开启缓存(提示:勿忘将数据交互页路由1段,加入缓存白名单) - 开启七牛云,储存项目附件 - 高并发项目(需加入负载均衡、引入Redis、将数据主从读写分离) ### 5.2 安全建议 - 安全起见,确保web服务器URL规则配置正确。 - 修改默认模板default目录名,模板目录中用于引用的文件,命名为"_top.php",加入前缀前台不可直接访问 - 修改后台默认路由地址 - 合理划分账号权限,对终端用户规避不必要设置及字段权限 --- ## **六、附录** ### 6.1 常见问题 - 首次安装提示目录权限问题 (网站根目录没有写入权限) ### 6.2 版权说明 - 个人非商业用途,保留版权信息,使用QIQICMS永久免费。 - 如需定制,请联系安奇奇工作室(www.anqiqi.com)获得商业服务支持。 --- ## **七、技术交流** - **官网地址**: https://cms.anqiqi.com - **开发者QQ群**: 99563402 ---