Tylër 0 Denunciar post Postado Agosto 19, 2010 Boa noite a todos Estou tentando adaptar a paginação com scandir para o cakePHP mas estou com dúvidas se devo adicionar a paginação no método view() do controller ou na view view.ctp Segui este tópico: http://www.htmlstaff...er.php?id=22985 function view( $slug = null, $json = false ) { $gal = $this->Gallery->findBySlug($slug); $this->set( 'g', $gal ); # lendo um post com slug # Paginar imagens do bd #Definimos o diretório onde estão os arquivos a serem listados #Obs.: A função scandir só funciona no PHP 5 ou superior $path = '../../../files/images/galleries'; $dImg = 'images'; $dTmb = 'thumbs'; $id = $gal['Gallery']['id']; $arquivos = scandir( $path.'/'.$id.'/'.$dTmb.'/' ); $listagem = array(); foreach( $arquivos as $f ) { if( strpos($f,'.') !== 0 ) { array_push( $listagem, $f ); } } #Definimos quantos arquivos exibir por página $paginas = array_chunk( $listagem, 5 ); #Montamos os links da paginação for( $i=1; $i< count($paginas)+1; $i++ ) { echo "[ <a href=\"?lista=$i\">$i</a> ] "; } echo " "; $pagina = (int)@$_GET["lista"]; $paginas[$pagina]; #Exibimos o resultado da paginação foreach( $paginas[$pagina] as $arquivo ) { echo "$arquivo "; } # Fim da paginacao if( $json ) { $this->view = 'Json'; $this->set( 'json', 'g' ); } } Pergunta: Existe alguma forma de fazer isso automático no cake? Tipo, um $paginate sem BD? Aguardo contato. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Agosto 19, 2010 Vamo lá gente! :mellow: Tentar usar scandir pra paginar como o paginate() do cakePHP faz. Será que dá certo? Referências: http://book.cakephp....nation-in-Views http://www.htmlstaff...er.php?id=22985 http://bakery.cakephp.org/articles/view/form-posting-with-_get-parameters O ruim deste, é que não consigo capturar o parâmetro "page": http://forum.imaster...ados-de-um-dir/ Já neste, consigo mostrá-lo, utilizando pr(), mas não sei como capturá-lo: http://book.cakephp....ttribute-params url: http://ts_cakephp/ts/galleries/view/__lbum_de_fotos_2/1 Array ( [0] => __lbum_de_fotos_2 [1] => 1 ) function view( $slug = null, $page = null ) { $g = $this->Gallery->findBySlug($slug); $this->set( 'g', $g ); # lendo um post com slug $path = '../../../files/images/galleries'; $dImg = 'images'; $dTmb = 'thumbs'; $id = $g['Gallery']['id']; $slugTitle = $g['Gallery']['slug']; #Definimos o diretório onde estão os arquivos a serem listados #Obs.: A função scandir só funciona no PHP 5 ou superior $arquivos = scandir( $path.'/'.$id.'/'.$dTmb ); $listagem = array(); foreach( $arquivos as $f ) { if( strpos($f,'.') !== 0 ) { array_push( $listagem, $f ); } } # Definimos quantos arquivos exibir por página $paginas = array_chunk( $listagem, 5 ); # Montamos os links da paginação for( $i = 1; $i < count($paginas)+1; $i++ ) { echo '[ <a href=".$_SERVER['SERVER_NAME'].'/ts/galleries/view/'.$slugTitle.'/'.$i.">'.$i.'</a> ] '; } echo " "; $pagina = $this->params['pass']; pr($pagina); exit; $paginas[$pagina]; #Exibimos o resultado da paginação foreach( $paginas[$pagina] as $arquivo ) { //echo $html->image( '/files/images/galleries/'.$id.'/'.$arquivo, array( 'alt'=>'image' ) ); echo '<img src="http://'.$_SERVER['SERVER_NAME'].'/files/images/galleries/'.$id.'/thumbs/'.$arquivo.'" alt="image" />'; echo ' | '; } # Fim da paginacao } Isto por enquanto está no controller, pois estou pesquisando por uma forma mais reusável no cake pra criar isto... Gostaria de ajuda! Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 20, 2010 usa o LightBox pra fazer exibição de img, ele já tem um "paginador" ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Agosto 20, 2010 Uma ótima dica! Obrigado! Bom, encontrei alguns exemplos que realmente podem fazer a diferença mas nada com paginador não... http://www.bensnider.com/2008/07/22/cakephp-lightbox-helper/ http://cocoacrusty.com/?p=106 http://bakery.cakephp.org/articles/view/lightroom-helper Vou realizar testes e trago novidades assim que puder.. ( vou ficar fora por uns tempos e por isso talvez não vou poder responder aos tópicos ) Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 25, 2010 Uma ótima dica! Obrigado! Bom, encontrei alguns exemplos que realmente podem fazer a diferença mas nada com paginador não... http://www.bensnider.com/2008/07/22/cakephp-lightbox-helper/ http://cocoacrusty.com/?p=106 http://bakery.cakephp.org/articles/view/lightroom-helper Vou realizar testes e trago novidades assim que puder.. ( vou ficar fora por uns tempos e por isso talvez não vou poder responder aos tópicos ) O lightbox já tem um paginador proprio que você nao precisa fazer nada, ele mesmo cria tudo e é bem fácil de usar. por exemplo aqui http://www.gn10.com.br/plugins/lightbox.html se você posicionar o mouse um pouco abaixo do canto superior direito, vai aparecer uma flecha pra você ir pra proxima foto e assim por diante.. Abraço Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Agosto 25, 2010 Acho que você não entendeu o que o lightbox faz Isto não é um paginador. Paginação é você dividir uma listagem de alguma coisa em páginas. O lightbox não faz isso, o que ele faz na verdade é a transição de imagens que estão na mesma página, então não é possível chamá-lo de paginador.... Bom, de volta a estaca zero! Os links que pesquisei são estes: http://forum.imaster...ost__p__1592982 http://forum.imaster...ost__p__1593452 Compartilhar este post Link para o post Compartilhar em outros sites
lucasvocals 0 Denunciar post Postado Agosto 26, 2010 achei que você quisesse fazer isso quando exibisse as imagens... bom, te apresento o comando foreach então.. http://br2.php.net/manual/en/control-structures.foreach.php faz um contador e usa o foreach pra organizar. Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Agosto 26, 2010 @lucasvocals, obrigado por ajudar mas... achei que você quisesse fazer isso quando exibisse as imagens... Não. A dúvida é paginação em cakephp mesmo. bom, te apresento o comando foreach então.. Já estou utilizando foreach conforme apresentado acima:http://forum.imaster...ost__p__1592982 * Com a ajuda do @kakaroto fomos um pouco além... $url = $_SERVER['REQUEST_URI']; $explode = explode( "/", $url ); if ( !isset($explode[5]) ) $valor = ""; else $valor = $explode[5]; if ( $valor != "" ) $id_da_pagina = $explode["5"]; else $id_da_pagina = 0; $g = $this->Gallery->findBySlug($slug); $this->set( 'g', $g ); # lendo um post com slug $path = '../../../files/images/galleries'; $dImg = 'images'; $dTmb = 'thumbs'; $id = $g['Gallery']['id']; $galleryTitle = $g['Gallery']['title']; $slugTitle = $g['Gallery']['slug']; $dir = $path .'/'.$id .'/'.$dTmb; if ( $foldername = opendir( $dir ) ) { while (false !== ($filename = readdir($foldername))) { if ( $filename != "." && $filename != ".." ) { $files[] = $filename; $url_thumbs = $path.'/'.$id.'/'.$dTmb.'/'.$files[0]; $url_images = $path.'/'.$id.'/'.$dImg.'/'.$files[0]; $dadosImg = array( 'thumbs'=>$url_thumbs, 'images'=>$url_images, 'title'=>$galleryTitle ); $this->set( $dadosImg ); } } closedir( $foldername ); }Só que não tem a paginação..E também só mostra um resultado, gostaria que o $this-Lset() settasse a listagem, mas não encontrei algo parecido nas pesquisas da internet... * Só uma observação: Parece que o cake não possui nenhum componente nativo que faça isso, então vou ter que utilizar o "porco" do php mesmo... <_< Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Setembro 5, 2010 Boa tarde, voltei com a paginação pronta! Minha url será assim: http://site.br/ts/panels/galleries/view/__lbum_de_fotos http://site.br/ts/panels/galleries/view/__lbum_de_fotos/1 http://site.br/ts/panels/galleries/view/__lbum_de_fotos/2 http://site.br/ts/panels/galleries/view/__lbum_de_fotos/3 etc... code by: @kakaroto $url = $_SERVER['REQUEST_URI']; $explode = explode( "/", $url ); if ( !isset($explode[6]) ) $valor = ""; else $valor = $explode[6]; if ( $valor != "" ) $id_da_pagina = $explode[6]; else $id_da_pagina = 0; $g = $this->Gallery->findBySlug($slug); $this->set( 'g', $g ); # lendo um post com slug $path = '../../../files/images/galleries'; $dImg = 'images'; $dTmb = 'thumbs'; $id = $g['Gallery']['id']; $galleryTitle = $g['Gallery']['title']; $slugTitle = $g['Gallery']['slug']; $dir = $path .'/'.$id .'/'.$dTmb; # lendo imagens do diretorio $album = $path .'/'.$id .'/'.$dTmb; $total = count( $fotos = glob( "$album/{*.jpg,*.png}", GLOB_BRACE ) ); $limite_foto = 5; if ( $total > $limite_foto ) { $gerar_link = $total / $limite_foto; $gerar_link = round( $gerar_link ); for ( $i = 0; $i < count( $gerar_link ); $i++ ) { if ( $i == 0 ) $link = '[ <a href=".$_SERVER['SERVER_NAME'].'/ts/galleries/view/'.$slugTitle.'/ ">Início</a> ] '; //$link = $this->Html->link( 'Início', array( 'action'=>'views', $slugTitle ) ); else $link = '[ <a href="http://'.$_SERVER['SERVER_NAME'].'/ts/galleries/view/'.$slugTitle.'/'.($i * $limite_foto).">'.$i.'</a> ] '; //$link = $html->link( $i, array( 'action'=>'views', $slugTitle.'/'.($i * $limite_foto) ) ); } $this->set( 'link', $link ); } #Exibimos o resultado da paginao $novolimite = ( $id_da_pagina + $limite_foto ) - 1; $a = 0; // aqui e para ele respeita o limite de exibi so cinco fotos foreach( range( $id_da_pagina, $novolimite ) as $posicao_foto ) { if ( $a < $limite_foto ) { if ( @$fotos[$posicao_foto] ) { //pr( $fotos ); $url_thumbs = $fotos[$posicao_foto]; //$url_images = $fotos[$posicao_foto]; $this->set( 'thumbs', $url_thumbs ); //$this->set( 'images', $url_images ); //$this->set( 'title', $galleryTitle ); } } $a++; } view: pr( $thumbs ); Problemas: - Preciso recuperar a url da imagem no diretório thumbs e images, pois a mesma imagem existe em ambos, mas ampliada e reduzida... - Se eu der um echo nas fotos, aparece a listagem delas, mas se eu setar com $this->set() aparece só uma... Aguardo ajuda. Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Setembro 9, 2010 Bom, aqui diz que o $this->set() é capaz de passar um array dentro da variável setada: $this->set('usuarios', $this->Usuario->find('all')); No meu caso estou tentando passar esta variável: $url_thumbs = $fotos[$posicao_foto]; //pr( compact( 'url_thumbs' ) ); pr( $url_thumbs ); $this->set( 'thumbs', $url_thumbs );Que por sua vez, no pr() dentro do controller lista todas as imagens desta sequência: ../../../files/images/galleries/6/thumbs/4aaa9afd.jpg ../../../files/images/galleries/6/thumbs/4aaa9afdbc6.jpg ../../../files/images/galleries/6/thumbs/a37d860bf592d5.jpg ../../../files/images/galleries/6/thumbs/a37d860bf592d51.jpgMas $this->set( 'thumbs', $url_thumbs ); não foi capaz de passar uma lista de imagens para o pr() da view: ../../../files/images/galleries/6/thumbs/a37d860bf592d51.jpg Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Setembro 11, 2010 @tyler desculpe a demora e que a minha senha não estava entrando no forum :) sobre a sua pergunta :) Bom, aqui diz que o $this->set() é capaz de passar um array dentro da variável setada: sim o set passar um array sim nessa parte aqui No meu caso estou tentando passar esta variável: $url_thumbs = $fotos[$posicao_foto]; //pr( compact( 'url_thumbs' ) ); pr( $url_thumbs ); $this->set( 'thumbs', $url_thumbs ); era so mudar aqui $url_thumbs[] = $fotos[$posicao_foto]; proxima duvida espero que resolva o seu problema E ai lucas ver ser aparece no gtalk fui @kakarotodev Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Setembro 11, 2010 Oh, obrigado hehe! você já vem me ajudando muito cara! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Mas tenho uma outra dúvida: Como vamos converter as urls que apontam diretamente para /thumbs/, preciso que também aponte para /images/ Tentei: $url_images[] = preg_replace( 'thumbs', 'images', $fotos[$posicao_foto] );Mas fracassei =/ Vamos resolver mais esta kakaroto! Att. Compartilhar este post Link para o post Compartilhar em outros sites
kakaroto developer 0 Denunciar post Postado Setembro 11, 2010 @tyller Não é 'thumbs' estude isso melhor eh: '/thumbs/i' testa ai ! qual coisa manda la no meu Twitter que eu vejo mais tarde abs fui @kakarotodev Compartilhar este post Link para o post Compartilhar em outros sites
Tylër 0 Denunciar post Postado Setembro 11, 2010 Ow, olha ele novamente hehe! Sim, eh verdade, nunca utilizei preg_replace para estes fins e não fazia idéia como agir nessas horas. Agradeço cara! Obrigado a todos que ajudaram! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites