FASTADMIN 小技巧

一、更改弹框大小:按键操作定义

var Controller = {
        index: function () {
            // 初始化表格参数配置
            $(".btn-add").data("area",["90%","90%"]);

            $(".btn-edit").data("area",["90%","90%"]);

            Table.api.init({
                extend: {
                    index_url: 'cdept/cdeptups/index' + location.search,
                    add_url: 'cdept/cdeptups/add',
                    edit_url: 'cdept/cdeptups/edit',
                    del_url: 'cdept/cdeptups/del',
                    multi_url: 'cdept/cdeptups/multi',
                    import_url: 'cdept/cdeptups/import',
                    table: 'cdeptups',

                }
            });

二、

  • 当前控制器使用$this->方法名()来调用所支持的方法
  • 当前控制器使用$this->属性名来调用所支持的属性,也支持直接在当前控制器定义相关属性来覆盖父类的属性
  • 数据限制
  • 在后台开发的过程中经常会有这样的一个需求,每个管理员单独管理自己添加的数据或单独管理自己下级管理员添加的数据,管理员之间的数据是不相通的,每个管理员看到的数据是不同的。在FastAdmin中可以很方便的实现此功能。
  • 首先我们需要在当前控制器添加以下两个属性
  • protected $dataLimit = 'auth'; //默认基类中为false,表示不启用,可额外使用auth和personal两个值protected $dataLimitField = 'admin_id'; //数据关联字段,当前控制器对应的模型表中必须存在该字段
  • $dataLimit = false; //表示不启用,显示所有数据$dataLimit = 'auth'; //表示显示当前自己和所有子级管理员的所有数据$dataLimit = 'personal'; //表示仅显示当前自己的数据
  • $dataLimitField字段默认为admin_id,请注意添加该字段类型为int(10)。
  • 通过以上配置后,在列表加载数据的时候将默认添加条件过滤不属于自己权限的数据,同时在添加时会自动维护admin_id的数据,在编辑、删除的时候会自动控制权限避免越权操作。
  • 如果需要将原有的数据加入到FastAdmin后台管理权限控制当中,比如已有的数据已经有标识归属,但这个归属体系并非是FastAdmin的后台管理员体系。在这个时候我们就需要重写基类的getDataLimitAdminIds方法,将此方法返回数据标识的归属ID数组集合,这样即可使用FastAdmin的后台管理权限进行管理。
  • 关联查询
  • 目前FastAdmin后台index方法支持一对一关联查询,比如我们一篇文章有归属分类,我们在列出数据时需要同时列表文章分类名称。
  • 首先我们需要在当前控制器中添加以下属性
  • protected $relationSearch = true;
  • 然后我们修改控制器的index方法,代码如下:
  • public function index(){ if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->with(["category"]) ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->with(["category"]) ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); $result = array("total" => $total, "rows" => $list); return json($result); } return $this->view->fetch();}
  • 然后在控制器对应的model(非关联model)中添加以下代码:
  • public function category(){ return $this->belongsTo('Category', 'category_id')->setEagerlyType(0);}
  • 更多的关联用户可以参考TP5关联模型的章节:关联模型
  • 我们在控制器对应的JS中可以直接使用category.id、category.name等关联表的字段
  • // 初始化表格table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, columns: [ [ {field: 'state', checkbox: true, }, {field: 'id', title: 'ID', operate: '='}, {field: 'title', title: __('Title'), operate: 'LIKE %...%'}, {field: 'category.image', title: __('Image'), operate: false, formatter: Table.api.formatter.image}, {field: 'category.name', title: __('Name'), operate: '='}, {field: 'ip', title: __('IP'), operate: '='}, {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange'}, {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} ] ],});
  • 如果我们需要自己在控制器中透传数据到JS中去,则可以使用控制器的assignconfig方法来透传,使用如下
  • $this->assignconfig('demo', ['name'=>'名称']);
  • 然后我们就可以在JS中使用
  • Config.demo.name
  • 来获取对应的数据
  • 视图渲染
  • 基类app\common\controller\Backend会默认渲染以下几个对象到视图中
  • //渲染站点配置$this->assign('site', $site);//渲染配置信息$this->assign('config', $config);//渲染权限对象$this->assign('auth', $this->auth);//渲染管理员对象$this->assign('admin', Session::get('admin'));
  • 我们可以在视图中使用{$site.name}、{$config.modulename}、{$auth.id}、{$admin.username}来获取我们所需要的数据
  • $site所支持的数据对应为application/extra/site.php
  • config所支持的数据为'site' => config所支持的数据为′site′=>config所支持的数据为'site' => config所支持的数据为′site′=>site中的'name', 'cdnurl', 'version', 'timezone', 'languages'字段,'upload' => application/extra/upload.php中数据,'modulename' => 'admin','controllername' => 控制器名,'actionname' => 方法名,'jsname' => 控制器JS所加载的路径,'moduleurl' => 后台module的链接,'language' => 当前语言,'fastadmin' => application/config.php中fastadmin的配置
  • $auth是一个对象,所对应的类是application/admin/library/Auth.php
  • $admin是一个当前管理员登录的session数据,存储有管理员的用户名、昵称、ID、头像等信息
  • 如果我们需要在JS中使用以上数据,则使用
  • Config.site.nameConfig.modulename
  • 模板布局
  • 控制器默认全部采用模板布局,因此我们的页面都会自动加上头部和尾部,如果我们有特殊的页面不需要采用模板布局,我们可以使用$this->view->engine->layout(false); 来关闭当前方法的模板布局。
  • 如果我们需要使用自己的模板布局,在当前控制器定义protected $layout = '布局模板';即可。
  • 请注意如果采用了自己的模板布局或禁用了模板布局,将无法使用FastAdmin的JS按需加载和Config变量访问。
  • 使用$this->request->post("参数名", "默认值", null);将第三个参数设置为null即可获取原生请求的数据
  • Form.api.bindevent($("form[role=form]"), function(data, ret){ //如果我们需要在提交表单成功后做跳转,可以在此使用location.href="链接";进行跳转 Toastr.success("成功");}, function(data, ret){ Toastr.success("失败");}, function(success, error){ //bindevent的第四个参数为提交前的回调 //如果我们需要在表单提交前做一些数据处理,则可以在此方法处理 //注意如果我们需要阻止表单,可以在此使用return false;即可 //如果我们处理完成需要再次提交表单则可以使用submit提交,如下 //Form.api.submit(this, success, error); return false;});
  • 以上代码表格当表单提交处理成功后提示成功,处理失败提示失败。
  • 使用示例
  • //使用Plupload上传Upload.api.plupload($(".plupload"), function(data, ret){ Toastr.success("成功");}, function(data, ret){ Toastr.success("失败");});//使用Ajax上传Upload.api.send(file, function(data, ret){ Toastr.success("成功");}, function(data, ret){ Toastr.success("失败");});
  • 以上代码表格当表单提交处理成功后提示成功,处理失败提示失败。
  • Table.api.formatter.icon //渲染成图标按钮
  • Table.api.formatter.image //渲染成单张图片
  • Table.api.formatter.images //渲染成多张图片
  • Table.api.formatter.content //内容自动截取
  • Table.api.formatter.status //渲染成状态
  • Table.api.formatter.normal //渲染成label
  • Table.api.formatter.toggle //渲染成开关
  • Table.api.formatter.url //渲染成文本框链接
  • Table.api.formatter.search //渲染成搜索链接
  • Table.api.formatter.addtabs //渲染成打开新选项卡链接
  • Table.api.formatter.dialog //渲染成弹窗链接
  • Table.api.formatter.flag //渲染成标志
  • Table.api.formatter.label //渲染成标志
  • Table.api.formatter.datetime //渲染成日期时间
  • Table.api.formatter.operate //渲染成操作栏按钮
  • Table.api.formatter.buttons //渲染成按钮组
  • //ThinkPHP5中定义的函数所在文件站点目录/thinkphp/helper.php//FastAdmin中定义的函数所在文件站点目录/application/common.php
  • Http请求处理类
  • //发送一个POST请求并获取返回结果$result = \fast\Http::post("http://www.example.com", ['name'=>'张三', 'age'=>20]);//发送一个POST请求并设置Content-Type并获取返回结果$result = \fast\Http::post("http://www.example.com", ['name'=>'张三', 'age'=>20], [CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => ['Content-Type: text/plain', 'Authorization: abcdefg']]);//发送一个GET请求并获取返回结果,此时返回$result=['ret'=>true, 'msg'=>'返回结果'];$result = \fast\Http::sendRequest("http://www.example.com", ['name'=>'张三', 'age'=>20], [CURLOPT_HTTPHEADER => ['Content-Type: text/plain']]);//发送一个无需获取返回结果的请求\fast\Http::sendAsyncRequest("http://www.example.com", ['name'=>'张三', 'age'=>20]);//发送输出一个临时文件到浏览器端下载,并删除该文件\fast\Http::sendToBrowser("你的临时文件绝对路径");
  • $username = $this->request->request("username");
  • \think\Db::query("SELECT * FROM fa_user WHERE username='{$username}'");
  • $username = $this->request->request("username", "");
  • $username = htmlspecialchars($username, ENT_QUOTES);\think\Db::query("SELECT * FROM fa_user WHERE username=:username", ['username'=>$username]);
  • 如何在控制器或模型中获取当前登录的管理员或登录用户信息
  • 在FastAdmin所提供的基类Frontend、Backend、Api中都有提供获取当前管理员或登录用户的信息方法
  • 在后台管理的控制器中可以通过$this->auth->id来获取管理员ID,$this->auth->字段名获取管理员的其它信息,如果需要在后台的Model中获取当前登录的管理员ID,可以通过两种方式获取:
  • 第一种,使用Session来获取管理员信息
  • \think\Session::get('admin');
  • 第二种,使用单例方法来获取
  • $auth = \app\admin\library\Auth::instance();
  • 在前台或API的控制器中可以通过$this->auth->id来获取当前登录会员的ID,$this->auth->字段名获取登录会员的其它信息,如果需要在前台的Model中获取当前登录的用户信息,可以通过以下的方式获取:
  • //获取Auth对象$auth = \app\common\library\Auth::instance();//获取会员模型$user = $auth->getUser();

你可能感兴趣的:(java,javascript,前端,php)