我应该使用物理页面列表吗?

时间:2011-08-31 09:10:51

标签: php list virtual

我有一张包含相当多记录的表格。现在我在一页上选择它们。但我想创建一个列表。该列表将包含多个(约5-10)页。

为此,我应该使用物理(page1.php | page2.php | page3.php)还是虚拟页面(page.php?number = 1 | page.php?number = 2 | page.php?number3)?

2 个答案:

答案 0 :(得分:12)

我将在我的回答中重述你的问题,然后回答我的问题......

快速概述

您拥有的是结果集,并且您希望能够对结果进行分页,以便您不会同时显示结果中的所有项目。您希望能够在每页显示任意数量的结果,但最有可能是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=1index.php时,他们只能获得(Apple,Orange,Banana,Pinapple和Kiwi)。

这称为分页。您可以在检索结果后对结果进行分页,也可以在获得结果之前通过在mySQL中使用offsetslimits进行分页。因为您没有说过您正在使用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

其他资源:

答案 1 :(得分:0)

明确使用一个页面,您可以将页码传递给 否则它几乎是静态的,因为每次需要“更多页面”时你需要创建一个额外的页面,但是如果你通过例如对于一个页面的偏移量,您可以使用“LIMIT offset,pagesize”将其添加到查询中。

这样的事情:

$pagesize = 30;
$data = YOUR_QUERY_METHOD(YOUR_QUERY . ' LIMIT ' . $pagesize*$_GET['number'] . ', ' . $pagesize);