Jump to content
unset

Paginação de resultados como implementar?

Recommended Posts

Olá, alguém poderia me ajudar a implementar uma paginação de resultados? tenho o modelo mvc abaixo

 

Controller

<?php
// Load All Posts
    public function index(){
      $posts = $this->postModel->getPosts();

      $data = [
        'posts' => $posts
      ];
      
      $this->view('posts/index', $data);
    }
?>

Model

<?php
// Get All Posts
    public function getPosts(){
      $this->db->query("SELECT *, 
                        posts.id as postId, 
                        users.id as userId
                        FROM posts 
                        INNER JOIN users 
                        ON posts.user_id = users.id
                        ORDER BY posts.created_at DESC;");

      $results = $this->db->resultset();

      return $results;
    }

View

<?php foreach($data['posts'] as $post) : ?>
    <div class="card card-body mb-3">
      <h4 class="card-title"><?php echo $post->title; ?></h4>
      <div class="bg-light p-2 mb-3">
        Written by <?php echo $post->name; ?> on <?php echo $post->created_at; ?>
      </div>
      <p class="card-text"><?php echo $post->body; ?></p>
      <a class="btn btn-dark" href="<?php echo URLROOT; ?>/posts/show/<?php echo $post->postId; ?>">More</a>
    </div>
  <?php endforeach; ?>

Como fazer a paginação ?

Share this post


Link to post
Share on other sites

Vamos lá, você especificar o LIMIT que define quantos resultados por página e o  OFFSET que será a partir de qual índice os resultados devem ser mostrados.

Mais detalhes leia: https://www.mysqltutorial.org/mysql-limit.aspx

 

Ou seja se você passa o limite de 10 o OFFSET inicial será 1. Na página deve existir um link que informe a aplicação que o usuário mudou de página avançando ou retrocedendo.

Exemplo:

<a href="./pagina=2">Página 2</a> 

Ou seja terei um $_GET['pagina'] com o valor 2 então agora o offset passa a ser 10 mostrando resultados a partir do décimo.

 

 

Agora uma dica, se sua paginação não constar com inúmeros resultados você pode fazer tudo pelo javascript, o que é mais "rápido de ser processado" (depende da quantidade)

Um exemplo está nesse script que fiz justamente para usar em paginação cujo os resultados fiquem em torno de 100, mais que isso ou já com isso a página começará apresentar lentidão de carregamento (isso dependendo de como é estruturado seu HTML e como você usa scripts client-side).

https://github.com/Spell-Master/sm-web/tree/master/javascript/Paginator

Enfim com isso você vai fazer usa leitura do DB normalmente assim como está aí, vai fazer o loop como você mesmo fez aí, e só irá aplicar o script.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By sergiosfpereira
      Boa tarde a todos,
       
      Estou estudando MVC e me deparei com a seguinte situação:

      Tenho uma View que precisa receber dados de dois Models diferentes, então no controller desta View eu tenho a função abaixo:
      public function teste($id) { $this->view->a = $this->getOneA($id); $this->loadModel('b'); $this->view->b = $this->model->getOneB($id); $this->view->render('app/teste'); } O cenário acima me retorna o esperado, pega os dados de A e de B e os deixa disponiveis para a View.
       
      Está correto utilizar esse método ?
       
      Se sim, eu deveria carregar o Model "b" no __construct do controller "a"  ou diretamente na função do controller "a" como neste exemplo?
       
      Se não, qual a melhor maneira de obter dados de diferentes Models?
       
      OBS: todos os controllers são filhos do controller principal e todos os models são filhos do model principal.
       
      E me perdoem se eu estiver falando bobagem, como disse, estou aprendendo e a finalidade aqui é didatica e agradeço a quem puder contribuir.
    • By Rzorr
      Bom dia,
              eu tenho um  site de imóveis, sou corretor, ele está com alguns problemas na URL, comprei esse script e venho fazendo algumas alterações nele, sei o básico, cadastrar, deletar, buscar, update, mas o que acontece esse site foi construido com MVC e confesso parei de estudar PHP faz muito tempo, e não entendo nada de MVC, abaixo o código da busca e como forma o link é montado.
          No site o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/Camboriú/bairro/bairro#busca nesse exemplo fiz uma busca pela cidade!
         Se clico no menu em vendas o link fica assim: /imoveis/lista/referencia/referencia/categoria/comprar/tipo/tipo/cidade/cidade/bairro/bairro#busca
      pessoal obrigado pela disposição em ajudar, eu to tentando resolver faz dias, mas não consigo entender a a forma como é construido.
       
      <?php class busca extends controller { public function init(){ } public function inicial(){ $referencia = $this->post('referencia'); $categoria = $this->post('categoria'); $tipo = $this->post('tipo'); $cidade = $this->post('cidade'); $bairro = $this->post('bairro'); if($referencia){ $cidade = "cidade"; $bairro = "bairro"; $tipo = "tipo"; $categoria = "categoria"; } else { $referencia = 'referencia'; if(!$categoria){ $categoria = "categoria"; } if(!$tipo){ $tipo = "tipo"; } if(!$cidade){ $cidade = "cidade"; } if(!$bairro){ $bairro = "bairro"; } } $endereco = DOMINIO."imoveis/lista/referencia/$referencia/categoria/$categoria/tipo/$tipo/cidade/$cidade/bairro/$bairro#busca"; $this->irpara("$endereco"); }  
    • By mkboy
      Olá,
       
      Uso MySQL no dia a Dia, mas tenho essa consulta em uma aplicação em uma base SQL Server onde conecto via PHP.
       
      Tenho 5000 registros na tabela, preciso trazer de 500 em 500.
      Assim, atualizo todos que preciso.

      No MySQL eu faria ASSIM
       
      SELECT campos FROM tabela CONDICAO Limit 0,500 SELECT campos FROM tabela CONDICAO Limit 500,500 SELECT campos FROM tabela CONDICAO Limit 1000,500  
      Então, eu passaria por todos os registros até chegar no 5000.
       
      Estou fazendo o select abaixo no SQL, mas fica um intervalo de produtos que não vem a cada select.
       
      Veja como fiz: (Um amigo ajudou na época que foi feito, não entendo bem)
       
      $sql = "SELECT TOP 500 data.CodigoInterno, data.CodigoFabricante, data.Fabricante, data.PrecoVenda, data.SaldoEstoque, data.Titulo, data.Aplicacao FROM ( SELECT ROW_NUMBER() OVER(ORDER BY CodigoInterno ASC) AS Row, CodigoInterno, CodigoFabricante, Fabricante, PrecoVenda, SaldoEstoque, Titulo, Aplicacao FROM PRODUTOS ) AS data WHERE data.Row >= ".addslashes($_GET['qtdRegistro'])." ORDER BY data.CodigoInterno ASC";  
      Então na Query envio o 0...500....
       
      Podem me ajudar por favor?
       
       
       
    • By Alberto Nascimento
      Como faço para que esta consulta exiba 5 registros por página?
       
      <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } $result_msg_cont = "SELECT * FROM internautas ORDER BY id ASC"; $resultado_msg_cont = $conn->prepare($result_msg_cont); $resultado_msg_cont->execute(); while ($row_msg_cont = $resultado_msg_cont->fetch(PDO::FETCH_ASSOC)) {  
    • By frlopes
      Pessoal, bom dia.
       
      Tentei fazer o exemplo abaixo do site:
       
      http://www.macoratti.net/15/10/mvc_roles1.htm
       
      E está retornando o seguinte erro quando tento fazer um novo registro:
       
      System.InvalidOperationException: 'The ViewData item that has the key 'Name' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'.'
       
      Alguém poderia me ajudar? 
      Obrigada!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.