Exemplos simples

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.