gorpo 0 Denunciar post Postado Fevereiro 6, 2007 Bom dia. Tô tentando fazer uma galeria de fotos simplificada, mas meus parcos conhecimentos em lógica, me deram um tombo. Pensei na seguinte forma: O programa abre a pasta no servidor, conta as fotos e monta a tabela. Comecei assim: <?$dir = "imagens";$total = 0;foreach (glob($dir."/*.jpg") as $filename){ $total++;}$fotos_coluna = 3;$total_fotos = $total;$linhas = $total_fotos / $fotos_coluna;?> E empaquei aí. Tentei por do...while, mas não rolou muito bem... Alguém tem uma luz pra me indicar por onde vou? Obrigado desde já. Compartilhar este post Link para o post Compartilhar em outros sites
marceloy 0 Denunciar post Postado Fevereiro 6, 2007 O problema é só de lógica ?? Bom, a estruturação de uma tabela pode ser vista como a estruturação de uma matriz. Ou seja, pode-se contruir uma matriz a partir dos seus dados e depois manipular-la da maneira como quiser. <?$dir = "imagens";$total = 0;$i = 1;$j = 1;$fotos_coluna = 3;$arr = array();foreach (glob($dir."/*.jpg") as $filename){ $arr[$i][$j] = $filename; if($j > $fotos_coluna) { $j = 1; $i++; } else $j++;}?> Agora é só brincar com a matriz. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif [editado]Pronto, acho que agora foi. Mas o que vale é a idéia. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif [/editado] Compartilhar este post Link para o post Compartilhar em outros sites
gorpo 0 Denunciar post Postado Fevereiro 6, 2007 Cara, não entendi muito bem, talvez o problema não seja só de lógica, mas vamos lá...Tanto a $i quanto a $j me dão o valor 4, considerando que eu tenho 15 fotos na pasta.O que eu faço com essas variáveis?Vlw. Compartilhar este post Link para o post Compartilhar em outros sites
marceloy 0 Denunciar post Postado Fevereiro 6, 2007 Gorpo, as variáveis de $i e $j são variáveis do laço. (Somente para auxílio na indexação do array) O que você deve utilizar nesse caso seria a variável $arr, onde estão armazenados os nomes dos arquivos separados por fileiras e colunas. Estruturei dessa forma para que possa reutilizar as informações, mas também poderia estruturar a tabela imprimindo diretamente em tela. Sugiro que leia sobre arrays: http://br.php.net/manual/pt_BR/ref.array.php Compartilhar este post Link para o post Compartilhar em outros sites
gorpo 0 Denunciar post Postado Fevereiro 6, 2007 O conteúdo sobre arrays é ótimo, mas bem extenso tb, percebo que tô muito cru ainda, haja leitura. Voltando ao meu código, eu consegui chegar perto, eu acho... Consigo que o código monte a tabela para mim, linha por linha, e em cada linha tenho um laço que coloca 3 colunas. O problema é que eu não sei como capturar o resultado de $filename em sequência, pego sempre o último, isso porque está fora do laço glob(). Daí surgiu outra dúvida, como indexar a $filename, para poder fazer um laço que monte as colunas em sequência? $dir = "imagens";$total = 0;foreach (glob($dir."/*.jpg") as $filename){ $total++;}$fotos_coluna = 3;$linhas = $total / $fotos_coluna;for($lin=0; $lin<$linhas; $lin++){echo "<table width='300' border='0' cellspacing='0' cellpadding='5'> <tr>"; for($i=1; $i<=$fotos_coluna; $i++){ $nr = $i + ($lin * $fotos_coluna); echo "<td><img src='$filename' width='100' />$nr</td>";} echo "</tr></table>";} *Editando o código* Isso funcionou, me retorna: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Então se eu conseguir transformar a $filename em um índice, eu consigo fazer o que me propus. Abs. Compartilhar este post Link para o post Compartilhar em outros sites
gorpo 0 Denunciar post Postado Fevereiro 6, 2007 Valew marceloy pela dica da array. ;) Quase lá!!! Tá funcionando, o código é o seguinte: <?$dir = "imagens";$total = 0;$arr = array();foreach (glob($dir."/*.jpg") as $filename){ $arr[] = $filename; $total++;}$fotos_coluna = 3;$linhas = $total / $fotos_coluna;for($lin=0; $lin<$linhas; $lin++){echo "<table width='300' border='0' cellspacing='0' cellpadding='5'> <tr>"; for($i=0; $i<$fotos_coluna; $i++){ $nr = $i + ($lin * $fotos_coluna); echo "<td><img src='$arr[$nr]' width='100' />$nr</td>"; } echo "</tr></table>";}?> O problema agora é o seguinte: Seo número de fotos não for múltiplo exato da operação ($fotos_coluna * $linhas), vai ficar sobrando células para preencher. E retorna o seguinte erro: Notice: Undefined offset: 15 in e:\sites\scripts\opendir.php on line 18. Sendo que eu tenho 15 imagens na pasta, mas a contagem inicia-se do 0. Como eu resolvo isso? Abs. * Edit * Resolvido. <?$dir = "imagens";$total = 0;$arr = array();foreach (glob($dir."/*.jpg") as $filename){ $arr[] = $filename; $total++;}$fotos_coluna = 3;$linhas = $total / $fotos_coluna;for($lin=0; $lin<$linhas; $lin++){echo "<table width='300' border='0' cellspacing='0' cellpadding='5'> <tr>"; for($i=0; $i<$fotos_coluna; $i++){ $nr = $i + ($lin * $fotos_coluna); if ($nr < ($fotos_coluna * $linhas)){ echo "<td><img src='$arr[$nr]' width='100' />$nr</td>"; } } echo "</tr></table>";}?> Muito Obrigado marceloy, pela ajuda e paciência. Taí o código, pra quem quiser. Pode não estar bem programado, mas funciona. Abs. Compartilhar este post Link para o post Compartilhar em outros sites
calcio 2 Denunciar post Postado Fevereiro 6, 2007 Gorpo acho que tenho a solução do seu "POBLEMA" rs.Ñ to com o código aki e nem sei todo de cabeça, assim q chegar em casa eu te mando. ok?Só pra ter certeza do que você precisa, entre no site www.goldeletra.org.br e veja a sessão foto galeria. É isso que você precisa?Aguardo seu retorno!COMPLEMENTANDOSua lógica está quase certa, porem você precisa ajustar as aberturas e fechamentos dos "<tr>" e "<td>" com seus loops.Ex. você só pode fecha uma <td> se o contador do loop for igual ao número de colunas que você quiser, aí você fecha a td e a tr pra depois abrir uma nova linha. é +/- isso. Compartilhar este post Link para o post Compartilhar em outros sites