/** * 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; }
/** * * @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">«</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">»</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]; }