Ir para conteúdo

Arquivado

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

gorpo

Problema de lógica.

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

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