Должен ли я использовать физическую страницу для списка? - PullRequest
0 голосов
/ 31 августа 2011

У меня есть таблица с несколькими записями.Сейчас на данный момент я выбираю их на одной странице.Но я хочу создать список.Список будет содержать несколько (около 5-10) страниц.

Для этого следует использовать физические (page1.php | page2.php | page3.php) или виртуальные страницы (page.php? Number = 1| page.php? number = 2 | page.php? number3)?

Ответы [ 2 ]

12 голосов
/ 31 августа 2011

Я собираюсь перефразировать ваш вопрос в моем ответе, а затем ответить на мой вопрос ...

Краткий обзор

То, что у вас есть, является набором результатов,и в этом наборе результатов вы хотели бы иметь возможность разбивать результаты на страницы, чтобы не отображать все элементы в результатах сразу.Вы хотели бы иметь возможность отображать любое количество результатов на странице, но, скорее всего, что-то вроде 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, они получат только (Apple, Orange, Banana, Pinapple и Kiwi).

Это называется нумерацией страниц .Вы можете разбить результаты на страницы после их получения или разбить их на страницы, используя offsets и limits в mySQL.Поскольку вы еще не сказали, что используете 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

Также другие ресурсы:

0 голосов
/ 31 августа 2011

Определенно используйте одну страницу, где вы передаете номер страницы.
В противном случае он почти статичен, потому что вам нужно будет создавать дополнительную страницу каждый раз, когда вам нужно «больше страниц», но если вы передаете, например, смещение вна одной странице вы можете просто добавить это к запросу, используя 'LIMIT offset, pagesize'.

Примерно так:

$pagesize = 30;
$data = YOUR_QUERY_METHOD(YOUR_QUERY . ' LIMIT ' . $pagesize*$_GET['number'] . ', ' . $pagesize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...