CEPII
@CEPII
Житель убежища 101

Как сделать постраничную навигацию на своем сайте php?

spoiler
$server = '********'; 
    $user = '**********'; 
    $pass = '***********'; 

    $db = '**************'; // БД
    $table = 'posts'; 

    $chislo = 10; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ

    
    $text_error = '<br />Ошибочка вышла!';

    
    $connect = mysql_connect ($server, $user, $pass);
    if (!$connect) {
    echo $text_error;
    exit;
    }


    $select = mysql_select_db($db);
    if (!$select) {
    echo $text_error;
    exit;
    }
      

    // СОЗДАЁМ ЗАПРОС
    $result = mysql_query("SELECT * from $table ORDER by id desc");
    $num_rows = mysql_num_rows($result);

    // А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
    $num_rows = ceil($num_rows/$chislo); 
 
 
    $total = intval(($num_rows- 1) / $chislo) + 1; 

    if (isset($_GET['str'])) {
    $nav = $_GET['str'];
    }
    else {
    $nav = 0;
    }
    $nav = intval($nav); 
    echo 'Навигация: ';

    if ($i != 1) {
    echo '<a href="'.$PHP_SELF.'?str=1"><</a> ';    
    }

     // ВЫВОДИМ НОМЕРА СТРАНИЦ
    for ($i=1; $i<=$num_rows; $i++) {
    if ($i != $nav) {
    echo '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';
    }
    else {
    // АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
    echo '<span>'.$i.'</span> ';
    }
    }
    if ($i != $num_rows) {
    echo '<a href="'.$PHP_SELF.'?str='.$num_rows.'">></a> ';    
    }

Здравствуйте, как исправить данный код, чтобы выводило только текущий номер страницы и еще 2, которые рядом с ним. Пример:
Навигация: < 2 3 4 >
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
profesor08
@profesor08 Куратор тега PHP
Как-то так. Немного деления, сложения, вычитания и округления.

$_GET["page"] = "12";

$page = 0;
$numRows = 122;
$rowsPerPage = 5;
$plus = 2;

if (isset($_GET["page"]) && $_GET["page"] > 0) {
    $page = intval($_GET["page"]);
}

$maxPage = ceil($numRows / $rowsPerPage);

if ($page - $plus > 0) {
    echo "< ";
}

for ($i = $page - $plus; $i <= $page + $plus; $i++) {
    if ($i < 0) continue;
    if ($i > $maxPage) break;
    echo $i . " ";
}

if ($page + $plus < $maxPage) {
    echo ">";
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@inFureal
В запросе к базе данных
$page = 2;
// Количество элементов на странице
$count = 10;
$offset = $count * $page;

SELECT * FROM table LIMIT $count OFFSET $offset
Как-то так
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы