gremio10 14 Denunciar post Postado Novembro 2, 2011 Fala galera, eu estou com um problema, e não consigo resolver... eu tenho um array: $listTips = array( "definicao" => "Definição", "descricao" => "Descrição", "sintoma" => "Sintomas", "causas" => "Causas", "diagnostico" => "Diagnóstico", "tratamento" => "Tratamento", "tratamento_alternativo" => "Tratamento Alternativo", "consulte_especialista" => "Consulte Especialista", "complicacoes" => "Complicações", "prognostico" => "Prognóstico", "medicamento" => "Medicações", "prevencao" => "Prevenção", "referencias" => "Referências" ); as keys, são campos no banco de dados, e os values, são os nomes respectivos deles... bom, meu código, busca no banco de dados, e faz a verificação de quais os campos não estão vazios... mas ai que tá, depois disso, eu mando ele contar quantos sobraram, mas eu tenho de fazer uma paginação entre eles, e eu não estou conseguindo de forma alguma... minha ultima tentativa foi essa: $pagesKey = array(); $totalPages = 0; foreach( $listTips as $tip => $val ) { if( !empty( $detail[ $tip ] ) ) { $pages[ $tip ] = $val; if( $this->getRequest()->getParam( "sessao" ) === $tip ) { if( $totalPages > 0 ) { $prev = $pagesKey[ $totalPages - 1 ]; } else { $prev = end( $pagesKey ); } $current = $pagesKey[ $totalPages ]; $next = $pagesKey[ $totalPages + 1 ]; } else { if( $totalPages > 0 ) { $prev = $pagesKey[ $totalPages - 1 ]; } else { $prev = end( $pagesKey ); } $next = $pagesKey[ $totalPages + 1 ]; } $pagesKey[ $totalPages ] = $tip; $totalPages++; } } mas não deu em nada, eu tento usar o reset() prev(), e outros, na minha index, mas ele não funciona, principalmente o next()... Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Isso aí é zend ? o Zend_Paginator tem adaptadores próprios pra array .. qualquer coisa também você pode usar LimitIterator .. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 estou usando Zend, só que a paginação não é a convencional, tem de ser apenas: pagina atual DE total de paginas <anterior> <proximo> não sei se me fiz claro ? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Saquei, você quer só o total de páginas , página atual , próximo , anterior ? :seta: https://github.com/andreyknupp/Paginator/ Basta você adaptar .. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 Exato, mas sempre trabalhando com o array que foi filtrado, entende ? Ai pra mim ficou complicado descobrir quem é o current, quem vai ser o prev e assim o next... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Veja .. adaptando com o código que te passei .. <?php require_once 'Application/Library/Paginator/Paginator.php'; $Array = Array ( 'a' => 'b' , 'c' => 'd' , 'e' => 'f' , 'g' => 'h' , 'i' => 'j' ) ; $Paginator = new Paginator ( ) ; $Paginator -> setLimitOffset ( 2 ) ; // limite de resultados por página $Paginator -> setResultsAmount ( count ( $Array ) ); // quantidade de items que serão paginados $Paginator -> setCurrentPage ( 2 ) ; // página atual : $_GET [ 'page' ] // ... $Pages = $Paginator -> assemble () ; // Monta a páginação e retorna um PaginatorEntity .. printf ( 'Página atual: %d de: %d, Próxima Página: %d, Página Anterior: %d' , $Pages->getCurrentPage() , $Pages->getPageCount() , $Pages->getNextPage() , $Pages->getPreviousPage() ); Saída: Página atual: 2 de: 3, Próxima Página: 3, Página Anterior: 1 Quando você der um print_r , ou var dump .. em $Pages .. PaginatorEntity Object ( [Array] => Array ( [Pages] => Array ( [0] => 1 [1] => 2 [2] => 3 ) [currentPage] => 2 [Offset] => 2 [limitOffset] => 2 ) ) Lembrando que se você também quiser mostrar os links .. pode, ela implementa um IteratorAggregate .. basta fazer um forEach em $Pages Claro que tem os outros métodos também pra você fazer um limit em SQL por exemplo ... o até mesmo encaixar em um for para exibir .. ou no LimitIterator .. <?php $Iterator = new ArrayIterator ( $Array ) ; forEach ( new LimitIterator ( $Iterator , $Pages->getOffset() , $Pages->getLimit() ) as $R ) { print_r ( $R ) ; } // ... Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 Entendi, mas olha só, eu estou usando a url para melhor indexação no google, ou seja, ele ficaria digamos: minhaUriDefault/index/sessao/definicao ... sabendo então que o usuário clicou em definicao eu busco os valores referentes a ele no banco... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 sabendo então que o usuário clicou em definicao eu busco os valores referentes a ele no banco... E o que isso tem haver ? você quer pegar a definição no banco, verificar a posição dela, então achar a anterior e próxima ? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 E o que isso tem haver ? você quer pegar a definição no banco, verificar a posição dela, então achar a anterior e próxima ? Não do banco, o que faço com banco é uma pesquisa completa, aonde quero que ele vasculhe é no array, que a chave é o nome do campo, e o valor, é o nome real dele... tipo: array( "pagina1" => "Pagina 1", "pagina2" => "Pagina 2", "pagina3" => "Pagina 3" ) sei que se eu clicar em pagina 2 por exemplo, na url, ele iria ficar /pagina2, o nome dele seria Pagina 2, mas nos botoes de anterior e próximo, teriam de ter o pagina1 e pagina3 respectivamente.. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Seria isso .. ? <?php $Array = Array( "definicao" => "Definição" , "descricao" => "Descrição" , "sintoma" => "Sintomas" , "causas" => "Causas" , "diagnostico" => "Diagnóstico" , "tratamento" => "Tratamento" , "tratamento_alternativo" => "Tratamento Alternativo" , "consulte_especialista" => "Consulte Especialista" , "complicacoes" => "Complicações" , "prognostico" => "Prognóstico" , "medicamento" => "Medicações" , "prevencao" => "Prevenção" , "referencias" => "Referências" ); // ... coloquei o ternário só pra demonstrar, no caso vai cair em sintoma se não tiver nada setado $Current = isset ( $_GET [ 'definicao' ] ) ? ( $_GET [ 'definicao' ] ) : 'prevencao' ; function paginate( array &$array , $current ) { if ( isset ( $current ) && count ( $array ) > 0 ) { $keys = array_keys ( $array ) ; $values = array_values ( $array ) ; $position = array_search ( $current , $keys , false ) ; if ( array_key_exists ( ( $position + 1 ) , $values ) ) $next = $array [ $keys [ $position + 1 ] ] ; if ( array_key_exists ( ( $position - 1 ) , $values ) ) $prev = $array [ $keys [ $position - 1 ] ] ; $current = $array [ $current ] ; return array ( 'current' => $current , 'next' => $next , 'prev' => $prev ) ; } } print_r( paginate ( $Array , $Current ) ); Saída Array ( [current] => Prevenção [next] => Referências [prev] => Medicações ) Se quiser pegar a key da definição, basta tirar o $array ... ficando assim $prev = $keys [ $position - 1 ] ; Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 Cara, muito bom seu código, só que tem um único problema, quando eu retrocedo para o primeiro, ele retorna um erro na variável $prev, e o mesmo ocorre se eu vou para o último... Mas tirando isso, muito bom mesmo... parabéns :clap: Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Em qual deles ?, no paginator ou nessa function aí em cima ? porque o padrão, é voltar null, em ambos .. daí você tem que testar, se for nulo, não tem anterior ou próxima Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 na função que você mostrou agora... retorna null ? Ok, vou ver se consigo modificar para que fique uma paginação "infinita" :lol: Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Novembro 2, 2011 Sim .. null .. empty , isso é coisa que você tem que testar .. if ( $ .. [ 'prev' ] == null ) { // ... } Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 2, 2011 Segue aqui o código para a paginação infinita: public function paginate( array &$array , $current ) { if ( isset ( $current ) && count ( $array ) > 0 ) { $keys = array_keys ( $array ) ; $values = array_values ( $array ) ; $position = array_search ( $current , $keys , false ) ; if ( array_key_exists ( ( $position + 1 ) , $values ) ) { $next = $keys [ $position + 1 ] ; } else { $next = reset( $keys ); } if ( array_key_exists ( ( $position - 1 ) , $values ) ) { $prev = $keys [ $position - 1 ] ; } else { $prev = end( $keys ); } $current = $array [ $current ] ; return array ( "current" => $current , "next" => $next , "prev" => $prev ) ; } } Obrigado Andrey Knupp pela sua ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Novembro 2, 2011 estou usando Zend, só que a paginação não é a convencional, tem de ser apenas: pagina atual DE total de paginas <anterior> <proximo> Só pra constar, você pode exibir os links de paginação da maneira que desejar usando o Zend_Paginator, para isso basta editar o arquivo paginator.phtml ou outro arquivo que você tenha definido. Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Novembro 3, 2011 Sim sim, eu utilizo o Paginator, apenas teria de trabalhar com valores pré definidos, e pelo que utilizo, o Paginator, trabalha com dados vindo de um array bi dimensional, não é ? Uma pergunta, o que é o '&' no paginate( array &$array , $current ) ? Compartilhar este post Link para o post Compartilhar em outros sites