Как сделать так, чтоб на странице была пагинация с 1-5 страницу и стрелки, чтоб прыгать по 5 страниц. html сделал, вывод из базы сделал гет запросами всё работает. гуглил видел много примеров понять никак не получается, не понимаю как можно в цикле 5 < li> вывести а остальные через клик по стрелкам и так далее
Допустим у нас есть таблица posts:
+----+-------+------------+
| id | title | text |
+----+-------+------------+
| 1 | Post1 | Text post1 |
| 2 | Post2 | Text post2 |
| 3 | Post3 | Text post3 |
| 4 | Post4 | Text post4 |
| 5 | Post5 | Text post5 |
| 6 | Post6 | Text post6 |
| 7 | Post7 | Text post7 |
| 8 | Post8 | Text post8 |
+----+-------+------------+
index.php
<?php
//Подключения к БД
$user = 'root';
$pass = '';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$conn = new PDO('mysql:host=localhost;dbname=test', $user, $pass, $opt);
//Количество записей на одной странице
$limit = 3;
//Получаем страницу
$page = ($_GET['page']) ? $_GET['page'] : 1;
//С записи которой нужно начинать выборку
$offset = $limit * ($page - 1);
$sql_posts = "SELECT * FROM posts LIMIT $limit OFFSET $offset";
$posts = $conn->query($sql_posts)->fetchAll();
$sql_count = "SELECT COUNT(id) FROM posts";
//Количество записей в таблице posts
$count_post = $conn->query($sql_count)->fetchColumn();
//Следующая запись
$next_page = $page + 1;
//Предыдущая запись
$previous_post = $page - 1;
//Узнаем количество страниц
$pages = ceil($count_post / $limit);
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Пример пагинации</title>
</head>
<body>
<?php foreach ($posts as $post): ?>
<div class="container" style="width: 100px; background: bisque">
<div class="title"><h3><?php echo $post['title'] ?></h3></div>
<div class="content"><?php echo $post['text'] ?></div>
</div>
<?php endforeach; ?>
<?php for ($i = 1; $i <= $pages; $i++): ?>
<a href="index.php?page=<?php echo $i ?>"><?php echo $i ?></a>
<?php endfor; ?>
<?php if ($previous_post > 0):?>
<a href="index.php?page=<?php echo $previous_post ?>"><<</a>
<?php endif;?>
<?php if ($next_page <= $pages):?>
<a href="index.php?page=<?php echo $next_page ?>">>></a>
<?php endif;?>
</body>
</html>
Самое простое что можно придумать. В идеале добавить обработчик ошибок и написать классы обвертки Mysql
Решения второй задачи
<?php
//Подключения к БД
$user = 'root';
$pass = '';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$conn = new PDO('mysql:host=localhost;dbname=test666', $user, $pass, $opt);
//Количество записей на одной странице
$limit = 1;
//Получаем страницу
$page = ($_GET['page']) ? $_GET['page'] : 1;
//Получаем пагинацию
$pagination = ($_GET['pagination']) ? $_GET['pagination'] : 0;
//С записи которой нужно начинать выборку
$offset = $limit * ($page - 1);
$sql_posts = "SELECT * FROM posts LIMIT $limit OFFSET $offset";
$posts = $conn->query($sql_posts)->fetchAll();
$sql_count = "SELECT COUNT(id) FROM posts";
//Количество записей в таблице posts
$count_post = $conn->query($sql_count)->fetchColumn();
//Узнаем количество страниц
$pages = ceil($count_post / $limit);
//Лимит пагинации
$limit_pagination = 2;
$start_p = $pagination * $limit_pagination + 1;
$end_p = $start_p + $limit_pagination;
if ($end_p > $pages) $end_p = $pages + 1;
//С какой страници начинать
?>
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Пример пагинации</title>
</head>
<body>
<?php foreach ($posts as $post): ?>
<div class="container" style="width: 100px; background: bisque">
<div class="title"><h3><?php echo $post['title'] ?></h3></div>
<div class="content"><?php echo $post['text'] ?></div>
</div>
<?php endforeach; ?>
<?php for ($i = $start_p; $i < $end_p; $i++): ?>
<a href="index.php?page=<?php echo $i ?>"><?php echo $i ?></a>
<?php endfor; ?>
<?php if ($pagination > 0):?>
<a href="index.php?pagination=<?php echo $pagination - 1;?>"><<</a>
<?php endif;?>
<?php if (($end_p * $limit + 1) < $count_post):?>
<a href="index.php?pagination=<?php echo $pagination + 1 ?>">>></a>
<?php endif;?>
</body>
</html>
Постраничный вывод из MySQL coderhs.com/archive/mysqlpagenavigator
Посмотрите, как реализованы стрелки:
<?php
$dblocation = "localhost"; // Имя сервера
$dbuser = "root"; // Имя пользователя
$dbpswrd = ""; // Пароль
$dbname = "catalog"; // Имя базы данных
DEFINE('ITEMS_PER_PAGE', 5);
// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );
mysql_query( 'SET NAMES cp1251' );
// Выбираем базу данных
mysql_select_db( $dbname, $dblink );
// Выбираем из БД общее количество записей
$query = "SELECT COUNT(*) FROM products WHERE 1";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
// Проверяем, передан ли номер текущей страницы
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
// Сколько всего получится страниц
$cnt_pages = ceil( $total / ITEMS_PER_PAGE );
if ( $page > $cnt_pages ) $page = $cnt_pages;
// Начальная позиция
$start = ( $page - 1 ) * ITEMS_PER_PAGE;
$query = "SELECT id, title, price
FROM products
ORDER BY price ASC
LIMIT ".$start.", ".ITEMS_PER_PAGE;
$res = mysql_query( $query );
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="5" cellspacing="0">';
echo '<tr>';
echo '<th>ID</th>';
echo '<th>Наименование</th>';
echo '<th>Цена</th>';
echo '</tr>';
while( $prd = mysql_fetch_array( $res ) )
{
echo '<tr>';
echo '<td>'.$prd['id'].'</td>';
echo '<td>'.$prd['title'].'</td>';
echo '<td>'.$prd['price'].'</td>';
echo '</tr>';
}
echo '</table>';
// Строим постраничную навигацию
if ( $cnt_pages > 1 )
{
echo '<div style="margin:1em 0"> Страницы: ';
// Проверяем нужна ли стрелка "В начало"
if ( $page > 3 )
$startpage = '<a href="'.$_SERVER['PHP_SELF'].'?page=1"><<</a> ... ';
else
$startpage = '';
// Проверяем, нужна ли стрелка "В конец"
if ( $page < ($cnt_pages - 2) )
$endpage = ' ... <a href="'.$_SERVER['PHP_SELF'].'?page='.$cnt_pages.'">>></a>';
else
$endpage = '';
// Находим две ближайшие страницы с обоих краев, если они есть
if ( $page - 2 > 0 )
$page2left = ' <a href="'.$_SERVER['PHP_SELF'].'?page='.($page - 2).'">'.($page - 2).'</a> | ';
else
$page2left = '';
if ( $page - 1 > 0 )
$page1left = ' <a href="'.$_SERVER['PHP_SELF'].'?page='.($page - 1).'">'.($page - 1).'</a> | ';
else
$page1left = '';
if ( $page + 2 <= $cnt_pages )
$page2right = ' | <a href="'.$_SERVER['PHP_SELF'].'?page='.($page + 2).'">'.($page + 2).'</a>';
else
$page2right = '';
if ( $page + 1 <= $cnt_pages )
$page1right = ' | <a href="'.$_SERVER['PHP_SELF'].'?page='.($page + 1).'">'.($page + 1).'</a>';
else
$page1right = '';
// Выводим меню
echo $startpage.$page2left.$page1left.'<strong>'.$page.'</strong>'.$page1right.$page2right.$endpage;
echo '</div>';
}
?>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Прошу помощи или дать направление куда копатьЕсть задача от заказчика, если в двух словах то заказчик хочет, когда редактор вводит название...
Всем приветДля сайта Wordpress создал файл виджета со слайдером