воскресенье, 17 апреля 2011 г.

Пагинатор или постраничный вывод информации из БД

Сегодня работаю над очередным проектом, понадобилось сделать постраничный вывод информации, то есть найти пагинатор. Решив не изобретать велосипед, а воспользоваться уже готовым решением я задал этот вопрос Google.
И нашел очень простое решение.
Оно располагается здесь
Вот исходник:


$nums = 10;

if (isset($_GET['page'])) {
    $page = intval($_GET['page']);
}
else {
    $page = 1;
}

$query = "SELECT COUNT(*) AS `counter`
            FROM `table`";
$sql = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($sql);

$elements = $row['counter'];

$pages = ceil($elements/$nums);


if ($page < 1) {
    $page = 1;
}
elseif ($page > $pages) {
    $page = $pages;
}


$start = ($page-1)*$nums;

// когда у нас в таблице нет записей
if ($start < 0) $start = 0;

$query = "SELECT *
            FROM `table`
            LIMIT {$start}, {$nums}";
$sql = mysql_query($query) or die(mysql_error());

while ($row = mysql_fetch_assoc($sql)) {
    // здесь выводим наши записи из базы
}




// далее нам надо прицепить листалку

$neighbours = 6;
$left_neighbour = $page - $neighbours;
if ($left_neighbour < 1) $left_neighbour = 1;

$right_neighbour = $page + $neighbours;
if ($right_neighbour > $pages) $right_neighbour = $pages;

if ($page > 1) {
    print ' <a href="?page=1">начало</a> ... <a href="?page=' . ($page-1) . '">←сюда</a> ';
}

for ($i=$left_neighbour; $i<=$right_neighbour; $i++) {
    if ($i != $page) {
        print ' <a href="?page=' . $i . '">' . $i . '</a> ';
    }
    else {
        // выбранная страница
        print ' <b>' . $i . '</b> ';
    }
}

if ($page < $pages) {
    print ' <a href="?page=' . ($page+1) . '">туда→</a> ... <a href="?page=' . $pages . '">конец</a> ';
}


Большое спасибо автору за простой код. 

Комментариев нет:

Отправить комментарий




Курс скорочтения