我正在使用laravel-5.4分页,如下所示:
public function index()
{
$jobs = Job::paginate(5);
return view('job.index', compact('jobs'));
}
在视图中:
{{ $jobs->links() }}
生成两个典型页面存在问题: /job
和 /job?page=1
两个页面具有相同的内容 .
我想做任何从分页的第一页删除查询字符串 page
的事情 .
我尝试过以下方法:
if ($jobs->onFirstPage()){
$jobs->setPageName('');
}
但这会破坏分页,即页面链接无法正确加载,并且查询字符串值仍然适用于所有页面 .
7 回答
我发现这个问题的有效解决方案是 edit the pagination template .
首先使用项目根目录中的以下命令从供应商发布分页模板:
现在应找到
resources/views/vendor/pagination/default.blade.php
处的文件,并且可以使用str_replace()
为每个页面的网址和后退导航按钮编辑如下文件:和
更新:
使用
?page=10
发现了一个错误,因此我们不应该使用str_replace
,而应使用preg_replace
,如下所示:更新2:
如果使用除
page
之外的页码参数的任何自定义名称,我们可以使用paginator getter作为$pageName属性,如下面的分页模板:要了解有关如何在同一页面上使用多个分页或如何从视图自定义页码参数
$pageName
的更多信息,请查看this answer如果你关心SEO,添加规范标签
我什么都不知道......
$ pageNum id获取请求或自己的类
$ path =“/ jobs”
在您的路线中,为通往您的功能的路线命名:
然后,在控制器的函数中,使用:
我想你可以试试这个:
至
希望这对你有用!
您可以像这样修改视图:
你可以扩展 LengthAwarePaginator 方法 url($page)
我找到了以下工作并考虑了
page=10
问题:在export your pagination views之后,进行以下两项修改:
MODIFICATION 1
替换这个:
{{ $paginator->previousPageUrl() }}
有了这个:
{{ preg_replace('/(?:(&|\\?)page=[1])(?!\\d)/ui','', $paginator->previousPageUrl()) }}
MODIFICATION 2
替换这个:
{{ $url }}
有了这个:
{{ preg_replace('/(?:(&|\\?)page=[1])(?!\\d)/ui','', $url ) }}