As the question is quoted that the answer should provide a solution for beginner users, so I tried to make the simplest example possible, with the simplest calculation I could think of.
Step by step
Paging is the process of separating many results from some search, so it is mandatory to have an object to be manipulated in that pagination. In the example this object is a array
simple of string
where each string
represents a page (whether an article, or a list of products, etc).
Another thing we should take into consideration is to safeguard the current page the user is on, the demo uses the GET
of PHP
to store and enter the current page value to the user.
The last thing is to think about the goal, which is to not only display the content of the selected page, it shows the link to X
previous pages and X
back pages of the current page. We soon defined some variables, such as:
display
- which stores the value defined as the maximum quantity of
links of pages.
middle
- which is only the previous variable divided by 2 for
inform how many pages before and after the current page we will
fetch.
After becoming aware of the requirements to make such a pagination, we go to the code:
pager.php:
<?php
// array que simula o objeto a ser paginado, que normalmente é resultado de uma busca na persistência
$pages = array
(
'page01', 'page02', 'page03', 'page04', 'page05',
'page06', 'page07', 'page08', 'page09', 'page10',
'page11', 'page12', 'page13', 'page14', 'page15',
'page16', 'page17', 'page18', 'page19', 'page20',
'page21', 'page22', 'page23', 'page24', 'page25',
'page26', 'page27', 'page28', 'page29', 'page30',
);
// Resgata número página atual da URL, o padrão é 1
$current = isset($_GET['page']) ? $_GET['page'] : 1;
// Informa número de links para navegação de páginas a ser mostrado
// de preferência ser ímpar, para que possa haver um meio exato para página atual
$display = 7;
// se a página existir
if(array_key_exists($current - 1, $pages)):
// exibe conteúdo da mesma
echo "<h1>Current page: {$pages[$current - 1]}</h1>";
// define o meio dos links, defino um contador com o mesmo valor
// ele auxiliara na hora de mandar x links para direito e x para esquerda
$middle = $cont = (int)($display/2);
// Percorre de 0 até o limite de links
for($pg = 0; $pg < $display; $pg ++):
// Se não é o meio da quantidade de links
if($pg != $middle)
{
// Se for uma página anterior
if($pg < $middle)
{
// Página será igual a atual menos o contador
$page = $current - $cont;
// Decrementa contador, para que a proxima pagina seja +1
$cont --;
}
// Se for uma página posterior
else if($pg > $middle)
{
// Define numero da página, como atual + contador + 1 (que indica que já passou a página atual também)
$page = $current + $cont + 1;
// Incrementa contador, para que a proxima pagina seja +1
$cont ++;
}
// Exibe o link apenas se a página tiver no intervalo de resultados
if($page > 0 and $page <= count($pages))
echo "<a href='pager.php?page={$page}'>{$page}</a> | ";
}
// Se for a página atual (estará no meio)
else
{
// Exibe o link em negrito
echo "<strong><a href='pager.php?page={$current}'>{$current}</a></strong> | ";
}
endfor;
// Se a página não existir
else:
echo "<h1>Page not exists!</h1>";
endif;
?>
http://stackoverflow.com/questions/11272108/logic-behind-pagination-like-google
– Jefferson Silva
Do I reward or not reward? Here’s the question!
– Wallace Maxters
No need... I just informed a link of a reply already given here mmesmo
– Jefferson Silva
@Jeffersonsilva right here? stack overflow != stack overflow
– Guilherme Nascimento