У меня есть пагинация в PHP, которая как в следующем изображении:
Однако, увеличивается соответствующее число страниц я ввожу больше реестров в компьютер в базу данных, так как он разворачивает мне из-за страницы 10 реестров. Мне хотелось бы, что например, в моей пагинации он показал себе с 1 до 10, и что, когда он прибудет к 10, он показал себе с 10 до 20... Не, если я объясняюсь.
Я оставляю код PHP, который он использует.
Здесь я оставляю тебе выбор, основанный на твоем коде и с минимальными изменениями на том же самом.
Идея достаточно простая (хотя я не знаю, ли объясню я ее хорошо) и он состоит из следующего: показывать всегда максимум 10 ссылок, которые начнутся с единицей и покончат со счастьем unidad+9 (или общее количество страниц, если unidad+9 он будет больше). Это означает, что для страницы 5, показанные ссылки будут 1 до 10; для страницы 13, ссылки будут 11 до 20, и т.д.
Для этого он надо: считать, каковым будет первое число и последнее число, которое будет нужно показывать, и способствовать тому, чтобы цикл был только между ними. Потом во время показывания стрел будет нужно подтверждать, меньше ли, чем 10 первая страница (в котором случае она не явится стрелой в левую сторону), или если последняя страница будет равна общему количеству страниц (в случае которых она не явится стрелой в правую сторону).
Здесь я оставляю тебе пример, из как он был бы сделан:
Заметь - Я уверен (почти), что возможно упрощать каким-то образом вычисление первого и последнего, но мой мозг жарился прямо сейчас (изначально у него было супер-сложное вычисление и это уменьшал до этого)
<?php
// calculamos la primera y última página a mostrar
$primera = $pagina - ($pagina % 10) + 1;
if ($primera > $pagina) { $primera = $primera - 10; }
$ultima = $primera + 9 > $total_paginas ? $total_paginas : $primera + 9;
?>
<nav aria-label="Page navigation" class="text-center">
<ul class="pagination">
<?php
if ($total_paginas > 1) {
// comprobamos $primera en lugar de $pagina
if ($primera != 1)
echo '<li><a href="'.$url.'?pagina='.($primera-1).'" aria-label="Previous"><span aria-hidden="true">«</span></a></li>';
// mostramos de la primera a la última
for ($i = $primera; $i <=$ultima; $i++){
if ($pagina == $i)
echo '<li class="active"><a href="#">'.$pagina.'</a></li>';
else
echo '<li><a href="'.$url.'?pagina='.$i.'">'.$i.'</a></li>';
}
if ($i <= $total_paginas)
echo '<li><a href="'.$url.'?pagina='.($i).'"><span aria-hidden="true">»</span></a></li>';
}
?>
</ul>
</nav>
Делая что-то сходным с тем, что сделал Альваро, принимая твой код как базовый, это версия незначительно отличная, цели:
Идея об этом ответе состоит в том, чтобы добавлять выбор для тех, кто находят этот вопрос "в будущем".
$primera = ($pagina - 5) > 1 ? $pagina - 5 : 1;
$ultima = ($pagina + 5) < $total_paginas ? $pagina + 5 : $total_paginas;
if ($total_paginas > 1) {
// flecha anterior
if ($pagina != 1) {
echo '<li><a href="'.$url.'?pagina='.($pagina-1).'" aria-label="Previous"><span aria-hidden="true">«</span></a></li>';
}
// si la primera del grupo no es la pagina 1, mostramos la 1 y los ...
if ($primera != 1) {
echo '<li><a href="'.$url.'?pagina=1">'.$i.'</a></li>';
echo '<li>...</li>';
}
// mostramos la página actual, las 5 anteriores y las 5 posteriores
for ($i = $primera; $i <= $ultima; $i++){
if ($pagina == $i)
echo '<li class="active"><a href="#">'.$pagina.'</a></li>';
else
echo '<li><a href="'.$url.'?pagina='.$i.'">'.$i.'</a></li>';
}
// si la ultima del grupo no es la ultima (lol), mostramos la ultima y los ...
if ($ultima != $total_paginas) {
echo '<li>...</li>';
echo '<li><a href="'.$url.'?pagina='.$total_paginas.'">'.$i.'</a></li>';
}
// flecha siguiente
if ($pagina != $total_paginas) {
echo '<li><a href="'.$url.'?pagina='.($pagina+1).'"><span aria-hidden="true">»</span></a></li>';
}
}
Равный он состоит в том, чтобы менять немного концепцию того, что ты используешь сейчас. Я это делаю так что пагинация, я реализую ее в классе и потом в PHP
, я звоню в пагинацию.
Этот файл это у меня есть для связи PDO
, но если ты ищешь из-за Интернета, конечно, что ты это находишь для mysql
или mysqli
paginacion.php
class PDO_Pagination { public $connection; public $total; public $page; public $total_page; public $start_row; public $item; public $max_pages; public $max_rows; public $step; public $max; public $param; public $btn_first_page; public $btn_last_page; public $btn_next_page; public $btn_back_page; public $btn_page; public $btn_active; public function __construct($connection) { $this->btn_first_page = 'Previous'; $this->btn_last_page = 'Last'; $this->btn_next_page = 'Next'; $this->btn_back_page = 'Back'; $this->btn_page = 'Pag.'; $this->btn_active = 'active'; return $this->connection = $connection; } public function rowCount($query){ $query = $this->connection->prepare($query); $query->execute(); $this->total = $query->rowCount(); } public function config($max_pages, $max_rows){ $this->start_row = 0; $this->item = 0; $this->max_pages = $max_pages; $this->max_rows = $max_rows; $this->total_page = $this->total / $this->max_rows; if (isset($_GET["page"])){ $this->page = $_GET["page"]; if ($this->page < 0 || !preg_match("/^([0-9])+$/", $this->page)){ return; } $this->start_row = $this->page * $this->max_rows; $this->item = $_GET["item"]; if ($this->item < 0 || !preg_match("/^([0-9])+$/", $this->item)){ return; } $this->max_pages = $this->max_pages + $this->max_rows; $this->max = $_GET["max"]; if ($this->max < 0 || !preg_match("/^([0-9])+$/", $this->max)){ return; } $this->max_pages = $this->max; } if(isset($_GET["next_page"])){ $this->page = $_GET["next_page"]; if ($this->page < 0 || !preg_match("/^([0-9])+$/", $this->page)){ return; } $this->start_row = $this->page * $this->max_rows; $this->item = $_GET["item"]; if ($this->item < 0 || !preg_match("/^([0-9])+$/", $this->item)){ return; } $this->max = $_GET["max"]; if ($this->max < 0 || !preg_match("/^([0-9])+$/", $this->max)){ return; } $this->max_pages = $this->max + 1; } if(isset($_GET["back_page"])){ $this->page = $_GET["back_page"] - 1; if ($this->page < 0 || !preg_match("/^([0-9])+$/", $this->page)){ return; } $this->start_row = $this->page * $this->max_rows; $this->item = $_GET["item"] - 1; if ($this->item < 0 || !preg_match("/^([0-9])+$/", $this->item)){ return; } $this->max = $_GET["max"]; if ($this->max < 0 || !preg_match("/^([0-9])+$/", $this->max)){ return; } $this->max_pages = $this->max - 1; } if (isset($_GET["previous"])){ $this->max_pages = $this->max_pages; $this->start_row=0; $this->item = 0; } } public function pages($class=''){ if($this->item >= 1){ echo "<a class='$class' href='?previous=1".$this->param."'>$this->btn_first_page</a>"; echo "<a class='$class' href='?back_page=$this->page&item=$this->item&max=$this->max_pages".$this->param."'>$this->btn_back_page</a>"; } for($x = $this->item; $x < $this->max_pages; $x++){ while($x * $this->max_rows < $this->total){ $p = $x+1; $this->page == $p-1 ? $active = ' ' . $this->btn_active : $active = null; echo "<a class='$class$active' href='?page=$x&item=$this->item&max=$this->max_pages".$this->param."'>$p</a>"; break; } } $numbers = $this->page+1; echo "<span class='$class'>$this->btn_page <b>$numbers</b></span>"; if ($this->max_pages * $this->max_rows < $this->total){ $this->page = $this->page+1; $this->item = $this->item + 1; echo "<a class='$class' href='?next_page=$this->page&item=$this->item&max=$this->max_pages".$this->param."'>$this->btn_next_page</a>"; $this->page = round($this->total_page - 1); $this->item = round($this->total_page - $this->max_pages); $this->max = round($this->total_page); echo "<a class='$class' href='?page=$this->page&item=$this->item&max=$this->max".$this->param."'>$this->btn_last_page</a>"; } } }
Вызов в коде был бы:
<?php
$connection = dbConnect ();
$pagination = new PDO_Pagination($connection);
$pagination->rowCount("SELECT * FROM noticias WHERE publicado=1");
$pagination->config(5, 30);
$sql = "SELECT * FROM noticias WHERE publicado=1 ORDER BY fecha DESC LIMIT $pagination->start_row,
$pagination->max_rows";
$query = $connection->prepare($sql);
$query->execute();
$model = array();
while($rows = $query->fetch())
{
$model[] = $rows;
}
foreach($model as $row){
echo "<li class='li_noticias'>";
echo "<a href='".$row['idref'].".html' rel='follow'>";
//echo "<a href='noticias2.php?ref=".$row['idref']."' rel='follow'>";
echo $row['titulo'];
echo "</a>";
echo "</li>";
}
?>