当前位置: 首页 > 知识库问答 >
问题:

如何仅在满足数据库列条件时在datatables列按钮下拉菜单中显示链接

赵英资
2023-03-14

如果新用户至少未登录应用程序一次,我试图在datatables按钮下拉菜单中隐藏“重新发送欢迎”链接。我的users表上有一个“login\u count”列,默认为零。一旦用户登录到他们的帐户,它会增加他们每签入一次的次数。我正在尝试向datatables按钮刀片添加if_语句,但似乎无法构造正确使用$row的语句-

我试图构建if语句,如果“login_count”等于零,则显示链接,否则隐藏链接。我的问题是,我似乎找不到正确的方法将if语句与数据库行id连接起来。(我还有一个默认为null的“last_login_at”日期列,如果出于某种原因,最好将条件构建在null选项而不是count等于零选项的日期上)

我的按钮动作。刀片:

@can($gateKey.'view')
    <div class="pull-right" style="white-space: nowrap; min-width: 80px;"><div class="btn-group" style="white-space: nowrap;">
            <a href="{{ route($routeKey.'.show', $row->id) }}" class="btn btn-sm btn-default">@lang('global.app_view')</a>
            <a class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" href="#">
                <span class="caret"></span>
            </a><ul class="dropdown-menu pull-right">

{{-- This is the Link I want to build the if-statement around    --}}
                <li><a href="{{route('admin.users.resend_welcome',$row->id)}}" >@lang('global.app_resend_welcome_letter')</a></li>

            @if(auth()->user()->role->contains(1))
                    <li><a href="{{route('admin.impersonate.impersonate',$row->id)}}" >@lang('global.app_troubleshoot_user')</a></li>
                @endif
                @can($gateKey.'edit')
                    <li><a href="{{ route($routeKey.'.edit', $row->id) }}">@lang('global.app_edit')</a></li>
                @endcan
                @can($gateKey.'delete')
                    <li>
                        {!! Form::open(array(
                                'style' => 'display: inline-block;',
                                'method' => 'DELETE',
                                'onsubmit' => "return confirm('".trans("global.app_are_you_sure_delete")."');",
                                'route' => [$routeKey.'.destroy', $row->id])) !!}
                        {!! Form::submit(trans('global.app_delete'), array('class' => 'btn btn-link')) !!}
                        {!! Form::close() !!}
                    </li>
                @endcan

            </ul>
        </div>
    </div>
@endcan

这是我index.blade的Ajax数据表部分:

<script>
        @can('user_delete')
                @if ( request('show_deleted') != 1 )window.route_mass_crud_entries_destroy = '{{ route('admin.users.mass_destroy') }}'; @endif
        @endcan
        $(document).ready(function () {
            window.dtDefaultOptions.ajax = '{!! route('admin.users.index') !!}?show_deleted={{ request('show_deleted') }}';
            window.dtDefaultOptions.stateSave = true;
            //window.dtDefaultOptions.scrollY = '50vh';
            window.dtDefaultOptions.scrollCollapse = true;
            window.dtDefaultOptions.columns = [@can('user_delete')
                @if ( request('show_deleted') != 1 )
            {data: 'massDelete', name: 'id', searchable: false, sortable: false},
                @endif
                    @endcan{data: 'name', name: 'name'},
                {data: 'email', name: 'email'},
                {data: 'phone', name: 'phone'},
                {data: 'role.title', name: 'role.title'},
                    @if(auth()->user()->role->contains(1))
                {data: 'team.name', name: 'team.name'},
                    @endif
                {data: 'last_login_at', name: 'last_login_at'},
                {data: 'login_count', name: 'login_count'},

//This is where the Button action ties into the datatables table
                {data: 'actions', name: 'actions', searchable: false, sortable: false}
            ];
            processAjaxTables();
        });
    </script>

这是我要求的控制器:

public function index()
    {
        if (! Gate::allows('user_access')) {
            return abort(401, 'Sorry you are not authorized for this action at this time');
        }
        if ($filterBy = Input::get('filter')) {
            if ($filterBy == 'all') {
                Session::put('User.filter', 'all');
            } elseif ($filterBy == 'my') {
                Session::put('User.filter', 'my');
            }
        }


        if (request()->ajax()) {
            $query = User::query();
            $query->with("role");
            $query->with("team");
            $query->with("created_by");
            $query->with("created_by_team");
            $template = 'usersActionsTemplate';
            if(request('show_deleted') == 1) {

                if (!Gate::allows('interest_delete')) {
                    return abort(401, 'Sorry you are not authorized for this action at this time');
                }
                $query->onlyTrashed();
                $template = 'restoreTemplate';
            }


            $query->select([
                'users.id',
                'users.name',
                'users.email',
                'users.phone',
                'users.password',
                'users.team_id',
                'users.remember_token',
//                'users.created_by_id',
                'users.last_login_at',
                'users.login_count',
//                'users.created_by_team_id',
            ]);
            $table = Datatables::of($query);

            $table->setRowAttr([
                'data-entry-id' => '{{$id}}',
            ]);
            $table->addColumn('massDelete', '&nbsp;');
            $table->addColumn('actions', '&nbsp;');
            $table->editColumn('actions', function ($row) use ($template) {
                $gateKey  = 'user_';
                $routeKey = 'admin.users';

                return view($template, compact('row', 'gateKey', 'routeKey'));
            });
            $table->editColumn('phone', function ($row) {
                return $row->phone ? $row->phone : '';
            });
            $table->editColumn('password', function ($row) {
                return '---';
            });
            $table->editColumn('role.title', function ($row) {
                if(count($row->role) == 0) {
                    return '';
                }

                return '<span class="label label-default label-many">' . implode('</span><span class="label label-info label-many"> ',
                        $row->role->pluck('title')->toArray()) . '</span>';
            });
            $table->editColumn('team.name', function ($row) {
                return $row->team ? $row->team->name : '';
            });
            $table->editColumn('remember_token', function ($row) {
                return $row->remember_token ? $row->remember_token : '';
            });
            $table->editColumn('last_login_at', function ($row) {
                return $row->last_login_at ? $row->last_login_at : '';
            });
            $table->editColumn('login_count', function ($row) {
                return $row->login_count ? $row->login_count : '';
            });
//            $table->editColumn('created_by.name', function ($row) {
//                return $row->created_by ? $row->created_by->name : '';
//            });
//            $table->editColumn('created_by_team.name', function ($row) {
//                return $row->created_by_team ? $row->created_by_team->name : '';
//            });

            $table->rawColumns(['actions','massDelete','role.title']);

            return $table->make(true);
        }

        return view('admin.users.index');

我可以通过角色或活动用户来调节此按钮链接,但无论出于何种原因,我似乎无法找到一种基于数据库$row来调节此链接的方法-

有什么想法吗?

系统说这个评论是长时间添加在评论部分,所以我会把它添加到帖子中。

什么@if(Auth::user())-

我需要它,以便在所有不同用户的表索引列表中,过去登录过的用户不会在其行按钮下拉菜单中显示链接,但任何从未登录过的用户都会在其行按钮下拉菜单中看到“重新发送欢迎”链接。


共有1个答案

卞安邦
2023-03-14

只需更改视图文件,添加条件。就像

@if($row->login_count < 1)

    <li><a href="{{route('admin.users.resend_welcome',$row->id)}}" >@lang('global.app_resend_welcome_letter')</a></li>

@endif
 类似资料:
  • 在flutter中,我需要更多的灵活性来呈现/取消下拉按钮的选择列表。我希望能够显示/隐藏DropdownButton作为其他用户操作的结果,而不是单击它。文档中似乎没有公开这些方法。做这件事的好方法是什么?

  • 问题内容: 我在显示从数据库到下拉列表的数据时遇到了困难。 这是我尝试过的: 模型.php Controller.php View.php 但是结果显示在我的页面顶部。它没有出现在下拉列表中。我在这里做错了什么?非常感谢您的帮助。谢谢。 问题答案: 您不应该从视图中调用模型。而是在加载视图之前尝试调用模型和设置。 也不要在模型中回显行结果,除非您希望将其显示在页面上。 控制器: 模型: 视图:

  • 我正在学习Bootstrap 4,我已经成功地把我的navbar中的内容变成了汉堡菜单,就像我想要的那样,在更小的屏幕尺寸下。我现在遇到的问题是,成为汉堡菜单的其中一个东西是一个Browse按钮,它以更大的屏幕尺寸显示下拉列表: 在较小的屏幕尺寸下,它确实变成了一个汉堡包菜单,但当我点击汉堡包菜单时,浏览按钮就会出现在它的右边,而这并不是我想要的: 我正在尝试消除在较小屏幕尺寸的点击,并使汉堡包菜

  • 主要内容:实例,分割的按钮下拉菜单,实例,按钮下拉菜单的大小,实例,按钮上拉菜单,实例本章将讲解如何使用 Bootstrap class 向按钮添加下拉菜单。如需向按钮添加下拉菜单,只需要简单地在一个 .btn-group 容器中放置按钮和下拉菜单即可。您也可以使用 <span class="caret"></span> 来指示按钮作为下拉菜单。 下面的实例演示了一个基本的简单的按钮下拉菜单: 实例 <div class="btn-group"> <button type="but

  • 我的引导菜单中有下拉列表。 我试图在下拉列表中选择选项作为下拉列表的标题,而不是“选择选项”,就像现在一样。我已经尝试了在这个和其他一些网站上找到的几个解决方案,但无法使它们中的任何一个工作。 有人能帮忙吗?

  • 我的菜单显示向下,但然后水平。 我希望每一个导航项目都显示下来,在彼此的上面。 现场测试站点URL:ministerios-elim.herokuapp.com CodePen:(无法使菜单在单击CodePen时出现)。 https://codepen.io/ogonzales/pen/abnqxlg 更新2: 更新3: