Пример #1
0
 /**
  * Verifica a página atual se está dentro dos limites
  * @return \Pagination
  */
 private function checkCurrentPage()
 {
     $this->TotalPaginas = Number::ceil(max($this->Count, 1) / $this->PorPagina);
     $this->CurrentPage = max(1, min($this->CurrentPage, $this->TotalPaginas));
     return $this;
 }
Пример #2
0
/**
 * 
 * @param int|array $Total
 * @param int $Page
 * @param int $Forpage
 * @param string $Link
 * @return array [array, total, paginas, pagination]
 */
function pagination($Total, $Page = 1, $Forpage = 30, $Link = null, $VisiblePages = 11)
{
    if ($VisiblePages % 2 == 0) {
        $VisiblePages--;
    }
    $Paginas = max(1, Number::ceil((is_array($Total) ? count($Total) : $Total) / $Forpage));
    $Page = max(1, min($Page, $Paginas));
    $html = '<nav>';
    if ($Paginas > 1) {
        $html .= '<ul class="pagination" >';
        $min = max(1, $Page - ($VisiblePages - 1) * 0.5);
        $max = min($Paginas, $Page >= ($VisiblePages - 1) * 0.5 + 1 ? $Page + ($VisiblePages - 1) * 0.5 : $Page + 11 - $Page);
        if ($max == $Paginas) {
            $min = max(1, $Page - $VisiblePages - 1 + ($Paginas - $Page));
        }
        # Ir para a primeira página
        if ($min > 1) {
            $html .= '<li><a data-page="1" href="' . str_replace('#page#', 1, $Link ? $Link : '#') . '" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>';
        }
        # Páginas
        for ($i = $min; $i <= $max; $i++) {
            $html .= '<li class="' . ($Page == $i ? 'active' : null) . '" ><a data-page="' . $i . '" href="' . str_replace('#page#', $i, $Link ? $Link : '#') . '" >' . $i . '</a></li>';
        }
        # Ir para a última página
        if ($max < $Paginas) {
            $html .= '<li><a href="' . str_replace('#page#', $Paginas, $Link ? $Link : '#') . '" data-page="' . $Paginas . '" aria-label="Next" ><span aria-hidden="true">&raquo;</span></a></li>';
        }
        $html .= '</ul>';
    }
    $html .= '</nav>';
    return ['array' => is_array($Total) ? array_slice($Total, ($Page - 1) * $Forpage, $Forpage) : [], 'total' => is_array($Total) ? count($Total) : $Total, 'pagina' => $Page, 'paginas' => $Paginas, 'pagination' => $html, 'limit' => 'LIMIT ' . $Forpage . ' OFFSET ' . ($Page - 1) * $Forpage];
}