ScornInPC 1 Denunciar post Postado Setembro 15, 2011 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
Matias Rezende 50 Denunciar post Postado Setembro 15, 2011 // 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
ScornInPC 1 Denunciar post Postado Setembro 15, 2011 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
ScornInPC 1 Denunciar post Postado Setembro 15, 2011 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
Matias Rezende 50 Denunciar post Postado Setembro 15, 2011 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
ScornInPC 1 Denunciar post Postado Setembro 15, 2011 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
Matias Rezende 50 Denunciar post Postado Setembro 15, 2011 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
ScornInPC 1 Denunciar post Postado Setembro 15, 2011 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
Matias Rezende 50 Denunciar post Postado Setembro 15, 2011 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
ScornInPC 1 Denunciar post Postado Setembro 16, 2011 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