我想创建一个页面导航,其中包含当前页面和4个最近的现有页面的按钮。以下是一些例子。
我希望你明白这个主意。可以使用以下变量:
你会怎么做?或者是否有更好的逻辑可用于在导航中显示按钮的页面?
答案 0 :(得分:2)
我已经完成了自己的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 | matiaslauriti@gmail.com
-- 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;
}
}
?>
答案 1 :(得分:1)
就像那样:
<?php
$currentPage = 5;
$lastPage = 9;
$firstPage = 1;
$between = 3;
function output($current, $limit, $between, $isAfter = false)
{
$i = $isAfter ? $current + 1 : $current - $between;
$max = $i + $between;
for ($i; $i < $max; $i++)
echo "<a href='#'>Page {$i}</a>";
}
if ($currentPage > $firstPage)
output($currentPage, $lastPage, $between);
echo "Page {$currentPage}!";
if ($currentPage < $lastPage)
output($currentPage, $lastPage, $between, true);