我有一个模型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周前”和“今天”这样的链接,跳转到包含第一个Task
{{1}的页面}>现在() - 例如14天。
我完全理解我可以改变我的start_date
并在$conditions
上设置范围,但我想要整套。
打开其他关于如何获得相同结果的想法,或者指向正确方向的任何指针。
答案 0 :(得分:0)
您需要计算条件的给定开始日期之前和之后的记录,然后将其除以每页的记录数以获取其所在的页面。
然而,这不是非常用户友好,而是我会这样做:
在网址中传递您的开始日期和范围,并根据传递的值构建您的查询,然后在您的分页设置中使用。
/something/index?range=last-two-weeks
检查范围值并为该值进行切换以设置正确的条件。这将通过清晰易懂的URL直接过滤用户真正感兴趣的记录。
答案 1 :(得分:0)
我最终运行了两次搜索,一次分页,一次没有。然后我经历了未分类的结果
$pgStarts = array();
$pgCounter = 1;
foreach($tasks as $k => $task){
if(($k % $limit) == 0){
$pgStarts[$pgCounter] = $task['Task']['start_time'];
$pgCounter++;
}
}
一旦我获得了每个页面的开始日期数组,我就可以轻松更改分页号码的标记方式。我甚至能够逐个分解关键事件(大多数任务都在这一天)。
我对结果很满意,因为我认为这会给分页提供更多的上下文。我会继续寻找更好的方法,但现在这样做。