Я сделал свой собственный класс Paginator, он по-английски, но комментарии на испанском языке.
Это действительно прост в использовании. Для конструктора требуется общее количество элементов для списка, текущей страницы, лимитов элементов на странице и раздела, в котором вы находитесь (по разделу Я имею в виду, если вы занимаетесь разбиением на страницы по разделам).
Так что, если вы должны постраничной 100 элементов (10 элементов на странице), в разделе «Автомобили», и вы на первой странице, вы делаете это:
$paginator = new Paginador(100, 1, 10, "Cars");
echo $paginator->procesarHTML();
Это эхо HTML. Чтобы изменить HTML-версию, измените procesarHTML()
. Таким образом, вы получите кнопки для каждой страницы (<a href="/SECTION/PAGE/#pagina">PAGE</a>
). На текущей странице будет добавлен класс css, чтобы пользователь мог знать, на какой странице он находится.
Не забудьте изменить переменную класса $_secciones
. Добавьте разделы, которые вы разрешите.
<?php
/*------------------------------------------------------------------
-- Descripcion: Clase para Paginar con la Clase Template HTML.
-- Version: v 1.1.0 | Ultima version: v 1.0.0
-- Ultima Edicion: 23/05/2016 08:41
--------------------------------------------------------------------
-- Autor: Matias Hernan Lauriti | [email protected]
-- Fecha Creacion: 25/05/2014
--------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-------------------------------- CSS -------------------------------
#paginador{ margin-bottom: 5px; }
#paginador ol{ text-align: center; }
#paginador ol li{
margin-top: 8px;
display: inline-block;
font-family: Arial;
}
#paginador ol li a{
height: 24px;
background-color: #454648;
background-image: linear-gradient(#454648,#2F2F31);
background-image: -webkit-linear-gradient(#454648,#2F2F31);
background-image: -moz-linear-gradient(top,#454648,#2F2F31);
background-image: -o-linear-gradient(top,#454648,#2F2F31);
background-image: -ms-linear-gradient(top,#454648,#2F2F31);
box-shadow: 0 2px 5px 0px #000, 0px 1px 0px 0px #5B5C5D inset;
padding: 3px 8px;
border-radius: 3px;
font-size: 12px;
}
#paginador ol li a:hover{
background-color: #FBB92C;
background-image: linear-gradient(#FBB92C,#D49B29);
background-image: -webkit-linear-gradient(#FBB92C,#D49B29);
background-image: -moz-linear-gradient(top,#FBB92C,#D49B29);
background-image: -o-linear-gradient(top,#FBB92C,#D49B29);
background-image: -ms-linear-gradient(top,#FBB92C,#D49B29);
box-shadow: 0 2px 5px 0px #000, 0px 1px 0px 0px #EECF91 inset;
}
#paginador ol li a:active{
background-color: #454648;
background-image: linear-gradient(#454648,#2F2F31);
background-image: -webkit-linear-gradient(#454648,#2F2F31);
background-image: -moz-linear-gradient(top,#454648,#2F2F31);
background-image: -o-linear-gradient(top,#454648,#2F2F31);
background-image: -ms-linear-gradient(top,#454648,#2F2F31);
box-shadow: 0px 0px 1px 0px #262626 inset, 0 -1px 1px 0 #000;
}
#paginador ol li a.seleccionado{
background-color: #272728;
background-image: linear-gradient(#272728,#2F2F31);
background-image: -webkit-linear-gradient(#272728,#2F2F31);
background-image: -moz-linear-gradient(top,#272728,#2F2F31);
background-image: -o-linear-gradient(top,#272728,#2F2F31);
background-image: -ms-linear-gradient(top,#272728,#2F2F31);
box-shadow: 0px 0px 1px 0px #262626 inset, 0 -1px 1px 0 #000;
}
---------------------------- Utilización ---------------------------
$paginador = new Paginador($row['total'], PAGINA, 10, SECCION);
echo $paginador->procesarHTML();
--------------------------------------------------------------------*/
class Paginador {
/* Variables */
private $_total = 1;
private $_paginaActual = 1;
private $_limitePorPagina = 10;
private $_paginasTotales = 1;
private $_seccion = 'noticias'; // Seccion Default
private $_secciones = array('noticias','videos'); // Secciones que tomo como validas desde 1 hasta n
/* Metodos */
public function __construct($total = 1, $paginaActual = 1, $limitePorPagina = 10, $seccion = NULL) {
$this->_setTotal($total); // Total de elementos a listar
$this->_setPaginaActual($paginaActual);
$this->_setLimitePorPagina($limitePorPagina); // Limite de elementos a listar por página
$this->_setSeccion($seccion); // Sección inicial
$this->_procesar();
}
private function _setPaginaActual($pagina) {
if(!empty($pagina) && is_numeric($pagina) && $pagina > 0) $this->_paginaActual = $pagina;
}
private function _setLimitePorPagina($limite) {
if(!empty($limite) && is_numeric($limite) && $limite > 0) $this->_limitePorPagina = $limite;
}
private function _setTotal($total) {
if(!empty($total) && is_numeric($total) && $total > 0) $this->_total = $total;
}
private function _setSeccion($seccion) {
if(in_array($seccion,$this->_secciones)) $this->_seccion = $seccion;
}
private function _procesar() {
$this->_paginasTotales = ceil($this->_total/$this->_limitePorPagina); // Redondeo para arriba, si tengo 1.5 paginas, tengo 2 para mostrar el .5 restante
if($this->_paginaActual > $this->_paginasTotales) $this->_paginaActual = 1;
}
public function getLimit($ordenAscendente = true) {
if($ordenAscendente == true) {
if($this->_total - ($this->_paginaActual * $this->_limitePorPagina) < 0)
return '0';
return ($this->_total - ($this->_paginaActual * $this->_limitePorPagina));
}else
return (($this->_paginaActual - 1) * $this->_limitePorPagina);
}
public function procesarHTML($sufijo = '', $sig_ant = true, $prim_ult = true) {
$paginadorHTML = NULL;
if($this->_paginasTotales > 0) {
$paginadorHTML = ' <nav id="paginador">';
$paginadorHTML .= ' <ol>';
if($this->_paginasTotales > 2 && $this->_paginaActual > 1 && $prim_ult == true) $paginadorHTML .= ' <li><a href="/'.$sufijo.$this->_seccion.'/1/#pagina"><< Primera</a></li>';
if($this->_paginasTotales > 1 && $this->_paginaActual > 1 && $sig_ant == true) $paginadorHTML .= ' <li><a href="/'.$sufijo.$this->_seccion.'/'.($this->_paginaActual - 1).'/#pagina"><<</a></li>';
for($i = 1; $i <= $this->_paginasTotales; $i++)
$paginadorHTML .= ' <li><a href="/'.$sufijo.$this->_seccion.'/'.$i.'/#pagina"'.($this->_paginaActual == $i ? ' class="seleccionado"' : '').'>'.$i.'</a></li>';
if($this->_paginasTotales > 1 && $this->_paginaActual < $this->_paginasTotales && $sig_ant == true) $paginadorHTML .= ' <li><a href="/'.$sufijo.$this->_seccion.'/'.($this->_paginaActual + 1).'/#pagina">>></a></li>';
if($this->_paginasTotales > 2 && $this->_paginaActual < $this->_paginasTotales && $prim_ult == true) $paginadorHTML .= ' <li><a href="/'.$sufijo.$this->_seccion.'/'.$this->_paginasTotales.'/#pagina">Ultima >></a></li>';
$paginadorHTML .= ' </ol>';
$paginadorHTML .= ' </nav>';
}
return $paginadorHTML;
}
}
?>
боян так много вопросов –
Возможная Дубликат [Простой PHP скрипт PAGINATION] (http://stackoverflow.com/questions/3705318/simple-php-pagination -script) – Jeff
@Jeff Вы прочитали содержание своей ссылки или заданный вопрос? Это абсолютно не то же самое. Я был отмечен вашим комментарием. – keupsonite