使用分页器进行视图模板导航

Using paginator for view template navigation

是否可以劫持分页器以进行视图模板导航(即提供 next/prev 个 URL)?

我目前有一个每页 1 行的分页器。我想修改 URL 以指向当前视图,但使用行 PK 而不是 :page querystring 参数。

  1. 首先,访问model/view/5
  2. 在分页器 URls 中:

    • 下一个 link,将转到 model/view/6
    • 上一个 link,会转到 model/view/4
    • 分页 link 秒,将转到 model/view/x

这可能吗?分页URL可以这样重写吗?

这应该是可能的,是的。首先,您需要一个适当的路由,该路由使用名为 page 的路由元素,例如:

Router::connect('/model/view/:page', [
    'controller' => 'Models',
    'action' => 'view'
]);

这是必需的,因为分页助手将在生成链接时通过 URL 数组中名为 page 的键设置页码。如果路由中没有具有该名称的元素,则该值将以查询字符串结尾。同样重要的是不要将 page 元素标记为要传递,否则该值将滑入分页助手生成的 URL 数组中,并且不再匹配您的路线。

您需要做的另一件事是确保分页器组件可以访问请求的页码。默认情况下,组件从请求查询字符串变量或分页选项中读取值。因此,例如,在控制器中,您可以执行以下操作:

$page = $this->request->param('page');
if ($page !== null) {
    $this->paginate['page'] = $page;
    // or
    $this->request->query['page'] = $page;
}

// ...

$result = $this->paginate();

对于更枯燥的内容,您可以将其移动到自定义组件或扩展的分页器组件中。

另见