如何在不刷新整个页面的情况下在laravel中设置分页

时间:2016-03-29 08:58:45

标签: php jquery laravel pagination

控制器

    //Pagination
    $page = 1;
    $perPage = 5;
    $Reviews = DB::select($Reviews);
    $currentPage = Input::get('page', 1) - 1;
    $pagedData = array_slice($Reviews, $currentPage * $perPage, $perPage);
    $Reviews =  new Paginator($pagedData, count($Reviews), $perPage);
    $Reviews->setPath($id);

    $this->data['review_view'] = 'userreviews.reviews';
    $this->data['pages'] = 'hotelroom.detailed_page';

    return view($page, $this->data, compact('Reviews'));

我使用自定义分页。

在我看来,我使用userreviews.blade.php插入detailed_page.blade.php&它被视为主视图文件。

查看

//userreviews.blade.php

    @foreach($Reviews as $rev)
            //Displaying contents
    @endforeach
    <div class="pagination">
           <?php echo $Reviews->appends($_REQUEST)->render(); ?>
    </div>

//detailed_page.blade.php

    <div class="review_view">
           @include($review_view)
    </div>

这些是我的查看文件..

在这里,分页工作正常..

问题是,当我点击分页链接时,它会将我带到下一页..

但是,它刷新整个页面,我在该页面中丢失了其他结果。

是否有其他分页方式只能更改指定的视图文件。有人帮我..

提前致谢..

1 个答案:

答案 0 :(得分:2)

首先创建一个要在其中显示结果的容器。然后创建一个Blade子模板,显示该容器的所有内容。使用类似jQuery的东西来监听点击事件并获得下一个/上一个结果。下面这样的东西(伪的,未经测试的)

在page.blade.php

<div id="results">@include('page_details')</div>

在page_details.blade.php

@foreach($items as $item)
  // your $item display..
@endforeach

// return $from from your controller. It represents the current $_GET['from']
<span class="prev" data-from="{{ $from- 1}}">Previous</span> 
<span class="next" data-from="{{ $from + 1 }}">Next</span>

在您的javascript文件中:

$(document).ready(function() { 
  $(document).on('click', '.prev, .next', function() { 
    $.ajax({
      // the route you're requesting should return view('page_details') with the required variables for that view
      url: '/route/as/defined/in/routes-file?from=' + $(this).attr('data-from'),
      type: 'get'
    }).done(response) { 
      $('div#results').html(response);
    }
  });
});
发送ajax请求

解决错误500

通过ajax发送数据时,请确保您不会遇到令牌验证问题(10倍于您收到HTTP 500错误的原因)。在主布局中设置元标记,如:<meta name="csrf-token" content="{{ crsf_token() }}">

并将以下内容添加到您的javascript中;它会自动发送当前令牌以及您发出的每个ajax请求的标题。

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});