如何找到分页集的每一页所涵盖的字段范围?

How can I find the range of a field covered by each page of a paginated set?

我有一个模型 Task(id, start_date, end_date, description)。我使用 Paginator 喜欢

    $this->Paginator->settings = array(
        'Task'=>array(
            'contain'=>$contain,
            'limit'=> $limit,
            'conditions'=>$conditions,
            'order'=>'Task.start_date ASC',
            'page'=> $page,
    ));

我所追求的是能够知道分页集的每一页所涵盖的范围start_date。而不是页码(即在$this->Paginator->numbers()生成的视图中)我想创建像“2周前”和"Today"这样的链接,跳转到包含第一个Task的页面start_date > NOW()-14Days,例如。

我完全理解我可以改变我的 $conditions 并在 start_date 上设置一个范围,但我想要整个集合。

接受关于如何实现相同结果的其他想法,或任何正确方向的指示。

您需要计算给定条件开始日期前后的记录数,然后除以每页的记录数,得到它所在的页数。

然而,这对用户来说不是很友好,我会这样做:

在 URL 中传递您的开始日期和范围,并根据传递的值构建您的查询,然后在您的分页设置中使用该查询。

/something/index?range=last-two-weeks

并检查范围值并对该值进行切换以设置正确的条件。这样就直接过滤掉用户真正感兴趣的记录,一目了然URL.

我结束了 运行 我的搜索两次,一次分页,一次没有。然后我浏览了未分页的结果

$pgStarts = array();    
$pgCounter = 1;

foreach($tasks as $k => $task){
    if(($k % $limit) == 0){
        $pgStarts[$pgCounter] = $task['Task']['start_time'];
        $pgCounter++;
    }
}

一旦我有了每个页面的开始日期数组,我就可以轻松地更改页码的标记方式。我什至能够按小时分解关键事件(大多数任务都在这一天)。

我对结果很满意,因为我认为它为分页提供了更多上下文。我会继续寻找更好的方法,但现在就可以了。