Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, alguém poderia me mostrar um exemplo de paginação em PHP no padrão MVC ?
Tenho uma lista de produtos e por pagina queria mostrar somente 20 !
Desde já agradeço !
Henrique, muito obrigado pelo exemplo, porem estou tendo dificuldades para implementa-lo em meu código, estou seguindo um certo padrão...como sou iniciante na linguagem algumas coisas tenho que estudar mesmo. meu código esta assim:
lembrancasModel.php
<?php class LembrancasModel extends Model{ public $_tabela = "produtos"; public function listaLembrancas($tipo, $qtd){ return $this->read($tipo, $qtd, null, null); } public function paginasLembrancas($tipo){ return $this->read($tipo, null, null, null); } }
lembrancasController.php
<?php class Lembrancas extends Controller{ public function Index_action(){ $lembrancas = new LembrancasModel(); $lista_lembrancas = $lembrancas->listaLembrancas('tipo = "l"','20'); $datas['lista_lembrancas'] = $lista_lembrancas; $this->view('lembrancas', $datas); } public function Index_page() { $paginas = new LembrancasModel(); $paginas_lembrancas = $paginas->paginasLembrancas('tipo = "l"'); $datas['paginas_lembrancas'] = $paginas_lembrancas; $this->view('lembrancas', $datas); } }
model.php
<?php class Model{ protected $db; public $_tabela; public function __construct() { $this->db = new PDO('mysql:host=localhost;dbname=banco', 'root', ''); } public function insert( Array $dados ){ $campos = implode(", ", array_key($dados)); $valores = "'".implode("','", array_values($dados))."'"; return $this->db->query(" INSERT INTO `{$this->_tabela}` ({$campos}) VALUES ({$valores})"); } public function read( $where = null, $limit = null, $offset = null, $orderby = null ){ $where = ($where != null ? "WHERE {$where}": ""); $limit = ($limit != null ? "LIMIT {$limit}":""); $offset = ($offset != null ? "OFFSET {$offset}":""); $orderby = ($orderby != null ? "ORDER BY {$orderby}":""); $q= $this->db->query(" SELECT * FROM `{$this->_tabela}` {$where} {$orderby} {$limit} {$offset}"); $q->setFetchMode(PDO::FETCH_ASSOC); return $q->fetchAll(); } public function update(Array $dados, $where){ foreach ( $dados as $ind => $val){ $campos[] = "{$ind} = '{$val}'"; } $campos = implode(", ", $campos); return $this->db->query(" UPDATE `{$this->_tabela}` SET {$campos} WHERE {$where}"); } public function delete( $where){ return $this->db->query(" DELETE FROM `{$this->_tabela}` WHERE {$where}"); } }
Esta é minha tentativa para fazer a paginação, porem estou tendo dificuldades para realizar o foreach em minha view. Alguma sujestão ?
Mais uma vez, agradeço a boa vontade !
Alguem ??
Estou fazendo de cabeça, logo, haverá possibilidades de refatoração e algum erro sintático pode ocorrer.
Acesso a dados (parte do modelo):
interface PaginationInfoInterface extends IteratorAggregate, Countable {
class PaginationInfo implements PaginationInfoInterface {
interface Paginator {
class ArrayPaginator implements Paginator {
class DatabasePaginator implements Paginator {
interface DatabasePaginatorAdapterInterface extends Countable {
class PdoDatabasePaginatorAdapter implements DatabasePaginatorAdapterInterface {
// Uso:
foreach($paginator->getPage(2, 10) as $item) { echo $item . "\n"; } // mostrará de 11 a 20//Paginando um array:
//Paginando uma tabela do banco de dados:
foreach($paginator->getPage(2, 10) as $item) {
echo $item . "\n";
} // mostrará as entradas da tabela de 11 a 20
O código de uso acima DEVE ser embutido na camada de controle:
class SomeController {
Para exibir o painel de paginação na visão:
class PaginationDisplay {
A ideia é mais ou menos essa. Não tive muito tempo para refinar o exemplo, não basta apenas copiar e colar pra ver funcionar, precisa entender a ideia e implementar você mesmo.