Php 数据表列在使用@can()添加条件后向左移动
我使用带有HTML生成器的yajra datatebles来显示服务器端。在这里,我必须对特定角色隐藏action列中的delete按钮 我正在使用空间权限包并添加了Php 数据表列在使用@can()添加条件后向左移动,php,permissions,laravel-5.7,yajra-datatable,spatie,Php,Permissions,Laravel 5.7,Yajra Datatable,Spatie,我使用带有HTML生成器的yajra datatebles来显示服务器端。在这里,我必须对特定角色隐藏action列中的delete按钮 我正在使用空间权限包并添加了@can()以隐藏删除按钮。我的代码如下 UserDatatable.php namespace App\DataTables; use App\User; use DB; use Builder; use Auth; use Yajra\DataTables\Services\DataTable; use Yajra\DataT
@can()
以隐藏删除按钮。我的代码如下
UserDatatable.php
namespace App\DataTables;
use App\User;
use DB;
use Builder;
use Auth;
use Yajra\DataTables\Services\DataTable;
use Yajra\DataTables\Html\Column;
class UsersDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @param mixed $query Results from query() method.
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable($query)
{
return datatables($query)
->addIndexColumn()
->editColumn('status', function(User $user){
if($user->status == 1)
return '<label class="label label-success">Active</label>';
else return '<label class="label label-danger">Deactive</label>';
})
->editColumn('created_at', function(User $user){
return date('d-m-Y H:i:s',strtotime($user->created_at));
})
->editColumn('checkbox', function(User $user){
return '<input type="checkbox" data-id="'.$user->id.'" class="sub_chk" name="ids[]" />';
})
->addColumn('action', function(User $user) {
return view('backend.users.usersaction', compact('user'))->render();
})
->rawColumns(['checkbox','status','action']);
}
/**
* Get query source of dataTable.
*
* @param \App\User $model
* @return \Illuminate\Database\Eloquent\Builder
*/
public function query(User $model)
{
$users = User::select('id','name','email','status', 'created_at', 'updated_at');
if($this->request()->get('startDate')) {
$st = $this->request()->get('startDate');
$dt = ($this->request()->get('endDate') == '') ? date('Y-m-d') : $this->request()->get('endDate');
$users->whereDate('created_at','<=', "$dt");
$users->whereDate('created_at','>=', "$st");
}
if($this->request()->get('status') == '0' || $this->request()->get('status') == '1') {
$users->where('status', $this->request()->get('status'));
}
// $users->orderBy('created_at','DESC')
$users->get();
return $this->applyScopes($users);
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->columns($this->getColumns())
->minifiedAjax()
->addAction(['width' => '10%'])
->addCheckbox(['width'=> '10px'],true)
->parameters($this->getBuilderParameters())
->parameters([
'order' => [
5, // here is the column number
'desc'
],
'scrollX' => true,
'extend' => 'collection',
'text' => 'Export',
'dom' => 'Bfrtipl',
// 'buttons' => ['csv', 'excel', 'pdf' , 'print'],
'initComplete' => "function () {
this.api().columns().every(function () {
var column = this;
var input = document.createElement(\"input\");
$(input).appendTo($(column.footer()).empty())
.on('change', function () {
column.search($(this).val(), false, false, true).draw();
});
});
}",
]);
}
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
return [
'DT_RowIndex'=>['width'=>'10px','title'=>'S.No','searchable'=>false,'orderable'=>false],
'name',
'email',
'status',
'created_at'
];
}
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'Users_' . date('YmdHis');
}
}
namespace-App\DataTables;
使用App\User;
使用数据库;
使用生成器;
使用Auth;
使用Yajra\DataTables\Services\DataTable;
使用Yajra\DataTables\Html\Column;
类UsersDataTable扩展了DataTable
{
/**
*构建数据表类。
*
*@param mixed$query Results from query()方法。
*@return\Yajra\DataTables\DataTableAbstract
*/
公共函数数据表($query)
{
返回数据表($query)
->addIndexColumn()
->editColumn('status',函数(用户$User){
如果($user->status==1)
返回“活动”;
否则返回'Deactive';
})
->editColumn('created_at',函数(User$User){
返回日期('d-m-Y H:i:s',strottime($user->created_at));
})
->editColumn('checkbox',函数(用户$User){
返回“”;
})
->addColumn('action',函数(用户$User){
返回视图('backend.users.usersaction',compact('user'))->render();
})
->rawColumns(['checkbox'、'status'、'action']);
}
/**
*获取数据表的查询源。
*
*@param\App\User$model
*@return\illumb\Database\elount\Builder
*/
公共函数查询(用户$model)
{
$users=User::选择('id','name','email','status','created_at','updated_at');
如果($this->request()->get('startDate')){
$st=$this->request()->get('startDate');
$dt=($this->request()->get('endDate')=='')日期('Y-m-d'):$this->request()->get('endDate');
$users->whereDate('created_at'、'='、“$st”);
}
如果($this->request()->get('status')=='0'| |$this->request()->get('status')=='1'){
$users->where('status',$this->request()->get('status');
}
//$users->orderBy('created_at','DESC')
$users->get();
返回$this->applyScopes($users);
}
/**
*如果要使用html生成器,请使用可选方法。
*
*@return\Yajra\DataTables\Html\Builder
*/
公共函数html()
{
返回$this->builder()
->列($this->getColumns())
->minifiedAjax()
->添加操作(['width'=>'10%'))
->addCheckbox(['width'=>'10px'],true)
->参数($this->getBuilderParameters())
->参数([
“订单”=>[
5,//这是列号
“描述”
],
'scrollX'=>真,
“扩展”=>“集合”,
“文本”=>“导出”,
'dom'=>'Bfrtipl',
//“按钮”=>[“csv”、“excel”、“pdf”、“打印”],
“initComplete”=>“函数(){
this.api().columns().every(函数(){
var列=此;
var input=document.createElement(\“input\”);
$(输入).appendTo($(column.footer()).empty())
.on('change',function(){
search($(this.val(),false,false,true).draw();
});
});
}",
]);
}
/**
*获取列。
*
*@return数组
*/
受保护的函数getColumns()
{
返回[
'DT_RowIndex'=>['width'=>'10px','title'=>'S.No','searchable'=>false,'orderable'=>false],
“姓名”,
“电子邮件”,
"地位",,
“创建于”
];
}
/**
*获取要导出的文件名。
*
*@返回字符串
*/
受保护的函数文件名()
{
返回“用户”。日期(“YmdHis”);
}
}
下面是我添加条件的操作视图
usersaction.blade.php
@can('View User')
<a href="javascript:void(0);" data-user_id="{{ encrypt($user->id) }}" class="btn btn-sm btn-default viewUser"><i class="fa fa-eye"></i></a>
@endcan
@can('Edit User')
<a href="{!! url('admin/editUser/'.encrypt($user->id)) !!}" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i></a>
@endcan
@can('Delete User')
<a href="javascript:void(0);" data-user_id="{{ encrypt($user->id) }}" class="btn btn-sm btn-danger deleteUser"><i class="fa fa-trash"></i></a>
@endcan
@can('查看用户')
@恩德坎
@可以('编辑用户')
@恩德坎
@can('删除用户')
@恩德坎
在这里,查看用户、编辑用户、删除用户是由laravel Spatiale权限包创建的权限。它工作正常,但问题是在数据表视图中,action列向左移动,右侧留下了太多的空白:
我尝试了另一种方法,如下所示
->addColumn('action', function(User $user){
$actionBtn='';
if(Auth::user()->can('View User')){
$actionBtn .= '<a href="javascript:void(0);" data-user_id="'.encrypt($user->id).'" class="btn btn-sm btn-default viewUser"><i class="fa fa-eye"></i></a>';
}
if(Auth::user()->can('Edit User')){
$actionBtn .= '<a href="'.url('admin/editUser/'.encrypt($user->id)).'" class="btn btn-sm btn-primary"><i class="fa fa-edit"></i></a>';
}
if(Auth::user()->can('Delete User')){
$actionBtn .= '<a href="javascript:void(0);" data-user_id="'.encrypt($user->id).'" class="btn btn-sm btn-danger deleteUser"><i class="fa fa-trash"></i></a>';
}
return $actionBtn;
})
->addColumn('action',函数(User$User){
$actionBtn='';
if(Auth::user()->can('View user')){
$actionBtn.='';
}
if(Auth::user()->can('Edit user')){
$actionBtn.='';
}
if(Auth::user()->can('Delete user')){
$actionBtn.='';
}
返回$actionBtn;
})
但我得到了同样的结果。如何解决此问题?$action=“”;
$action = "";
if(Auth::user()->can('floor-edit')){
$action .= '<a class="btn btn-info btn-sm" href="'.route("floor.edit",Crypt::encrypt($floor->id)).'"><i class="fa fa-edit"></i></a>';
}
if(Auth::user()->can('floor-delete')){
$action .= ' <button type="button" name="delete" id="'.Crypt::encrypt($floor->id).'" class="delete btn btn-danger btn-sm"><i class="fa fa-trash"></i></button>';
}
if(Auth::user()->can('floor-edit')){
$action.='';
}
if(Auth::user()->can('floor-delete')){
$action.='';
}
它对我有用在HTML中思考你的问题。您可以尝试为操作设置表列的宽度,可能在150px左右,然后自动排列其他列以占用剩余空间。嘿,我也遇到了同样的问题。您有什么解决方案吗?请发布答案,你是如何解决这个问题的