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

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

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

При этом, дополнительно в шаблон будут передаваться следующие переменные шаблона: $request['part']['current'] (номер выбранной части) и $request['part']['numOfParts'] (количество частей), а также производные от них, созданные для удобства, а именно: $request['part']['prev'] (номер предыдущей части), $request['part']['next'] (номер следующей части), $request['part']['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 ($request['part']['parts'] as $p)
        echo "<a href='?page=$page&block=$block&part=$p'>$p</a>";

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


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

prev next

Приведем более полный пример с навигацией между смежными частями и инактивацией ссылки на текущую часть (см. снимок). Для этого понадобится переменная $request['part']['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 ($request['part']['current'] > 1)
    {
        $prevpart = $request['part']['current']-1;
        echo "<a href='?page=$page&block=$block&part=$prevpart'>предыдущая</a>";
    }
    else
        echo "предыдущая";

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

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

?>

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


См. также

 

   



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

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

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