Place paging inside the footer

Asked

Viewed 167 times

1

I created a code. php that queries the bank and returns the results by printing them on the screen, also prints a pagination, would like to print this page inside a footer tag but without having to redo the queries by amount of results in the bank, limit but reuse the part that prints the results on the screen.

Code . PHP

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Exibe produtos</title>
</head>
<body>
    <div id="produtos">
        <p>
            Produtos com esta consulta
        </p>
        <?php
            include_once "QueryInDB.php";
            include_once "CountInDB.php";
            include_once "Consulta.class.php";

            imprime();
            function imprime(){

                //Cria uma consulta com os parametros passados pela URL
                $consulta = new Consulta();
                $consulta->resultType = $_GET['resultType'];
                $consulta->search = $_GET['search'];

                //verifica a página atual caso seja informada na URL, senão atribui como 1ª página
                $pagina = (isset($_GET['p']))? $_GET['p'] : 1;

                //seta a quantidade de itens por página, neste caso, 2 itens
                $consulta->registros = 2;

                //conta o total de itens
                $total = CountInDB::search($consulta);

                //calcula o número de páginas arredondando o resultado para cima
                $numPaginas = ceil($total/$consulta->registros);

                //variavel para calcular o início da visualização com base na página atual
                $consulta->inicio = ($consulta->registros*$pagina)-$consulta->registros;

                //Realiza e armazena a consulta
                $produtos = queryInDB::search($consulta);

                foreach($produtos as $produto){
                    echo $produto['id']." - ";
                    echo $produto['nome']." - ";
                    echo $produto['descricao']." - ";
                    echo "R$ ".$produto['valor']."<br />";
                }

                //Cria uma string para passagem de parametros pela URL
                $query = http_build_query($consulta);

                //Exibe a paginação
                if($pagina > 1){
                    echo "<a href='exibir.php?{$query}&p=".($pagina - 1)."' class='controle'>&laquo; anterior</a>".'&nbsp;&nbsp;';
                }
                for($i = 1; $i < $numPaginas + 1; $i++){
                    $ativo = ($i == $pagina) ? 'numativo' : '';
                    echo "<a href='exibir.php?{$query}&p=".$i."' class='numero ".$ativo."'> ".$i." </a>".'&nbsp;&nbsp;';
                }    
                if($pagina < $numPaginas){
                    echo "<a href='exibir.php?{$query}&p=".($pagina + 1)."' class='controle'>proximo &raquo;</a>".'&nbsp;&nbsp;';
                }
            }
        ?>
    </div>
    <footer id="pagincao">
        <!-- PAGINAÇÃO DEVE FICAR -->
        <p>
            Fim dos Produtos
        </p>
    </footer>
</body>

1 answer

1


You can parameterize your function, so that it displays only the listing, only the footer or both, so:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Exibe produtos</title>
</head>
<body>
    <div id="produtos">
        <p>
            Produtos com esta consulta
        </p>
        <?php
            include_once "QueryInDB.php";
            include_once "CountInDB.php";
            include_once "Consulta.class.php";

            function imprime($imprime = TRUE, $paginacao = FALSE){


                //Cria uma consulta com os parametros passados pela URL
                $consulta = new Consulta();
                $consulta->resultType = $_GET['resultType'];
                $consulta->search = $_GET['search'];

                //verifica a página atual caso seja informada na URL, senão atribui como 1ª página
                $pagina = (isset($_GET['p']))? $_GET['p'] : 1;

                //seta a quantidade de itens por página, neste caso, 2 itens
                $consulta->registros = 2;

                //conta o total de itens
                $total = CountInDB::search($consulta);

                //calcula o número de páginas arredondando o resultado para cima
                $numPaginas = ceil($total/$consulta->registros);

                //variavel para calcular o início da visualização com base na página atual
                $consulta->inicio = ($consulta->registros*$pagina)-$consulta->registros;

                //Realiza e armazena a consulta
                $produtos = queryInDB::search($consulta);
                if($imprime){
                    foreach($produtos as $produto){
                        echo $produto['id']." - ";
                        echo $produto['nome']." - ";
                        echo $produto['descricao']." - ";
                        echo "R$ ".$produto['valor']."<br />";
                    }
                }

                if($paginacao){
                    //Cria uma string para passagem de parametros pela URL
                    $query = http_build_query($consulta);

                    //Exibe a paginação
                    if($pagina > 1){
                        echo "<a href='exibir.php?{$query}&p=".($pagina - 1)."' class='controle'>&laquo; anterior</a>".'&nbsp;&nbsp;';
                    }
                    for($i = 1; $i < $numPaginas + 1; $i++){
                        $ativo = ($i == $pagina) ? 'numativo' : '';
                        echo "<a href='exibir.php?{$query}&p=".$i."' class='numero ".$ativo."'> ".$i." </a>".'&nbsp;&nbsp;';
                    }    
                    if($pagina < $numPaginas){
                        echo "<a href='exibir.php?{$query}&p=".($pagina + 1)."' class='controle'>proximo &raquo;</a>".'&nbsp;&nbsp;';
                    }
                }
            }
            imprime();

        ?>
    </div>
    <footer id="pagincao">
        <?php imprime(FALSE, TRUE); ?>
        <p>
            Fim dos Produtos
        </p>
    </footer>
</body>

There are much more effective way to do this, but it depends a lot on the application, so I won’t suggest them, given their application I think this is the fastest way.

Another way:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Exibe produtos</title>
</head>
<body>
    <div id="produtos">
        <p>
            Produtos com esta consulta
        </p>
        <?php
            include_once "QueryInDB.php";
            include_once "CountInDB.php";
            include_once "Consulta.class.php";

            //Cria uma consulta com os parametros passados pela URL
            $consulta = new Consulta();
            $consulta->resultType = $_GET['resultType'];
            $consulta->search = $_GET['search'];

            //verifica a página atual caso seja informada na URL, senão atribui como 1ª página
            $pagina = (isset($_GET['p']))? $_GET['p'] : 1;

            //seta a quantidade de itens por página, neste caso, 2 itens
            $consulta->registros = 2;

            //conta o total de itens
            $total = CountInDB::search($consulta);

            //calcula o número de páginas arredondando o resultado para cima
            $numPaginas = ceil($total/$consulta->registros);

            //variavel para calcular o início da visualização com base na página atual
            $consulta->inicio = ($consulta->registros*$pagina)-$consulta->registros;

            //Realiza e armazena a consulta
            $produtos = queryInDB::search($consulta);
            foreach($produtos as $produto){
                echo $produto['id']." - ";
                echo $produto['nome']." - ";
                echo $produto['descricao']." - ";
                echo "R$ ".$produto['valor']."<br />";
            }

            ?>
    </div>
    <footer id="pagincao">
            <?php

            //Cria uma string para passagem de parametros pela URL
            $query = http_build_query($consulta);

            //Exibe a paginação
            if($pagina > 1){
                echo "<a href='exibir.php?{$query}&p=".($pagina - 1)."' class='controle'>&laquo; anterior</a>".'&nbsp;&nbsp;';
            }
            for($i = 1; $i < $numPaginas + 1; $i++){
                $ativo = ($i == $pagina) ? 'numativo' : '';
                echo "<a href='exibir.php?{$query}&p=".$i."' class='numero ".$ativo."'> ".$i." </a>".'&nbsp;&nbsp;';
            }    
            if($pagina < $numPaginas){
                echo "<a href='exibir.php?{$query}&p=".($pagina + 1)."' class='controle'>proximo &raquo;</a>".'&nbsp;&nbsp;';
            }
        ?>
        <p>
            Fim dos Produtos
        </p>
    </footer>
</body>
  • ,@Kaduamaral, your solution works perfectly, but could show what other possible solutions?

  • I posted @Ricardohenrique

  • Interestingly, I’ve involved both. php codes in functions but this way it didn’t work.

  • Do not use @Ricardohenrique functions, leave the code "free" rsrs. It is because the second part of the code is using variables of the first part, if you put in functions these variables are local, within the function, and one cannot use the other.

Browser other questions tagged

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