本文档阅读对象为有php基础的开发者,如何搭建网站运行环境等内容不再赘述。
本后台框架基于thinkphp8 + layui开发
thinkphp8开发手册: https://doc.thinkphp.cn/v8_0/preface.html
layui官方文档:https://layui.dev/docs/2/
后台演示:http://v2.xnadmin.cn
登录账号:admin
登录密码:123456
1027226338
db.sql
文件.env
文件修改伪静态,修改好后重启Web服务器
Nginx伪静态规则
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }
Apache伪静态规则
Options +FollowSymlinks -Indexes RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─admin 后台应用目录 │ │ ├─controller 控制器目录 │ │ ├─validate 验证器目录 │ │ └─view 视图目录 │ ├─common 公共目录 │ │ ├─controller 公共类Base存放目录 │ │ └─model 公共模型目录,CURL生成的Model都存放在这个目录 │ ├─index 前台应用目录 │ │ └─controller 公共类Base存放目录 │ │ │ ├─common.php 公共函数文件 │ └─ ... │ │ ├─config 配置目录 │ ├─cfg 系统配置文件目录,后台“系统配置”生成的配置文件存在这里 │ ├─app.php 应用配置 │ ├─cache.php 缓存配置 │ ├─console.php 控制台配置 │ ├─cookie.php Cookie配置 │ ├─database.php 数据库配置 │ ├─filesystem.php 文件磁盘配置 │ ├─lang.php 多语言配置 │ ├─log.php 日志配置 │ ├─middleware.php 中间件配置 │ ├─route.php URL和路由配置 │ ├─session.php Session配置 │ ├─trace.php Trace配置 │ └─view.php 视图配置 │ ├─view 视图目录 ├─route 路由定义目录 │ ├─route.php 路由定义文件 │ └─ ... │ ├─public WEB目录(对外访问目录) │ ├─static 静态资源目录 │ │ ├─admin 后台静态资源目录 │ │ └─ ... │ │ ├─index.php 入口文件 │ ├─router.php 快速测试文件 │ ├─nginx.htaccess 用于nginx的重写 │ └─.htaccess 用于apache的重写 │ ├─extend 扩展类库目录 │ ├─lib 第三方类库,比如oss、短信SDK、支付类等类库 │ └─utils 系统用到的类库 ├─runtime 应用的运行时目录(可写,可定制) ├─vendor Composer类库目录 ├─.env 环境变量文件 APP_DEBUG开关、数据库地址链接在此文件修改 ├─.example.env 环境变量示例文件 ├─composer.json composer 定义文件 ├─LICENSE.txt 授权说明文件 ├─README.md README 文件 ├─think 命令行入口文件
手动安装:从小牛官网下载压缩包,解压后按目录覆盖、导入数据表
插件及应用不强制命名唯一标识,数据表也不强制使用标识前缀,所以安装前先检查是否会和原有模块命名重复。
系统封装了一些方法函数,方便调用,文件路径 app/common.php
函数名称 | 描述 |
---|---|
xn_file_size | 字节数Byte转换为KB、MB、GB、TB |
xn_encrypt | 密码加密函数 |
xn_add_admin_log | 写入管理员操作日志 |
xn_cfg | 获取后台“系统配置”的参数,如:xn_cfg('base.logo') |
xn_upload_one | 上传单图的组件 |
xn_upload_multi | 上传多图的组件 |
函数名(必填参数) | 说明 | 完整参数 | 演示 |
---|---|---|---|
xn_msg(msg) | msg提示 | xn_msg(内容, 秒) | |
xn_alert(msg) | alert弹出框 | xn_alert(内容, icon数字, 自定义按钮文字) | |
xn_alert_reload(msg) | alert弹出框,点击确定按钮后刷新页面 | xn_alert_reload(内容, icon数字, 自定义按钮文字) | |
xn_alert_gourl(msg,url) | alert弹出框,点击确定按钮调整到指定URL | xn_alert_gourl(内容, 网址URL, 自定义按钮文字) |
操作 | 样式名称 | 说明 | 参数 | 演示 |
---|---|---|---|---|
弹窗 | .xn_open | 打开一个弹窗页面,<a> 标签加上 class='xn_open' |
href:弹窗链接地址(必须) title:窗口标题,非必须 data-width:窗口宽度(需带单位:px或%),非必须 data-height:窗口高度(需带单位:px或%),非必须 代码示例: <a href="https://www.baidu.com" data-width="600px" data-height="450px" class="xn_open" title="这是演示的"> URL弹窗演示 </a> |
URL弹窗演示 |
ajax提交表单 | .xn_ajax | 在 <form> 标签加上class='xn_ajax' |
action: 需加在form里(必须) method:使用post方式提交(必须) data-type:如是弹窗打开的表单页面,需要在form标签里加上 data-type="open",请求成功后将关闭窗口,刷新父iframe页面 <div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list"> <form action="" method="post" class="xn_ajax" data-type="open"> <div class="layui-form-item"> <label class="layui-form-label">操作名</label> <div class="layui-input-block"> <input type="text" name="title" placeholder="操作名" autocomplete="off" class="layui-input" value=""> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button type="submit" class="layui-btn">保存</button> </div> </div> </form> </div> |
|
删除前提示 | .xn_delete | 在 <a> 标签加上 class='delete' |
href:弹窗链接地址(必须) title:窗口标题,非必须 <a href="?delete" class="xn_delete" title="确定要删除XXX吗?"> 删除 </a> |
删除提示演示 |
生成的配置文件在config/cfg
文件夹内
通过xn_cfg
函数快速获取,如xn_cfg('base.sitename')
找到控制器文件 app/admin/controller/Config.php
在index
方法找到如下代码并添加上'sms' => '短信配置'
选项,如下:
$items = [ 'base' => '基础配置', //key对应模版名称以及配置文件名 value为标题名称 'upload' => '上传配置', 'sms' => '短信配置', ];
找到目录app/admin/view/config/include
新建一个模版,模版名称为sms.html
模版结构大致如下,请根据自己的需求更改
<form action="{:request()->url()}" method="post" class="xn_ajax"> <!--增加配置项需要加对应的名称--> <input type="hidden" name="type" value="sms" /> <div class="layui-row"> <div class="layui-col-xs6"> <div class="layui-form" wid100="" lay-filter=""> <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> <legend>XXX短信</legend> </fieldset> <div class="layui-form-item"> <label class="layui-form-label">AppID</label> <div class="layui-input-block"> <input type="text" name="appid" value="{$data.sms.appid}" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">Key</label> <div class="layui-input-block"> <input type="text" name="key" value="{$data.sms.key}" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit="">确认保存</button> </div> </div> </div> </div> </div> </form>
注意:以上表单<input type="hidden" name="type" value="" />
的值必须与新添加的配置标识对应
例如刚刚设置的短信参数配置,可以用过系统内置函数xn_cfg
获得
如获取例子中的Appid,可以使用xn_cfg('sms.appid')
获得