admin.php 自定义,Laravel admin | 自定义工具

在model-grid的头部默认有批量删除和刷新两个操作工具,如果有更多的操作需求,model-grid提供了自定义工具的功能,下面的示例添加一个性别分类选择的按钮组工具。

先定义工具类app/Admin/Extensions/Tools/UserGender.php:

namespace App\Admin\Extensions\Tools;

use Encore\Admin\Admin;

use Encore\Admin\Grid\Tools\AbstractTool;

use Illuminate\Support\Facades\Request;

class UserGender extends AbstractTool

{

protected function script()

{

$url = Request::fullUrlWithQuery(['gender' => '_gender_']);

return <<

$('input:radio.user-gender').change(function () {

var url = "$url".replace('_gender_', $(this).val());

$.pjax({container:'#pjax-container', url: url });

});

EOT;

}

public function render()

{

Admin::script($this->script());

$options = [

'all' => 'All',

'm' => 'Male',

'f' => 'Female',

];

return view('admin.tools.gender', compact('options'));

}

}

视图admin.tools.gender文件为resources/views/admin/tools/gender.blade.php:

@foreach($options as $option => $label)

{{$label}}

@endforeach

在model-grid引入这个工具:

$grid->tools(function ($tools) {

$tools->append(new UserGender());

});

在model-grid定义中接收到gender参数后,做好数据查询就可以了:

if (in_array(Request::get('gender'), ['m', 'f'])) {

$grid->model()->where('gender', Request::get('gender'));

}

可以参考上面的方式来添加自己的工具。

目前默认实现了批量删除操作的功能,如果要关掉批量删除操作:

$grid->tools(function ($tools) {

$tools->batch(function ($batch) {

$batch->disableDelete();

});

});

如果要添加自定义的批量操作,可以参考下面的例子。

下面是扩展一个对文章批量发布的功能:

先定义操作类app/Admin/Extensions/Tools/ReleasePost.php:

namespace App\Admin\Extensions\Tools;

use Encore\Admin\Grid\Tools\BatchAction;

class ReleasePost extends BatchAction

{

protected $action;

public function __construct($action = 1)

{

$this->action = $action;

}

public function script()

{

return <<

$('{$this->getElementClass()}').on('click', function() {

$.ajax({

method: 'post',

url: '{$this->resource}/release',

data: {

_token:LA.token,

ids: selectedRows(),

action: {$this->action}

},

success: function () {

$.pjax.reload('#pjax-container');

toastr.success('操作成功');

}

});

});

EOT;

}

}

看代码的实现,通过click操作发送一个post请求,把选中的行数据id通过数组的形式传给后端接口,后端接口拿到id列表和要修改的状态来更新数据,然后前端刷新页面(pjax reload),并弹出toastr提示操作成功。

在model-grid中加入这个批量操作功能:

$grid->tools(function ($tools) {

$tools->batch(function ($batch) {

$batch->add('发布文章', new ReleasePost(1));

$batch->add('文章下线', new ReleasePost(0));

});

});

这样批量操作下拉按钮下面就会添加两个操作项,最后一步就是添加一个接口来处理批量操作的请求了,接口代码如下:

class PostController extends Controller

{

...

public function release(Request $request)

{

foreach (Post::find($request->get('ids')) as $post) {

$post->released = $request->get('action');

$post->save();

}

}

...

}

然后添加路由指向上面的接口:

$router->post('posts/release', 'PostController@release');

这样整个流程就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值