Pagination with friendly URL

0

To use friendly url and pagination, but if I am on the page 1 and click to go to the page 2 nothing happens, but in my url the correct path localhost/produtos/emagrecimento/pagina/2/ is displayed however and the same products are displayed 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 } ?>

pagination

<?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
                                            }
                                        }
                                    }
                                    ?>
    
asked by anonymous 23.01.2017 / 05:06

1 answer

2

Cause

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

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

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

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

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

Solution

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

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

Make this change and test it there.

    
23.01.2017 / 07:04