Sai*_*akR 6 php pagination laravel laravel-5 laravel-5.4
我正在使用laravel-5.4分页,如下所示:
public function index()
{
$jobs = Job::paginate(5);
return view('job.index', compact('jobs'));
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
{{ $jobs->links() }}
Run Code Online (Sandbox Code Playgroud)
存在生成两个典型页面的问题:/job并且/job?page=1两个页面具有相同的内容。
我想做任何page从分页首页上删除查询字符串的事情。
我尝试了以下方法:
if ($jobs->onFirstPage()){
$jobs->setPageName('');
}
Run Code Online (Sandbox Code Playgroud)
但这破坏了分页,即页面链接未正确加载,并且所有页面的查询字符串值均保持不变。
我发现此问题的有效解决方案是编辑分页模板。
首先使用以下命令从项目根目录发布供应商的分页模板:
php artisan vendor:publish --tag=laravel-pagination
Run Code Online (Sandbox Code Playgroud)
现在resources/views/vendor/pagination/default.blade.php应该找到一个文件 at并且可以像下面这样编辑它,使用str_replace()每个页面的 url 和后退导航按钮:
<li><a href="{{str_replace('?page=1','',$paginator->previousPageUrl())}}" title="{{__('Previous')}}" rel="prev">{{$foxPrev}}</a></li>
Run Code Online (Sandbox Code Playgroud)
和
<li><a href="{{str_replace('?page=1','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)
发现一个错误,?page=10而不是使用str_replace我们应该使用preg_replace如下:
<li><a href="{{preg_replace('/\?page=[1]$/','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)
如果对页码参数使用除 之外的任何自定义名称page,我们可以在分页模板中使用$pageName属性的分页器 getter,如下所示:
<li><a href="{{preg_replace('/\?'.$paginator->getPageName().'=[1]$/','',$url)}}">{{ $page }}</a></li>
Run Code Online (Sandbox Code Playgroud)
要了解有关如何在同一页面上使用多个分页或如何$pageName从视图自定义页码参数的更多信息,请查看此答案