Place the paging within the footer

1

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

.PHP code

<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>

    
asked by anonymous 24.01.2015 / 14:28

1 answer

1

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

<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 a lot more effective ways to do this, however it depends a lot on the application, so I will not suggest them, given your 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>
    
24.01.2015 / 15:33