No primeiro exemplo nós não faremos nada espetacular, mas com certeza isso vai
te dar uma boa idéia do que o Zend_Paginator
é capaz de fazer.
Vamos pensar em um array chamado $data, com números de 1 a 100 dentro dele, que
queremos dividir em algumas páginas. Podemos usar o método estático
factory()
da classe Zend_Paginator
para ter um objeto Zend_Paginator
com nosso array dentro dele.
// Cria um array com números de 1 a 100 $data = range(1, 100); // Cria um objeto Paginator usando o método factory do Zend_Paginator $paginator = Zend_Paginator::factory($data);
Estamos quase lá! A variável $paginator agora contém uma referência para o objeto Paginator. Por padrão ele é configurado para mostrar 10 items por página. Para mostrar os items para a página atual, tudo que você tem a fazer é colocar o objeto Paginator dentro de um laço foreach. Por padrão a página ativa será a primeira caso nada esteja especificado. Nós vamos ver como você pode especificar uma página mais tarde. O trecho abaixo vai mostrar uma lista fora de ordem contendo números de 1 a 10, os quais são os números da primeira página.
// Criando array com números de 1 a 100 $data = range(1, 100); // Cria um objeto Paginator usando o método factory do Zend_Paginator $paginator = Zend_Paginator::factory($data); ?><ul><?php // Insere cada item para a página atual dentro de uma tag <li> foreach ($paginator as $item) { echo '<li>' . $item . '</li>'; } ?></ul>
Agora vamos tentar trazer os items da segunda página. Você pode usar o método
setCurrentPageNumber()
para selecionar qual página você quer ver.
// Criando array com números de 1 a 100 $data = range(1, 100); // Cria um objeto Paginator usando o método factory do Zend_Paginator $paginator = Zend_Paginator::factory($data); // Seleciona a segunda página $paginator->setCurrentPageNumber(2); ?><ul><?php // Insere cada item para a página atual dentro de uma tag <li> foreach ($paginator as $item) { echo '<li>' . $item . '</li>'; } ?></ul>
Como esperado, esse trecho de código vai montar uma lista não ordenada com números do 11 ao 20.
Esse simples exemplo demonstra um pouco do que pode ser feito com
Zend_Paginator
. Entretanto, uma aplicação de verdade raramente
lê seus dados de um array estático, então a próxima sessão é responsável por mostrar
como você pode usar o Zend_Paginator
para paginar resultados de
uma consulta vindo do banco de dados. Antes de prosseguir, tenha certeza de estar
familiarizado com a maneira com que o Zend_Db_Select
funciona!
Em nossa base de exemplos nos vamos ter uma tabela com posts de um blog chamada 'posts'. A tabela 'posts' tem quatro colunas: id, titulo, texto, data_criacao. Vamos dar uma olhada em um exemplo simples.
// Criando uma consulta. $db é o objeto Zend_Db_Adapter, que assumimos // que já exista em seu código. $select = $db->select()->from('posts')->order('data_criacao DESC'); // Cria um objeto Paginator usando o método factory do Zend_Paginator $paginator = Zend_Paginator::factory($select); // Seleciona a segunda página $paginator->setCurrentPageNumber(2); ?><ul><?php // Insere cada item para a página atual dentro de uma tag <li> foreach ($paginator as $item) { echo '<li>' . $item->title . '</li>'; } ?></ul>
Como você pode ver, esse exemplo não é tão diferente do anterior.
A única diferença é que você passa um objeto Zend_Db_Select
para o
método factory()
da classe paginator ao invés de um array.
Para mais detalhes de como o adaptador de banco de dados executa a sua consulta de maneira
eficiente, veja o capítulo Zend_Paginator
no manual de referência
sobre os adaptadores DbSelect e DbTableSelect.