我有一张表,里面有很多记录。现在,我在一个页面上选择它们。但我想创建一个列表。该列表将包含多个(大约5-10)页。
为此,我应该使用物理页面(page1.php | page2.php | page3.php)还是虚拟页面(page.php?number=1 | page.php?number=2 | page.php?number3)?
发布于 2011-08-31 17:18:01
在你传递页码的地方,限定使用一个页面。
否则它几乎是静态的,因为每次你需要“更多的页面”时都需要创建一个额外的页面,但是如果你给一个页面传递了一个偏移量,你可以使用'LIMIT offset,pagesize‘将其添加到查询中。
如下所示:
$pagesize = 30;
$data = YOUR_QUERY_METHOD(YOUR_QUERY . ' LIMIT ' . $pagesize*$_GET['number'] . ', ' . $pagesize);发布于 2011-08-31 17:33:13
我将在我的回答中重新表述你的问题,然后回答我的问题……
快速概述
您所拥有的是一个结果集,您希望这个结果集能够对结果进行分页,这样就不会一次显示结果中的所有项。您希望能够在每页显示任意数量的结果,但最有可能的是5或10个结果。
回答
好的,让我们假设您有您的结果集,它是在您查看index.php时加载的。
但是,您想要做的是仅显示结果集中的一定数量的项目。
现在我将虚构一个虚构的结果集。
$results = array(
array( 'id' => 1, 'Apple'),
array( 'id' => 2, 'Orange'),
array( 'id' => 3, 'Banana'),
array( 'id' => 4, 'Pinapple'),
array( 'id' => 5, 'Kiwi'),
array( 'id' => 6, 'Starberries'),
array( 'id' => 7, 'Blackberries'),
array( 'id' => 8, 'Melon'),
array( 'id' => 9, 'Opal'),
array( 'id' => 10, 'Zuchini'),
array( 'id' => 11, 'Peach'),
array( 'id' => 12, 'Pear'),
array( 'id' => 13, 'Plum')
);好的,现在,这可以是我们想象的结果集。对于第1页,您要做的是仅检索前5个项目。
因此,当有人访问index.php?page=1或index.php时,他们只能得到(苹果、橙子、香蕉、Pinapple和奇异果)。
这称为分页。您可以在检索到结果后对其进行分页,也可以在获得结果之前使用mySQL中的offsets和limits进行分页。因为您没有说您正在使用mySQL,所以我假设您已经有了所有的结果。
现在,如果你有一个类似这样的请求
GET /index.php?page=1然后你可以这样做:
$page = $_GET['page'];
$page ? is_numeric($page) && isset($page) ? $page : 1;
$count = 5;
$offset = $page == 1 ? 0 : (($page * $count) -1 ) - $count;
// Slice now contains your results which you can use to foreach() through
$slice = array_slice($results, $offset,$count);结果
Array
(
[0] => Array
(
[id] => 1
[0] => Apple
)
[1] => Array
(
[id] => 2
[0] => Orange
)
[2] => Array
(
[id] => 3
[0] => Banana
)
[3] => Array
(
[id] => 4
[0] => Pinapple
)
[4] => Array
(
[id] => 5
[0] => Kiwi
)
)在本例中,我没有进行任何实际的过滤,也没有认真地验证$_GET页面的格式是否正确,但是您应该明白这一点。
还有大量的资源可以让这一切变得更容易。我个人是Zend_Paginator的超级粉丝,我使用它来满足我所有的分页需求。查看此处Zend_Paginator
还有其他资源:
https://stackoverflow.com/questions/7254864
复制相似问题