【问题标题】:Avoid refreshing page at pagination Laravel避免在分页时刷新页面 Laravel
【发布时间】:2019-10-15 13:06:53
【问题描述】:

当我使用 Laravel 的分页切换页面时,我想避免刷新页面,因为当我将页面 1 切换到页面 2 时,我被重定向到父页面。更改页面时如何避免重新加载页面?我在 Invitation - ReceivedInitiated 有 2 个标签。在Initiated 上,我有分页,例如,当我按第2 页时,我被重定向到父页面Invitation,当我从分页切换页面时,我需要留在页面Initiated 上。 这是我的控制器:

$initiated =  \App\Invitation::with('user')
    ->where('inviter_id', Sentinel::getUser()->id)
    ->orderBy('id', 'desc')
    ->paginate(6);

这是我的看法:

<div id="initiated" class="profile-edit tab-pane fade" style="background: none repeat scroll 0 0;">
    <dl class="dl-horizontal">
        <ul class="nav justify-content-center u-nav-v5-3 u-nav-primary  " role="tablist"
            data-target="nav-5-3-primary-hor-center" data-tabs-mobile-type="slide-up-down"
            data-btn-classes="btn btn-md btn-block u-btn-outline-primary"
            style="display: flex;justify-content: flex-end;">
            <li class="nav-item active">
                <a a data-toggle="tab" href="#grid" style="font-size: 12px"><i class="fa fa-th-large"></i> Grid</a>
            </li>
            <li class="nav-item">
                <a a data-toggle="tab" href="#list" style="font-size: 12px"><i class="fa fa-bars"></i> List</a>
            </li>
        </ul>
        <div class="tab-content">
            <div id="grid" class="tab-pane fade in active">
                <?php $count_user = 0;
         ?>
                @foreach($initiated as $record)
                @if($count_user == 0)
                <div class="row margin-bottom-20 ">
                    @endif
                    <?php $count_user++; ?>
                    <div class="col-sm-6 sm-margin-bottom-20">
                        <div class="profile-blog">
                            <img style="border-radius: 0% !important" class="rounded-x"
                                src="{{ asset('thumbnail') }}/{{ $record->user ? $record->user->profile_picture : '' }}"
                                alt="">
                            <div class="name-location" style="top: 30px;position: relative">
                                @if($record->user->role[0]->slug == 'individuals' ? $record->user->role[0]->slug : '')
                                <i style="font-size: 13px;position: relative;" class="icon-user"></i>
                                @elseif($record->user->role[0]->slug == 'organizations' ? $record->user->role[0]->slug :
                                '')
                                <i style="font-size: 13px;position: relative;"
                                    class="icon-hotel-restaurant-172 u-line-icon-pro fa- fa-lg"></i>
                                @endif
                                <a id="my-link" style="color: #555;text-decoration: none;font-size: 16px"
                                    href="{{ url('') }}/{{ $record->user ? $record->user->username : '' }}">{{ $record->user ? $record->user->username : '' }}</a>
                                </h3>
                            </div>
                            <div class="clearfix "></div>
                            <strong style="font-size: 13px"><i style="padding: 5px"
                                    class="icon-real-estate-020 u-line-icon-pro"></i>Location :
                            </strong>{{ $record->user ? $record->user->country->country : '' }} <span
                                class="{{ $record->user ? $record->user->country->flag : '' }}"></span><br>
                            <strong style="font-size: 13px"><i style="padding: 5px"
                                    class="icon-notebook fa-"></i>Industry :
                            </strong>{{ $record->user ? $record->user->industry->industry : '' }}<br>
                            @if($record->user->role[0]->slug == 'organizations' ? $record->user->role[0]->slug : '')
                            @if(isset($record->user->organization_type->organization_type))
                            <strong style="font-size: 13px"><i
                                    class="icon-hotel-restaurant-172 u-line-icon-pro fa- fa-lg"
                                    style="padding: 5px;font-size: 13px"></i>Organization :
                            </strong>{{ $record->user ? $record->user->organization_type->organization_type : '' }}@endif
                            @endif
                            @if($record->user->role[0]->slug == 'individuals' ? $record->user->role[0]->slug : '')
                            @if(!empty($record->user->career_path[0]))
                            <strong style="font-size: 13px"><i class="icon-speedometer"
                                    style="padding: 5px"></i>Function :
                            </strong>{{ $record->user ? $record->user->career_path[0]->functions->function : '' }}@endif
                            @endif
                            <hr>
                            <ul class="list-inline share-list">
                                <li>
                                    <a href="/cancel-invitation/{{$record->id}}"><i class="fa fa-times"> </i>Cancel</a>
                                </li>
                            </ul>
                        </div>
                    </div>
                    @if($count_user == 2)
                </div>
                <?php  $count_user = 0; ?>
                @endif
                @endforeach
            </div>
            <div id="list" class="tab-pane fade">
                <?php $count_user = 0;
         ?>
                @foreach($initiated as $record)
                @if($count_user == 0)
                <div class="row">
                    @endif
                    <?php $count_user++; ?>
                    <div class="col-sm-12 sm-margin-bottom-20" style="margin-bottom: 12px">
                        <div class="profile-blog" style="padding: 5px">
                            <img style="margin-right: 10px"
                                src="{{ asset('thumbnail') }}/{{ $record->user ? $record->user->profile_picture : '' }}"
                                alt="">
                            <div class="name-location">
                                <h3> @if($record->user->role[0]->slug == 'individuals' ? $record->user->role[0]->slug :
                                    '')
                                    <i style="font-size: 13px;position: relative;" class="icon-user"></i>
                                    @elseif($record->user->role[0]->slug == 'organizations' ?
                                    $record->user->role[0]->slug : '')
                                    <i style="font-size: 13px;position: relative;"
                                        class="icon-hotel-restaurant-172 u-line-icon-pro fa- fa-lg"></i>
                                    @endif <a id="my-link" style="color: #555;text-decoration: none;font-size: 16px"
                                        href="{{ url('') }}/{{ $record->user ? $record->user->username : '' }}">{{ $record->user ? $record->user->username : '' }}</a>
                                </h3>
                                <ul class="list-inline share-list d-flex pull-right"
                                    style="bottom: 25px;position: relative;margin-bottom: -20px;left: -25px">
                                    <li style="left: 25px;position: relative">
                                        <a href="/cancel-invitation/{{$record->id}}"><i
                                                class="icon-custom-me rounded fa fa-times"> </i></a>
                                    </li>
                                </ul>
                            </div>
                            <div style="display: flex;right: 2px;position: relative;bottom: 12px;margin-bottom: -10px">
                                <div style="padding-right: 15px">
                                    <strong><i class="icon-real-estate-020 u-line-icon-pro"></i> :
                                    </strong>{{ $record->user ? $record->user->country->country : '' }} <span
                                        class="{{ $record->user ? $record->user->country->flag : '' }}"></span>
                                </div>
                                <div style="padding-right: 10px">
                                    <strong><i class="icon-screen-tablet fa-"></i> :
                                    </strong>{{ $record->user ? $record->user->industry->industry : '' }}
                                </div>
                                <div style="padding-right: 10px">
                                    @if($record->user->role[0]->slug == 'organizations' ? $record->user->role[0]->slug :
                                    '')
                                    @if(isset($record->user->organization_type->organization_type))
                                    <strong><i class="icon-speedometer"></i> :
                                    </strong>{{ $record->user ? $record->user->organization_type->organization_type : '' }}
                                    @endif
                                    @endif
                                </div>
                                <div style="padding-right: 10px">
                                    @if($record->user->role[0]->slug == 'individuals' ? $record->user->role[0]->slug :
                                    '')
                                    @if(!empty($record->user->career_path[0]))
                                    <strong><i class="icon-frame fa-"></i> :
                                    </strong>{{ $record->user ? $record->user->career_path[0]->functions->function : '' }}
                                    @endif
                                    @endif
                                </div>
                            </div>
                            </ul>
                        </div>
                    </div>
                    @if($count_user == 2)
                </div>
                <?php  $count_user = 0; ?>
                @endif
                @endforeach
            </div>
        </div>
    </dl>
    {!! $initiated->render() !!}
</div>

【问题讨论】:

  • 使用 ajax 分页。
  • 如何在我的页面上实现?

标签: javascript php html ajax laravel


【解决方案1】:

服务器端分页需要更改路由参数,因此不是“页面刷新”

您可以使用 Ajax 对分页按钮编号单击执行手动查询

类似的东西(不推荐)

<div id="users">
    @foreach ($users as $user)
    <h2>{{ $user->name }}</h2>
    @endforeach
</div>
{{ $users->links() }}

并使用 JQuery Ajax

$('.pagination a').on('click', function (e) {
    e.preventDefault();
    var url = $(this).attr('href');
    $.get(url, function (data) {
        $('html').html(data.replace(/<html>(.*)<\/html>/, "$1"));
    });
});

这试图做 TurboLinks 的用途,所以我建议改用它

或者使用 Vue Router 将整个应用程序设为 SPA,例如,如果您使用的是 Vue

但最简单的解决方案是使用Turbo Links

这将拦截页面重定向并制作一个 XHR 来获取整个 HTML laravel 返回并将其与当前视图交换

希望对你有帮助

【讨论】:

  • 感谢您的回答。我不会用 Vue,你能给我看一个基于 Ajax 的例子吗?
  • 我添加了一个示例,但我仍然不建议这样做,只需使用 Turbo Links
  • 我可以将这个示例与变量 $initiated 一起使用,还是应该再做一个?
  • 是的,您可以将它与您的变量一起使用,但我仍然不建议您这样做,它会导致其他 Javascript 代码出现更多问题
  • 我会尝试在该函数中添加变量,然后我会返回答案。
【解决方案2】:

首先我认为你应该知道分页是如何工作的。

@foreach ($initiated as $record)
    ....
@endforeach

{{ $initiated->appends(array_merge(request()->all()))->links() }}

通常你只能做{{ $initiated-&gt;links() }},但是当你有特殊的参数需要传递时,你还应该将请求参数合并到分页中,这样分页的每个链接都会有你需要的参数。

您可以在 Appending To Pagination Links 部分下找到更多文档 here。如果您实施此分页,您将不再获得父重定向。 我还看到您在两个选项卡中使用相同的数据执行相同的 foreach 循环,我认为这也是一个问题,因为您不能对相同的数据进行 2 个不同的分页。也许在控制器中你可以做类似的事情

$initiated_tab_1 = ... ;
$initiated_tab_2 = $initiated_tab_1;

这不是一个很好的解决方案,但也许您可以尝试一下,看看这是否会改变您的代码工作方式。您还需要调整分页

我希望这会有所帮助,并且您可以让它发挥作用。

【讨论】:

  • 谢谢,我为第二个 foreach 做了第二个变量,放了新的分页,但还是不行:(
猜你喜欢
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2012-04-04
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多