2016-06-19 4 views
-2

현재 페이지와 4 개의 가장 가까운 기존 페이지에 대한 단추가있는 페이지 탐색을 만들고 싶습니다. 다음은 몇 가지 예입니다.PHP에서 페이지 매김 - 올바르게 처리하는 방법?

  • 현재 페이지는 그 사용자가 페이지 3, 4, 5, 6의 버튼을 표시한다 (5) 인 경우 7.
  • 현재 페이지가 1이면 - 1, 2, 3, 4, 5
  • 현재 페이지가 8 만 9 페이지에만있는 경우 - 5, 6, 7, 8, 9

난 당신이 아이디어를 얻을 바랍니다. 사용할 수있는 다음과 같은 변수 :

  • $ firstPage
  • $ previousPage
  • $ currentPage
  • $ nextPage
  • $ LASTPAGE

이 어떻게 할 것인가? 또는 탐색을 위해 버튼을 표시 할 페이지와 관련하여 사용할 수있는 더 나은 논리가 있습니까?

+1

속는 [간단한 PHP 페이지 매김 스크립트] (의 –

+0

가능한 중복 http://stackoverflow.com/questions/3705318/simple-php-pagination -script) – Jeff

+0

@Jeff 귀하의 링크 내용이나 질문 사항을 읽었습니까? 이것은 절대적으로 동일하지 않습니다. 나는 당신의 의견에 깃발을 꼈다. – keupsonite

답변

2

나는 내 자신의 Paginator 클래스를 작성했지만, 영어로되어 있지만 주석은 스페인어로되어 있습니다.

정말 사용하기 쉽습니다. 생성자는 현재 페이지, 페이지 당 요소 제한 및 현재 존재하는 섹션을 나열하기 위해 요소의 합계가 필요합니다 (섹션별로 페이지 매김을 수행하는 경우).

$paginator = new Paginador(100, 1, 10, "Cars"); 
echo $paginator->procesarHTML(); 

이것은 HTML 에코 것 : 당신은 "자동차"섹션에서 100 개 항목을 (페이지 당 10 개 항목), 쪽수를 매기다해야하고 당신이 첫 번째 페이지에있는 경우

그래서, 당신은이 작업을 수행. HTML formated 수정을 변경하려면 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">&lt;&lt; Primera</a></li>'; 
      if($this->_paginasTotales > 1 && $this->_paginaActual > 1 && $sig_ant == true) $paginadorHTML .= '       <li><a href="/'.$sufijo.$this->_seccion.'/'.($this->_paginaActual - 1).'/#pagina">&lt;&lt;</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">&gt;&gt;</a></li>'; 
      if($this->_paginasTotales > 2 && $this->_paginaActual < $this->_paginasTotales && $prim_ult == true) $paginadorHTML .= '       <li><a href="/'.$sufijo.$this->_seccion.'/'.$this->_paginasTotales.'/#pagina">Ultima &gt;&gt;</a></li>'; 

      $paginadorHTML .= '      </ol>'; 
      $paginadorHTML .= '     </nav>'; 

     } 

     return $paginadorHTML; 

    } 

} 

?> 
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);