![](/img/trans.png)
[英]How can I filter paginated results based on the value of associated models? (CakePHP 2.x)
[英]CakePHP: Numbered Paginated Results
标题有点古怪,但这是我早上4点能拿到的最好成绩。 我有一个我正在分页的链接表,一点也不花哨。 假设有100个链接,每20个页面显示5个页面。 我如何在首页上为每个链接从1开始到20进行编号,如果我们跳到最后一页,则是81到100。我有多个查询会更改查询的方向和ORDER BY,因此必须动态。 使用CakePHP 1.2完成。 例如reddit.com
在视图中尝试以下操作:
<?php debug($this->params['paging']); ?>
这将为您提供一些有关分页器当前状态的内部信息。 例如,您会找到以下内容:
Array (
[Model] => Array (
[page] => 2
...
[options] => Array (
[limit] => 20
...
'limit'
是“每页项目”, 'page'
是该页。
有了这些信息,将这种计数器插入您的输出中应该是很简单的。
$page = $this->params['paging']['Model']['page'];
$limit = $this->params['paging']['Model']['options']['limit'];
$counter = ($page * $limit) - $limit + 1;
foreach ($models as $model) {
echo $counter;
// normal $model output
$counter++;
}
分页逻辑如下:
从my_table中选择count(*)... ... ORDER BY ...;
首先,您想知道要分页多少条记录。
然后,将记录总数除以每页所需的记录数,然后“限制”该数目,否则最后几条记录将不会得到它们自己的页面。
现在您有了记录数和页数。
接下来,无论您在哪个页面上,都将页号减1乘以每页的记录数,这样您就知道从哪个记录开始抓取其他记录。 该查询将类似于:
SELECT * FROM my_table WHERE ... ORDER BY ... LIMIT {每页记录x(当前页数-1)},{每页记录}
减去1的原因是,如果您在第1页上并且例如每页抓取20条记录,则1 x 20 = 20,并且我们要从0开始抓取记录,而不是从第一页开始抓取20条记录。 因此,您在乘前减去1。
然后,您只需显示记录!
:d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.