Postagem

Aqui é onde faço postagens de coisas que acho interessante.

Paginação no CakePHP

Postagem do dia 01/01/1970 na categoria CakePHP



O cake possui recurso excelente de paginação.
Vou mostrar como fazer paginação, para isso vamos trabalhar somente com o controller e a view.

Vou criar um controller chamado productsController.php


<?php
App::uses('AppController', 'Controller');
/**
 * Products Controller
 *
 * @property Product $Product
 */
class ProductsController extends AppController {

	var $uses = array( 'Product' );

	/**
	 * index method
	 *
	 * @return void
	 */
	public function index() {
		$this->set('products', $this->paginate());
	}
}
?>


Observe que para consultar os dados do banco, utilizamos o método $this->paginate(), com esse método é possível fazer filtros na consulta. Para mais informação consulte o Manual

Agora vou criar a view, que vai exibir os dados do produto em uma tabela

<table>
	<thead>
		<tr>
			<td>ID</td>
			<td>NOME</td>
		</tr>
	</thead>
	<tbody>
		<?php foreach( $products as $data ): ?>
		<tr>
			<td><?php echo $data['Product']['id']?></td>
			<td><?php echo $data['Product']['name']?></td>
		</tr>
		<?php endforeach ?>
	</tbody>
</table>


Agora abaixo da tabela vamos mostrar nossa paginação

<p>
	<?php
		// Mostrando o numero de pagina
		echo $this->Paginator->counter(
			array( 'format' => __('Página {:page} de {:pages}. 
				Mostrando {:current} registro de {:count}' ) ) );
	?>	
</p>

<?php 
	$count = $this->Paginator->counter( array( 'format' => '{:pages}' ) );
	// Se ouver mais de uma pagina, mostro a paginacao
	if( $count > 1 ):
?>
<div class="paging">
	<?php
		echo $this->Paginator->prev( '< ' . __('anterior') );
		echo $this->Paginator->numbers( array( 'separator' => '' ) );
		echo $this->Paginator->next( __('próximo') . ' >' );
	?>
</div>
<?php 
	endif;
?>


Dica: Pode criar um elemento para mostrar a paginação e somente carregar ele nas views quando necessários. Caso não tenha conhecimento de como criar elementos no cake, clique aqui



Deixe seus comentários abaixo: