Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi =)
Estou tentando utilizar o zend_paginator em uma tabela que possuir 500 mil registros, mas eu sempre usei deste jeito
// Busca a lista
$list = $this->_model->fetchAll($select);
// Cria a paginação
$paginator = Zend_Paginator::factory($list);
$paginator->setItemCountPerPage(50);
$paginator->setPageRange(50);
$paginator->setCurrentPageNumber($current_page);
Acontece que desse jeito ele busca todos os registros e depois seleciona os que vai apresentar na tela. Tentei fazer assim:
// Busca só a seleção necessaria
$select->limit(50, $current_page);
// Busca a lista
$list = $this->_model->fetchAll($select);
// Cria a paginação
$paginator = Zend_Paginator::factory($list);
$paginator->setItemCountPerPage(50);
$paginator->setPageRange(50);
$paginator->setCurrentPageNumber($current_page);
Mas isso fura a paginação.
Como fazer isso sem fazer o banco buscar todos os registros? é possivel?
valeu
Aaa rapaz, ai sim.
Ai ele se vira em colocar o limit la dentro do factory =)
Faz muito sentido, valeu mesmo =)
Só aproveitando o tópico, não é possivel eu usar ele 2 vezes na mesma pagina? algo assim:
{$this->paginationControl($paginator, NULL, 'paginator.tpl')}
<div id="list_layout">{$list}</div>
{$this->paginationControl($paginator, NULL, 'paginator.tpl')}
Quero mostrar a paginação em cima e em baixo da tabela =)
Renderiza para um placeholder e usa duas vezes. Como você usa o Smarty (nunca consegui entender o porque de usar Smarty com o ZF, mas...) não vou saber te ajudar.
Carlos Eduardo
Tentei fazer isso ó
{$this->placeholder('pagin')->captureStart()}
{$this->paginationControl($paginator, NULL, 'paginator.tpl')}
{$this->placeholder('pagin')->captureEnd()}
<div id="list_layout">{$list}</div>
{$this->placeholder('pagin')}
E sobre o smarty, a gente usa por deixar o código o menos PHP possivel, assim desfoca a cabeça do php quando se está trabalhando com templates. Trabalhamos com ele tambem, pois nosso sistema antigo ja utilizava o smarty, então o pessoal esta acostumado a trabalhar com o smarty
E funcionou o placeholder? Sem o Smarty ficaria assim:
<?php $this->placeholder('paginacao')->set($this->paginationControl($paginator,null,'paginator.phtml'))?>
<?php echo $this->placeholder('paginacao');// em qualquer lugar da view
Carlos Eduardo
Consegui fazer isso dai, mas a listagem não aparece, da uma olhada
fica
>
PAGINACAO
PAGINACAO
deveria ficar
>
PAGINACAO
LISTA
PAGINACAO
{$this->placeholder('paginacao')->set($this->paginationControl($paginator,null,'paginator.tpl'))}
{$this->placeholder('paginacao')}
<div id="list_layout">{$list}</div>
{$this->placeholder('paginacao')}
O meu $list é uma string contendo HTML que meu action gera apartir do objeto $paginator no controlador
Tirando o placeholder ele funciona a listagem ou também não?
Como nós tiramos o fetch (ele é feito pelo paginator), pode ser necessário modificar o seu action (????) que monta este HTML.
PS: usar o action para montar este HTML é tão errado quanto colocar regra de negócio na view... Se não quer colocar o loop e outras coisas na view, usa um view helper para isto, mas fazer na action é mistura de camadas. Exibição (e montagem de HTML) é função da view.
Carlos Eduardo
Na verdade eu tenho um arquivo list.tpl que é carregado para todos os meus controllers, por isso não achei uma forma de fazer isso pelo template. Mas a ideia do helper vai funcionar =)
Sobre a listagem, funciona sim, sem o placeholder funciona, e com o placeholder não. Esse meu método ta buscando do paginator tambem, ja modifiquei la para buscar dele.
12:00 vou tentar criar o helper para ver o que vai dar, acredito que o placeholder deva estar fazendo alguma coisa com o paginator, assim ele nao ta funcionando, talvez com o helper funcione. Ai ja posto aqui =)
// Busca a lista
// Cria a paginação
// Cria a paginação
$paginator = Zend_Paginator::factory($select);
Fiz um artigo pequeno sobre o Zend_Paginator (pretendo fazer outros). Dá uma olhada aqui.
Carlos Eduardo