从 URL 中删除 Yii2 分页中的第一页编号
Removing the number of first page in Yii2 Pagination from the URL
出于 SEO 目的,我需要从 URL 中删除第一页码。即我有以下内容:
example.com/pages/view/1
和example.com/pages/view
这两个URL指向相同的视图动作内容。我想让 URL 中的 1
没有分页。即第一页 link 和页码 1 应该 linked 到 pages/view
.
我尝试像下面这样处理 $pagination 对象:
$pages = new Pagination(['totalCount' => $books['booksCount'], 'pageParam' => 'start', 'defaultPageSize' => 10,]);
$pagingLinks = $pages->getLinks();
$pagingLinks['first'] = '/';
$pages->links = $pagingLinks;
然而,导致错误的最后一行:
Setting read-only property: yii\data\Pagination::links
所以我在修改links 属性时遇到了问题。是否有任何其他解决方案来完成此任务?!
According to docs 您应该通过将 yii\data\Pagination::forcePageParam
传递给分页构造函数
来将其设置为 false
$pages = new Pagination([
'totalCount' => $books['booksCount'],
'pageParam' => 'start',
'defaultPageSize' => 10,
'forcePageParam' => false,
]);
以上答案可能适用于直接使用 Pagination
,但如果从其他小部件(例如 ListView)使用它,则仍然是一个问题。
我在 github
上的 Yii2 存储库上的 comment on an issue report 找到了解决方案
解决方法就是在config/web.php
中定义正确的路由。假设这里我们有一个名为 Suras
的控制器,我们在其名为 view
的操作视图上使用 ListView
小部件。因此,将 defaults
的规则数组设置为 'page' => 1
将阻止将 page
参数添加到第一页的 link 的 URL。还要注意第一个规则 'view/<id:\d+>/1' => 'Error404',
是按顺序放置的,以防止使用 page=1
参数访问第一页,例如,尝试访问 mysite.com/view/20/1
将调用 404 错误,因为有没有名为 Error404
的控制器。
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'view/<id:\d+>/1' => 'Error404',
['pattern' => 'view/<id:\d+>/<page:\d+>', 'route' => 'suras/view', 'defaults' => ['page' => 1]],
'view/<id:\d+>/<page:\d+>' => 'suras/view',
'view/<id:\d+>' => 'suras/view',
],
],
],
出于 SEO 目的,我需要从 URL 中删除第一页码。即我有以下内容:
example.com/pages/view/1
和example.com/pages/view
这两个URL指向相同的视图动作内容。我想让 URL 中的 1
没有分页。即第一页 link 和页码 1 应该 linked 到 pages/view
.
我尝试像下面这样处理 $pagination 对象:
$pages = new Pagination(['totalCount' => $books['booksCount'], 'pageParam' => 'start', 'defaultPageSize' => 10,]);
$pagingLinks = $pages->getLinks();
$pagingLinks['first'] = '/';
$pages->links = $pagingLinks;
然而,导致错误的最后一行:
Setting read-only property: yii\data\Pagination::links
所以我在修改links 属性时遇到了问题。是否有任何其他解决方案来完成此任务?!
According to docs 您应该通过将 yii\data\Pagination::forcePageParam
传递给分页构造函数
$pages = new Pagination([
'totalCount' => $books['booksCount'],
'pageParam' => 'start',
'defaultPageSize' => 10,
'forcePageParam' => false,
]);
以上答案可能适用于直接使用 Pagination
,但如果从其他小部件(例如 ListView)使用它,则仍然是一个问题。
我在 github
上的 Yii2 存储库上的 comment on an issue report 找到了解决方案解决方法就是在config/web.php
中定义正确的路由。假设这里我们有一个名为 Suras
的控制器,我们在其名为 view
的操作视图上使用 ListView
小部件。因此,将 defaults
的规则数组设置为 'page' => 1
将阻止将 page
参数添加到第一页的 link 的 URL。还要注意第一个规则 'view/<id:\d+>/1' => 'Error404',
是按顺序放置的,以防止使用 page=1
参数访问第一页,例如,尝试访问 mysite.com/view/20/1
将调用 404 错误,因为有没有名为 Error404
的控制器。
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'view/<id:\d+>/1' => 'Error404',
['pattern' => 'view/<id:\d+>/<page:\d+>', 'route' => 'suras/view', 'defaults' => ['page' => 1]],
'view/<id:\d+>/<page:\d+>' => 'suras/view',
'view/<id:\d+>' => 'suras/view',
],
],
],