Pagination with friendly url

Asked

Viewed 775 times

1

I’m using friendly url and paging, but if I’m on the page 1 and click to go to the page 2 nothing happens, but in my url is the correct path localhost/produtos/emagrecimento/pagina/2/ however and displayed the same products of page 1.

//recuperar o id passado pela url
$url = (isset($_GET['url'])) ? $_GET['url'] : '';
$explode = explode('/', $url);
$categoria = mysqli_real_escape_string($conecta, $explode[1]);

//Verificar se esta sendo passado na URL a pagina atual, senao  atribuida a pagina 
$pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : 1;
if ($pagina <= 0) {
header('Location: produtos.php');
} else {

//Selecionar todos os produtos da tabela
$sql = "SELECT * FROM produtos";
$query = mysqli_query($conecta, $sql);

//Contar o total de produtos
$total_linhas = mysqli_num_rows($query);


//Seta a quantidade de produtos por pagina
$quantidade_pg = 3;

//calcular o numero de pagina necessarias para apresentar os produtos
$num_pagina = ceil($total_linhas / $quantidade_pg);



//Calcular o inicio da visualizacao
$incio = ($quantidade_pg * $pagina) - $quantidade_pg;

//Selecionar os produtos a serem apresentado na pagina
$sql = "SELECT * FROM produtos WHERE categoria='$categoria' ORDER BY nome ASC limit $incio, $quantidade_pg";
$query = mysqli_query($conecta, $sql);
$query_produtos = mysqli_num_rows($query);
$linha_produtos = mysqli_fetch_assoc($query);
}

displays the data

 <?php
    while ($linha_produtos = mysqli_fetch_assoc($query)) {
                        ?>
          <div class="col-md-3 col-sm-6">

               <div class="cause">
                    <img src="<?php echo pg ?>/assets/images/produtos/<?php echo $linha_produtos['imagem_produto'] ?>" alt="" class="cause-img img-thumbnail img">
                    <h4 class="cause-title"><a href="#"><?php echo $linha_produtos['nome'] ?></a></h4>
                        <div class="cause-details">
                    <?php echo limitarTexto($linha_produtos['descricao'], $limite = 200); ?>
                        </div>
                    <h2 class="title-style-3"><?php echo $linha_produtos['valor']; ?></h2>
                    <div class="btn-holder text-center">
                         <a href="" class="btn btn-primary" data-toggle="modal" 
                                       data-target="#saberModal" 
                                       data-nome="<?php echo $linha_produtos['nome']; ?>"
                                       data-descricao="<?php echo $linha_produtos['descricao'] ?>"
                                       data-valor="<?php echo $linha_produtos['valor'] ?>"
                                       >
                                        SABER MAIS</a>
                                </div>
                            </div> 

                        </div> 
                    <?php } ?>

paging

<?php
                                    if ($num_pagina > 1 && $pagina <= $num_pagina) {
                                        for ($i = $inicio; $i <= $fim; $i++) {
                                            ?>
                                            <?php
                                            if ($pagina == $i) {
                                                ?>
                                                <li  class="active"><a href="<?php echo pg . '/' . 'produtos/' . $categoria . '/pagina/' . $i; ?>"><?php echo $i; ?></a></li>


                                            <?php } else { ?>

                                                <li><a href="<?php echo pg . '/' . 'produtos/' . $categoria . '/pagina/' . $i; ?>"><?php echo $i; ?></a></li>
                                                <?php
                                            }
                                        }
                                    }
                                    ?>

1 answer

2


Cause

What I noticed in your code, is that you are searching the parameter 'page' in the url by GET, only 'page' is part of a parameter that you set in the rewrite engine.

If in rewrite you put 'url', then that URL you passed would be the same as http://localhost/?url=produtos/emagrecimento/pagina/2/

Thus, there is only the parameter $_GET['url'] in the $_GET, and the page is still on it, so there is no $_GET['page']. The value of the $_GET['url'] is = products/slimming/page/2/

So you’re returning the results from page 1, because in your ternary condition of $página, you did $pagina = (isset($_GET['pagina'])) ? $_GET['pagina'] : 1;

So if there is no $_GET['pagina'], to $pagina will always be = 1, so comes only page 1 results always.

Solution

The number of the current page is in the variable $explode that you created, it is the fourth index of the array $explode.

Then the variable $pagina it has to be like this: $pagina = (isset($explode[3])) ? $explode[3] : 1;

Make that change and test there.

  • That’s just what I needed, thank you so much for your help :D.

  • Not at all. I’m glad I could help. =)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.