CONTENT MANAGEMENT SYSTEM
Blox Logo
Blox CMS — блочный метод сайтостроения
.
 
Blox Help


Пагинация — это постраничный вывод контента. Термин пагинация происходит от от анг. слова pagination — порядковая нумерация страниц.

Пагинация реализуется при разработке гостевых книг, форумов, каталогов объявлений, страниц комментариев, списков статей и в любых других случаях, когда из общего массива данных, хранящихся в базе данных, желательно выбрать только ее часть, а не выводить все на одной странице.

Сначала показываются первые записи, остальные записи можно прочитать с помощью навигационного блока с нумерацией страниц, кнопками "предыдущая", "первая", "следующая", "последняя".

←→

Выборка по частям (запрос part)

Если в блоке очень много записей, то их желательно разбивать на части, отображая на страничке только одну часть (pagination).

Чтобы записи блока начали автоматически разбиваться на части, нужно с помощью параметра шаблона $params['part']['limit'] задать максимальное число записей в каждой части.

При этом, дополнительно в шаблон будут передаваться следующие переменные шаблона: $part (номер выбранной части) и $numOfParts (количество частей), а также производные от них, созданные для удобства, а именно: $prevpart (номер предыдущей части), $nextpart (номер следующей части), $parts (массив с номерами всех частей по порядку).


Пример 1: c ссылками на части

parts.tdd

<?php

$types[1] = 'varchar(100)';
$types[2] = 'varchar(100)';
$types[3] = 'varchar(100)';

$params['part']['limit'] = 10;
$params['isMultiRec'] = true;

?>

parts.tpl

<?php

    echo "<table>";
    foreach ($tab as $dat)
    echo "
        <tr>
        <td>{$dat['edit']}</td>
        <td>$dat[1]</td>
        <td>$dat[2]</td>
        <td>$dat[3]</td>
        </tr>
    ";
    echo "</table>";


    echo "<br>";
    foreach ($parts as $p)
        echo "<a href='?page=$page&block=$block&part=$p'>$p</a>";

?>
Для формирования ссылки на ту или иную часть блока служит массив $parts, в котором идет простой перебор от единицы до наибольшего номера части, равного $numOfParts.


Пример 2: c переходами на следующую и предыдущую страницу

prev next

Приведем более полный пример с навигацией между смежными частями и инактивацией ссылки на текущую часть (см. снимок). Для этого понадобится переменная $numOfParts (общее число частей).

parts.tpl

<?php 

    echo "<table>";
    foreach ($tab as $dat)
    echo "
        <tr>
        <td>{$dat['edit']}</td>
        <td>$dat[1]</td>
        <td>$dat[2]</td>
        <td>$dat[3]</td>
        </tr>
    ";
    echo "</table>";


    # prev
    if ($part > 1)
    {
        $prevpart = $part-1;
        echo "<a href='?page=$page&block=$block&part=$prevpart'>предыдущая</a>";
    }
    else
        echo "предыдущая";

    # next
    if ($part < $numOfParts)
    {
        $nextpart = $part+1;
        echo "<a href='?page=$page&block=$block&part=$nextpart'>следующая</a>";
    }
    else
        echo "следующая";

    # parts
    echo "<br>";
    foreach ($parts as $p)
    {
        if ($p == $part)
            echo "$p";
        else
            echo "<a href='?page=$page&block=$block&part=$p'>$p</a>";
    }

?>

В принципе, для перебора частей не обязательно использовать массив $parts – достаточно и переменной $numOfParts, так как перебор можно осуществлять от 1 до $numOfParts с помощью php-оператора for.


См. также