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

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

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

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

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

PHP:
  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!

12 Comentários »

  1. Elton Minetto said,

    Janeiro 5, 2008 @ 14:20

    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. Tulio Faria said,

    Janeiro 5, 2008 @ 17:45

    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. Bill said,

    Janeiro 5, 2008 @ 20:44

    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. Bill said,

    Janeiro 5, 2008 @ 22:12

    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. Alex Felix said,

    Janeiro 9, 2008 @ 20:06

    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. Tulio Faria said,

    Janeiro 10, 2008 @ 00:21

    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. tiago.bar said,

    Fevereiro 9, 2008 @ 01:02

    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. Marcelo said,

    Abril 2, 2008 @ 11:34

    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. Marcelo said,

    Abril 8, 2008 @ 14:12

    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. Tulio Faria said,

    Abril 9, 2008 @ 23:42

    Olá pessoal,

    sobre a URL no next e etc...

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

    Espero que ajude...

    Abraços,

  11. Tiago said,

    Junho 9, 2008 @ 11:28

    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. Tiago said,

    Junho 9, 2008 @ 11:36

    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?

RSS feed for comments on this post · URI do TrackBack

Deixe seu comentário