Задать вопрос
mark_edinoroglove
@mark_edinoroglove

Как сделать пагинацию для сайта?

Здравствуйте, есть сайт со статьями, статьи хранятся в бд mysql, подскажите, как можно сделать пагинацию для сайта, весь инет облазел, находил только как сами кнопки сделать, но как сделать основную работу пагинацию, не нашёл(
  • Вопрос задан
  • 165 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
Kozack
@Kozack
Thinking about a11y
Всё просто.
Ваш сервер отдаёт на клиент какое-то количество записей на страницу. Предположим что 10.
Клиент в свою очередь, когда хочет получить любую страницу, передаёт дополнительный параметр на сарвер. Например https://example.com/?page=2
Сервер проверяет наличие этого параметра. И возвращает с 20 по 30 записи, тем самым реализуя как бы вторую страницу, хотя технически это всё та же страница, на которой выводятся другие записи.

https://stackoverflow.com/questions/3799193/mysql-...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
tundramani
@tundramani
тут нужен настоящий программист
умение гуглить тут недостаточно
Ответ написан
Комментировать
@66demon666
Сетевой админ, АТС-админ
Ну так вам надо понять что такое пагинация, остальное только вопрос реализации. Грубо говоря, у нас 1000 статей. Сразу 1000 выводить на одной странице никому не надо - это тяжело и неудобно для пользователя, как минимум. Поэтому на странице мы будем отображать куски по, например, 10 статей, а ссылки на остальные "куски", они же "страницы" мы будем выводить, например, внизу страницы (в классическом варианте). Адресная строка в этом случае выглядит примерно как site.ru/catalog.php?page=2. То есть видим GET-параметр, который и определяет, какую страницу нам надо вывести на экран. Для реализации вам понадобятся PHP и основы SQL. Конкретно OFFSET и LIMIT. Удачи тебе!
Ответ написан
Комментировать
@generate
...
Тут удобно расписано как сделать www.php.su/articles/?cat=examples&page=062
Доработал его для себя

$db = new mysqli('localhost', 'root', 'root', 'basename'); //подключение к базе
$pageformat = '/test.php?page={pagenum}'; //Формат ссылки вместо {pagenum} будет номер страницы
$page = $_GET['page']; //Номер страницы
$num = 10; //Количество записей
$sql = "FROM `test`"; //sql запрос без SELECT

$result = Pagination ($db, $sql, $num, $pageformat, $page);

print_r($result['pagination']); //Ссылки на страницы

print_r($result['result']); //Контент в массиве

function Pagination ($db, $sql, $num, $pageformat, $page){
$result = $db->query("SELECT COUNT(*) ". $sql)->fetch_row();
$total = intval(($result[0] - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$getinfo = $db->query("SELECT * " .$sql. " LIMIT $start, $num");
$info = $getinfo->fetch_all(MYSQLI_ASSOC);
preg_match('/(?<a>.*?){pagenum}(?<b>.*?)/', $pageformat, $pg);
if ($page != 1) $pervpage = "<a href={$pg['a']}1{$pg['b']}><<</a><a href={$pg['a']}".($page - 1)." {$pg['b']}><</a>";
if ($page != $total) $nextpage = ' <a href='.$pg['a']. ($page + 1) .$pg['b'].'>></a><a href='.$pg['a'] .$total. $pg['b'].'>>></a>';
if($page - 2 > 0) $page2left = ' <a href='.$pg['a']. ($page - 2).$pg['b'].'>'. ($page - 2) .'</a> ';
if($page - 1 > 0) $page1left = '<a href='.$pg['a']. ($page - 1).$pg['b'].'>'. ($page - 1) .'</a> ';
if($page + 2 <= $total) $page2right = '  <a href='.$pg['a']. ($page + 2).$pg['b'] .'>'. ($page + 2).'</a>';
if($page + 1 <= $total) $page1right = '  <a href='.$pg['a']. ($page + 1).$pg['b'].'>'. ($page + 1).'</a>';
$pagination =  $pervpage.$page2left.$page1left.'<a class="active" href="#">'.$page.'</a>'.$page1right.$page2right.$nextpage;
$result = array('pagination' => $pagination,'result' => $info);
return $result;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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