Как отобразить ссылку в раскрывающемся меню кнопки столбца таблицы данных, только если условие столбца базы данных выполнено - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь скрыть ссылку "resend_welcome" в раскрывающемся меню кнопки datatables, если новый пользователь не выполнил вход в приложение хотя бы один раз. У меня есть столбец "login_count" в моей таблице пользователей, по умолчанию он равен нулю. Как только пользователь входит в свою учетную запись, он увеличивает количество раз, которое он зарегистрировал. Я пытаюсь добавить if_statement к блейду кнопки datatables, но не могу создать тот, который правильно использует $ row-> id для скрыть ссылку в выпадающем списке только для тех пользователей, которые еще не вошли в систему.

Я пытаюсь построить оператор if таким образом, чтобы, если "login_count" равнялся нулю, ссылка отображалась, в противном случае ссылка скрыта. Моя проблема в том, что я не могу найти правильный способ связать условный оператор if с идентификаторами строк базы данных. (У меня также есть столбец даты «last_login_at», который по умолчанию имеет значение null, если по какой-то причине лучше построить условное выражение на дату, где нулевой параметр, а не счетчик, равен нулю)

Моя кнопка action.blade:

@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

Это часть данных Ajax моего index.blade:

<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-> id.

Есть мысли?

Система заявила, что этот комментарий был добавлен в раздел комментариев слишком долго, поэтому я добавлю его в сообщение.

Что @if(Auth::user()->login_count > 1) делает в этой ситуации, так это влияет на пользователя с постоянным током. Он не применяет условие к пользовательским записям, отображаемым в индексе datatables. Если текущий пользователь имеет login_count, он скрывает ссылку для всех различных отображаемых кнопок строк пользовательских записей независимо от того, имеют ли эти пользовательские записи какое-либо количество пользователей.

Мне нужно, чтобы в списке индексов таблиц всех различных пользователей те пользователи, которые вошли в систему в прошлом, не будут иметь ссылку, отображаемую в раскрывающемся меню кнопки строк, но любой пользователь, который никогда не входил в систему. у всех будет отображаться ссылка "resend_welcome" в выпадающем меню кнопки строк.

1 Ответ

3 голосов
/ 12 июня 2019

Просто измените свой файл просмотра, добавьте условие. Как

@if($row->login_count < 1)

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

@endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...