CakePHP 1.2: helper para paginação, simples, rápido e indolor

Olá pessoal,

eu venho usando o CakePHP 1.2 nos meus projetos recentes, e confesso que o quer já era bom ficou muitíssimo melhor.

Uma das novas características incorporadas ao core do CakePHP 1.2 é o helper para paginação e que salvou minha pele em um projeto, onde do dia para noite 10 registros viraram 6000, e resolvido com uma paginação em menos de 2 minutos.

Para usá-lo, começamos definindo os parâmetros da paginação, que pode ser feito de modo genérico para todos os models usados do controller (código aplicado no controller que terá paginação):

  1. var $paginate = array('limit' => 50);

Neste caso definimos o tamanho da página de registros com o tamanho 50. Podemos ainda, adicionar conditions, fields, order, page e recursive, assim como é feito no findAll de um model.

Essa configuração será usada para todos os models deste controller. Se quisermos configurações diferentes para models diferentes, usaríamos:

  1. var $paginate = array(
  2.  
  3. 'Model1'=> array('limit' => 50),
  4.  
  5. 'Model2'=> array('limit' => 20)
  6.  
  7. );

Depois de configurado, na hora de enviarmos os dados para o view, ao invés de usar findAll ou similares, usaremos:

  1. $this->set("dados", $this->paginate("NomeDoModel"));

Pronto, agora só falta mostrar as páginas no view com:

  1. Mostrando página: <?php echo $paginator->counter(array("separator"=>" de ")); ?>
  2.  
  3. ...
  4.  
  5. <?php echo $paginator->prev("Anterior"); ?>
  6.  
  7. <?php echo $paginator->numbers(); ?>
  8.  
  9. <?php echo $paginator->next("Próxima"); ?>

Depois disso é só testar e correr pro abraço 🙂

Bom pessoal, qualquer dúvida comentem! Abraços e até a próxima!

25 Comment

  1. Realmente muito mais fácil de fazer se comparado ao que existe hoje.
    Vou começar a usar o 1.2 o mais rápido possível. As novas features estão demais

  2. Realmente, o existente para CakePHP 1.1 é bem tosco (comparado com esse). Infelizmente não posso cuspir no prato que comi.. rs.. Como já usei ele 🙂

    Mas viva a evolução! E viva o CakePHP 1.2.

    Em breve vou tentar falar de mais features 1.2!

    Inté…

  3. Realmente, este helper, como alguns outros q estão sendo lançados para cakephp 1.2 quebram um galho enorme.
    Único problema do cakephp 1.2 é a documentação.
    Principalmente com relação a ACL(ACOs e AROs), que vejo muita gente batendo cabeça no cake 1.1 e no 1.2…rs, mas uma hora a gente chega lá.

  4. Acabei de ver aqui, q usando o scaffold do CakePHP 1.2, ele gera a listagem dos dados com paginação e ordenação pelo título dos campos.
    Show de bola isto.

  5. Grande Tulio, parabéns venho acompanhando do forum ja a um bom tempo, o que vou te pedir aqui não tem haver com o assunto deste post, mas ficaria muito grato, e acredito que outros tambem ficariam, se você puder abordar em outro post, a questão de update no Cake, eu ainda não entendi muito bem como isto é manipulado, como podemos controlar isto no Cake. Como por exemplo dar um update de um unico campo ou de apenas alguns campos. Seria muito legal, um grande abraço.

  6. Grande amigo Bill,

    quanto a documentação, concordo com você. Mas repito uma frase do Snook.ca que inclusive está no site oficial do Cake:
    “Who needs documentation when it tells me how to do everything?” (Quem precisa de documentação quando ele me fala como fazer tudo?).

    Um dia ainda daremos um jeito na doc dele 🙂

    Alex,

    obrigado, e sobre como salvar registros e etc, o post foi publicado 🙂

    Abraços e Long Live CakePHP!

  7. O paginador do Cake 1.2 esta “ficando” muito bom, se não fosse o fato de não funcionar em algumas situações.
    A que esta me deixando de cabelo em pé é que não posso usar paginação com um filtro no meu modelo (CONDITIONS) pois ele perde a condição do filtro assim que se clica no prev(), next() ou sort().
    Eu achei alguns artigos falando em passar um parametro “url” para o prev() e next() mas não entendi!
    Alguém achou uma solução para isso?

  8. Eu tive um problema com a ordenação dos dados.. ae achei esse link:

    http://bakery.cakephp.org/articles/view/basic-pagination-overview-3

  9. tiago.bar, tmb to com esse problema…

    Eh uma droga isso.. ele perde a condição… tava fazendo uma pagina de noticias, ai passava o id danoticia pela url: noticia/arquivo/1
    Soh q na hora de mostar a paginação ele não monta com o id, ele monta o link até o metodo, tipo…

    noticia/arquivo/page:1 | noticia/arquivo/page:2

    phoda.. quem souber como arrumar isso posta ae.. hehehhe

    Abraços

  10. Olá pessoal,

    sobre a URL no next e etc…

    1. <?php echo $paginator->first("Primeira",array("url"=>"../../../controller/metodo/filtro/etc")); ?>

    Espero que ajude…

    Abraços,

  11. bom dia, gostaria de saber por favor, como aplicar layout a paginação; e como retirar uma query que o cake da echo sempre dentro da minha view..

  12. Bom quanto ao layout descobri que quando clico no link page:2 por exemplo ele perde todo o css e javascript da página alguém sabe o motivo?

  13. É possível fazer uma paginação com condições diferentes para um mesmo
    Model?

    Defini no controller a paginação desta maneira:
    var $paginate = array(‘limit’ => 25, “conditions” =>
    array(“Cliente.situacao =’APR'”));

    E se eu quiser utlilizar uma paginação diferente para outro action,
    mas pesquisando no mesmo model. Por exemplo, com “Cliente.situacao
    =’REP'”.
    Como faço isso?

  14. Eu só queria deixar meu agradecimento porque
    eu começei a implementar o cake em um projeto agora e não sei nada sobre o cake mas você da me dando uma luz sobre este frameworks. VLW.

  15. Olá,
    Gostaria de incluir Feeds no meu site, porém não sei como fazer.
    Meu site está desenvolvido em CakePHP.
    Pode me ajudar?

  16. Tiago,

    Sobre o problema do cakephp mandar um Echo de uma query no final da sua view, imagino que basta alterar o debug.

    Voce pode definir o modo do debug no arquivo config/core.php

    Provavelmente ele estará setado em 2.

    -> Configure::write(‘debug’, 2);

    Altere para 0 e nenhuma mensagem de debug será exibida.

    Espero ter ajudado!

  17. Boa tarde!
    Vc sabe se tem como incluir mais de uma paginação para modelos diferentes em uma view no cake?

    Att,
    Valéria Rezende

  18. Eu fiz seguindo o tutorial, porém o link para Next não aparece. Alguem sabe o pq?
    Grato

  19. Pessoal, é época de festas mas espero que estejam com um PC por perto e dispostos a me ajudar =)
    Estou precisando usar uma busca com LIKE (exmplo: SELECT * FROM nome_tbl WHERE key_col LIKE “Patrick%”;) e não estou sabendo como fazer usando este helper de paginação do cake. Alguem sabe como fazer?

    Obrigado desde já e bom final de ano para todos

  20. Olá

    Eu tenho um banco de dados com 15.000 registros, fiz um relacionamento de hasOne entre os models Aluno e Login. Mas esta muito lento quando uso a paginação. Como fazer neste caso.

  21. Túlio tenho aprendido bastante aqui no seu blog, então consegui resolver o problema da paginação em que a action não consegue receber o segundo parametro pois aparece assim:
    controller/action/page:2 ou controller/action/page:3 e teria que passar assim controller/action/$variave/lpage:2 , para resolver isso so precisa ser colocado na view isso

    options(
    array(‘url’=>$this->params[‘pass’],
    ‘model’=>’AquiNomeDoSeuModelo’));
    ?>

    somente isso!!! comecei a mexer com o cake 1.2 a dois meses e não conheço versões anteriores pois eu trabalhava com outro framework chamado codeigniter, um abraço a todos, estarei aqui para tentar ajudar no que eu puder.

  22. ops antes do options tem assim $paginator, então fica assim
    options(
    array(‘url’=>$this->params[‘pass’],
    ‘model’=>’AquiNomeDoSeuModelo’));
    ?>

  23. Parabéns, seu post foi de grande ajuda !!
    Agora saiu a versão final do cake 1.3 e vamos ver o que há de novo!

    abraço

  24. E se eu quiser que ao invés de anterior e próxima, apareçam os títulos de tópico anterior, números e próximo tópico. Exemplo:

    PHP | 1 | 2 | ASP

    Deu pra entender né?

  25. Por exemplo:

    Estou no tópico:

    http://ts_cakephp/ts/posts/view/night_club___

    Em minha paginação atual, se eu clicar em algum link pra ir ou voltar, ou em algum número, terei uma url como:

    http://ts_cakephp/ts/posts/view/page:2
    e isso não me interessa né..

Deixe uma resposta