Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ScornInPC

Zend_Paginator

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

// Busca a lista
$list = $this->_model->fetchAll($select);

// Cria a paginação
$paginator = Zend_Paginator::factory($list);

 

O problema está aqui. Não passe o fetch para o paginator, passe o $select (assumindo que $select é uma instancia de Zend_Db_Table_Select). Assim.

 

// 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aaa rapaz, ai sim.

 

Ai ele se vira em colocar o limit la dentro do factory =)

 

Faz muito sentido, valeu mesmo =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.