Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Giihh

Paginação

Recommended Posts

Olá,

Eu quero retornar todos os post da tabela mysql e exibir apenas 6 posts em cada página.

Eu consigo retornar todos os posts, mas não sei como limitar para exibir 6 em cada página

<?php
$query = "SELECT * FROM myTable";

$variable = $crud->viewdatas($query);
foreach ($variable as $key => $value) { 

?>
<div class="col-md-1"> 
<div class="thumbnail">
<a href="/category/<?php echo $value['post_slug'] ?>" >
<img src="http://example.com/uploads/images/<?php echo $value['post_slug'] ?>.jpg">
</a>
</div>
</div>
<?php 
}
?>

Criei urls amigaveis com a colunas post_slug do mysql e no htacess:

RewriteRule ^category/?$ example.com/my_category.php [NC,L]
RewriteRule ^category\/(.*)\/?$ example.com/posts.php?slug=$1 [NC,L]

O trecho html que insere paginação esta assim:

<nav style="text-align:center">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>

Quando clicar em um numero da paginação na url deve redirecionar para:

site.com/category/1
site.com/category/2
site.com/category/3
...

Como faço para inserir paginação e ir abrindo em cada página um limite de 6 posts sem repetir e sem ajax?

Agradeço ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse código deu pra ter uma ideia de como fazer:

site.com/category/yourpage.php?page=2

$page = $_GET['page'];
$resultsLimit = 6;
$upperLimit = 6 * $page;
$lowerLimit = (6*page) - $resultsLimit;
$query = "SELECT * FROM myTable WHERE id <= {$upperLimit} AND id >= {$lowerLimit}";

Mas como inserir os links automaticamente para: anterior, 1,2,3,..., próximo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem inúmeros tópicos aqui mesmo falando de paginação, pesquise por LIMIT do MySQL, ela serve exatamente para isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigada ESerra. Entendo que existe o LIMIT do mysql, mas a duvida é o limite para cada página sem repetição e como criar o link da paginação

 

No caso o limite para cada página, o código acima é compreensivel, ficando pendente entender como faço para colocar os links corretamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve criar os links das páginas conforme a exibição do select. Conforme o @ESerra comentou, existem inúmeros tópicos, aqui no fórum, explicando como proceder.

 

Digamos que você recebeu o parâmetro página 2 e sua visualização é de 6 ítens por página. Neste ponto em diante, é matemática pura:

$itensPorPagina = 6;
$numeroPagina = 2;

O seu SELECT continua igual na questão do LIMIT, só muda o offset:

$offSet = ($numeroPagina - 1 ) * $itensPorPagina;
$sql = 'SELECT * FROM table LIMIT {$itensPorPagina},{$offSet}';

Ou Seja:

SELECT * FROM table LIMIT 6 , 6

Já os links, você monta conforme a sua necessidade. Como eu já comentei, existem inúmeros tópicos sobre isso no fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou quase conseguindo

<?php
$max_links = 10;
$previous = $page - 1;
$next = $page + 1;
$pgs = ceil($total / $max); 
if($pgs > 1 ){ 

if($previous > 0){
echo "<li><a href='".BASE_URL."/category/$previous' aria-label='Previous'><span aria-hidden='true'>«</span></a></li>";
} else{

} 

for($i=$page-$max_links; $i <= $pgs-1; $i++) {
if ($i <= 0){
}else{
if($i != $page{
if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos
echo "<li><a href='".BASE_URL."/category/".($i)."'>".$i."</a></li> ..."; 
}else{
echo "<li><a href='".BASE_URL."/category/".($i)."'>".$i."</a></li>"; 
}
} else{
if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos
echo "<li class='active'><a>".$i."</a></li> ..."; }else{
echo "<li class='active'><a>".$i."</a></li>";}
} 
}
}
if($next <= $pgs){


echo "<li><a href='".BASE_URL."/category/$next' aria-label='Next'><span aria-hidden='true'>»</span></a></li>";


}else{

}

}

?>

Para a quantidade de registros no DB 7 paginas exibem todos os conteúdos,

 

No exemplo abaixo esta ativa a pagina 5 mas de qualquer numero ativado não exibe o numero 7 (ou qual for o ultimo numero). A pagina 7 só é exibida se clicar em >> na pagina 6. Mesmo dentro da página 7 não exibe o numero 7.

10mr4ev.png

 

Abaixo é como aparece a paginação na página 7:

2ngv3mw.png

Não esta exibindo também os pontinhos.

 

Outra coisa que percebi é que se eu colocar direto na url do navegador:

http://meusite.com/category/qualquernumero

vai abrir a mesma pagina da categoria, como todos: com header, titulo, footter, mas sem conteudo. Como evitar esse comportamento?

 

Ou se colocar:

http://meusite.com/category/0

aparece apenas o Header e abaixo a mensagem:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-4,4' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.