Рейтинг@Mail.ru
 

Шаг 2

Основной принцип

Чтобы разбить данные на порции, в SQL есть специальный оператор - LIMIT. Он позволяет выбрать часть таблицы. Нужно только указать стартовую позицию и необходимое количество:
1
2
3
4
<?php

    $res 
mysqli_query($IRB_CONNECT, "SELECT * FROM `table` LIMIT 0, 10");    


А это значит, что количество строк на странице мы можем задать в конфигурационном файле, а стартовую позицию изменять динамически, поместив в GET-параметр ссылки:
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php



    
include './mysql.php';
 
// Количество строк на странице 
    
$num 10;

// Принимаем номер требуемой страницы      
    
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

// Формируем вывод 
    
$res mysqli_query(
$IRB_CONNECT, "SELECT * FROM `table` LIMIT ". (($page 1) * $num) .", "$num);
    
    
$table "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";

    if(
mysqli_num_rows($res) > 0)        
        while(
$row mysqli_fetch_assoc($res))
        {
            
$table .= "<tr>\n<td>\n\t"$row['text']. "\n</td>\n</tr>\n";
        }
     
    
$table .= "</table>\n";    
    
    echo 
$table;    
?>

<a href="?page=1">1</a>
<a href="?page=2">2</a>
<a href="?page=3">3</a>
<a href="?page=4">4</a>
<a href="?page=5">5</a>
<a href="?page=6">6</a>
<a href="?page=7">7</a>
<a href="?page=8">8</a>
<a href="?page=9">9</a>    
<a href="?page=10">10</a>


Вот, собственно, и весь принцип пагинатора. Если у Вас в таблице фиксированное количество строк, то можно вполне обойтись и таким скриптом.
А если количество данных меняются время от времени, то так не пойдет. Меню навигации нужно тоже сформировать динамически.

Для этого как минимум нам нужно знать, сколько всего записей в таблице. По этому потребуется еще один запрос.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php


    
include './mysql.php';
 

// Количество строк на странице 
    
$num 10;

// Принимаем номер требуемой страницы      
    
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

// Считаем количество строк в таблице и делим на заданное. Получится количество страниц   
    
$res mysqli_query($IRB_CONNECT,"SELECT COUNT(*) AS `cnt` FROM `table`");    
    
$row mysqli_fetch_assoc($res);
    $count $row['cnt'] / 
$num;
    
// Формируем меню    
    
$menu '';    
    
    for(
$i 1$i <= $count; ++$i)
        
$menu .= '<a href="?page='$i .'">'$i .'</a> ';

// Формируем вывод 
    
$res mysqli_query(
$IRB_CONNECT,"SELECT * FROM `table` LIMIT ". (($page 1) * $num) .", "$num);
    
    
$table "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";

    if(
mysqli_num_rows($res) > 0)        
        while(
$row mysqli_fetch_assoc($res))
        {
            
$table .= "<tr>\n<td>\n\t"$row['text']. "\n</td>\n</tr>\n";
        }
     
    
$table .= "</table>\n";    
    
    echo 
$table;
    echo 
$menu;    


Вот и всё, по большому счету пагинатор уже работает. Но он какой то ущербный и куций. Негодный вобщем.

Надо добавить красоты.