Jump to content


Photo

Exibir Resultados Em Colunas


  • Faça o login para participar
22 replies to this topic

#1 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 06/06/2006, 14:32

Guia Definitivo para Exibir Resultados em Colunas


Fato
Todos percebemos a grande dificuldade em compreender o processo para apresentar resultados de uma consulta em várias colunas. Do ponto de vista pessoal, acredito que seja devido à não compreensão do que cada um realmente quer fazer.

Solução
Uma solução simples, que facilitaria muuuuuito a vida de quem desejar colunizar dados, seria a apresentação sem tabelas (tableless), maaaaaas, podemos apresentar dados tabulares algumas vezes, ou de forma mais convincente, tableless não é um padrão tão utilizado...

Com tabelas, vamos, sempre, criar uma simulação do resultado final. Acredite, isso irá ajudar muito na compreensão.

Ok... Let the carnage, begin!

Ahhh, e por favor, leiam as explicações para realmente compreender o processo. Somente com os códigos não será tão definitivo assim esse guia ;)

----------------------------

TABLELESS
Vamos começar pela maneira simples. Para fazer uma exibição em colunas, utilizando apenas divisores de conteúdo (<div>), simplesmente criaremos um container e cada um dos dados. Neste exemplos, exibiremos imagens diferentes, supondo uma galeria de imagens.

CSS
.container
{
  width: 400px;
}

.div_imagem
{
  float: left;
  width: 100px;
}

Para quem conhece, já sabe o que isso vai resultar, não? Um perfeita e simples colunização. Todo o segredo dessa "técnica" está no float: left;, que fará com que cada uma das div com a classe div_imagem se alinhe a direita da anterior, e, assim que acabar com a capacidade máxima do container, ela será automaticamente jogada para a próxima linha.

Exemplo
<div class="container">
<?php
for($i = 1; $i <= 100; $i++)
{
?>
  <div class="div_imagem"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></div>
<?php
}
?>
</div>

O que teremos desta vez?
100 div's com a classe "div_imagem".

E como ficará o resultado final?
Um simples cálculo aritmético, veja:

Nossa largura do container?
400px

Largura de cada uma das div's das imagens?
100px

Logo:
400 / 100 = 4 imagens por linha

Veja que nenhum trabalho adicional é realizado desta forma. Essa, portanto, é a maneira mais simples, fácil e rápida para apresentação de dados em colunas.

----------------------------

TABLE
Fascinado com a facilidade em CSS? Acostume-se, ele veio para facilitar. Mas, temos também, algumas ocasiões onde é necessário a apresentação de dados em colunas utilizando tabelas. E como fica?

Vamos primeiramente, criar nossa Tabela Mestra. Seguiremos o mesmo exemplo utilizado anteriormente, 4 colunas por linha.

Sugestão: Crie a tabela com 2 linhas, dessa forma, você entenderá como funcionará a repetição.

<table width="400">
  <tr>
	<td width="100"><img width="75" height="75" src="imagens/1.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/2.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/3.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/4.jpg" /></td>
  </tr>
  <tr>
	<td width="100"><img width="75" height="75" src="imagens/5.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/6.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/7.jpg" /></td>
	<td width="100"><img width="75" height="75" src="imagens/8.jpg" /></td>
  </tr>
</table>

Por fim, teremos esta tabela. Largura de 400 pixels, cada linha contendo 4 colunas.

O MAIS IMPORTANTE, O QUE DEVEMOS ENTENDER É: O QUE DEVE SER REPETIDO, E QUANDO APRESENTAR.

Nosso trecho a ser repetido SEMPRE é somente:

<td width="100"><img width="75" height="75" src="imagens/X.jpg" /></td>

E o que deve ser apresentado de TEMPOS EM TEMPOS é as <tr>.

Vamos simular um código, nossa primeira tentativa de repretição:

<table width="400">
  <tr>
<?php
for($i = 1; $i <= 100; $i++)
{
?>
	<td width="100"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></td>
<?php
}
?>
  </tr>
</table>

Como podem ver, SEM SUCESSO.

Mas o que eu fiz de errado?
Tudo. Simplesmente tudo, queremos exibir linhas também, não somente repetir colunas. Até onde conheço, um <td> criará sempre uma outra coluna, nunca uma nova linha.

O que devo fazer para solucionar isso?
Colocar no intervalo desejado a nossa linda <tr>.

Ok, vamos à nossa segunda tentativa:

<table width="400">
  <tr>
<?php
for($i = 1; $i <= 100; $i++)
{
?>
	<tr>
	<td width="100"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></td>
	</tr>
<?php
}
?>
  </tr>
</table>

E agora? Por quê não funcionou?
Colocar no INTERVALO DESEJADO a nossa linda <tr>.
Intervalo Desejado != Sempre

Qual o nosso intervalo desejado? A cada 4 colunas, correto? Pronto, vamos à mais um código:

<table width="400">
  <tr>
<?php
$cont = 1;
for($i = 1; $i <= 100; $i++)
{
  if($cont == 1)
  {
	print("<tr>");
  }
?>
	<td width="100"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></td>
<?php
  if($cont == 4)
  {
	print("</tr>");
	$cont = 1;
  } else
  {
	$cont++;
  }
}
?>
  </tr>
</table>

Funcionou, não? Mas vamos com calma, para quem apenas deseja dividir o conteúdo em colunas, ótimo, vai funcionar, apenas lembre-se de alterar o 4 para o número de colunas desejadas. 10, 15, 30. Vai funcionar.

Mas por quê funcionou?
A nossa <td> exibimos SEMPRE. O segredo está nas <tr>'s. Lembre-se do ditado:

- O segredo está nas entre-linhas.

Neste caso, está na linha, literalmente B)

Como é esse segredo?
vamos à primeira condicional:

if($cont == 1)
  {
	print("<tr>");
  }

Analisando:
Se o nosso $cont (contador) for igual a 1, ou seja, a primeira coluna de uma linha, devemos exibir essa nova linha. Certo?

Já a segunda condicional:

if($cont == 4)
  {
	print("</tr>");
	$cont = 1;
  } else
  {
	$cont++;
  }

Verifica se o nosso $cont for igual a 4, ou seja, a última coluna de uma linha, caso seja, devemos exibir o fim desta linha e passar o nosso contador devolta à 1, reiniciando o processo. Caso ele não seja o último elemento, devemos apenas incrementar seu valor.

----------------------------

OTIMIZAÇÕES

Como já dito, para quem apenas gostaria de entender como repetir os dados em colunas, já pode se deliciar com o exemplo apresentado acima.

Mas e aqueles que desejam sempre algo mais? Bom, para esses individuos, temos nossas Otimizações.

Pra que diabos preciso de um novo contador? Já não possuo o $i?
Exato! Não precisamos dele.

Antes de tentar eliminar nosso contador, vamos compreender os passos para trabalhar sem ele.

Não poderemos alterar o valor do $i, ou alguém aqui fica estourando índices por aí? Ai ai ai...

Mas então, como vou saber se é a primeira ou a última coluna com o $i em 4+?
Módulo (%).

Esse operador aritmético nunca foi apresentado por seus professores de matemática, hein?

O quê ele faz e como utilizá-lo?
Veja alguns exemplos:

<?php
print(5 % 2); // 1
print(5 % 3); // 2
print(10 % 6); // 4
?>

Ahh, agora eu ent... O QUÊ?! COMO ESSES RESULTADOS?!
Calma, calma, ele retorna o resto de uma divisão. Ou seja, 5 dividido por 2 = 2, mas, sobrando 1.

10 / 6 = 1
Sobrando 4

Compreendês ombre? Ele realiza uma divisão exata, retornando apenas a sobra.

E como isso vai me ajudar?
Veja um exemplo novamente:

<?php
for($i = 1; $i <= 100; $i++)
{
  print(($i % 4) . "<br />");
}
?>

Qual foi o resultado obtido?
3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, ...

Temos uma contagem de 3 à 0, o que o nosso antigo $cont (1 à 4) fazia.

<table width="400">
  <tr>
<?php
for($i = 1; $i <= 100; $i++)
{
  if(($i % 4) == 3)
  {
	print("<tr>");
  }
?>
	<td width="100"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></td>
<?php
  if(($i % 4) == 0)
  {
	print("</tr>");
  }
}
?>
  </tr>
</table>

Só perceba que alteramos os valores de comparação. Agora ele não indica qual posição está a coluna, mas sim, quantas faltando para o fim.

Comparamos agora seu valor com 3, para o inicio, e com 0 para o fim.

----------------------------

Como diria um certo filme:

Não olhe para o problema, mas sim, à solução
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#2 braulio

braulio

    Normal

  • Usuários
  • 117 posts
  • Sexo:Não informado
  • Localidade:Belo Horizonte - MG

Posted 10/06/2006, 15:41

Gostei muito.
*Já adicionei este em meus favoritos !
Obrigadão !!!
Vlw !

Edição feita por: braulio, 10/06/2006, 15:43.


#3 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 13/06/2006, 13:16

Balala, você é meu herói :wub:

uahahahhahaahha

Muitos tópicos sobre o assunto, e muitas pessoas criando mais tópicos sobre o assunto sem ao menos PROCURAR, espero que com este EXECELENTE tutorial as pessoas aprendem! :huh:

Uma dica: Deixa FIXO este tópico :assobio:

Edição feita por: Goku Jr, 13/06/2006, 13:26.

-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#4 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 26/06/2006, 09:42

Valeu Goku B)

Pelos vários tópicos com dúvidas, tentei passar uma maneira simples para fazer essas repetições. Pelo menos agora, não pesquisou é [b]ban[/n]. :wacko:
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#5 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 03/07/2006, 14:35

muito bom ... gostei da forma com div ...

(y)

Tipo ... digamso que eu esteja listando 3 fotos por coluna e eu tenha 8 fotos a serem listadas ...

ou seja a ultima linha terá apenas duas <td>... com conteúdo ... podendo gerar a imagem [x]

Seria uma boa complementar isso hein ...

:D

Parabéns ... sempre achei a tua didática perfeita ... até um panga entende hehehehe ...

:D Até mais

#6 dbl

dbl

    Diogo Branco Leal

  • Usuários
  • 505 posts
  • Sexo:Masculino
  • Localidade:Teresópolis - RJ
  • Interesses:PHP, Firework, Photoshop, Flash, etc...

Posted 03/07/2006, 15:14

Parabéns ... sempre achei a tua didática perfeita ... até um panga entende hehehehe ...

:D

Como assim :huh: ... eu naum entendi nada :blink:
hehehehehehehehe
sacanagem... perfeito o tutorial!!
(y)
dbl - Um só Deus é pai de todos, o qual é sobre todos e em todos. (Efésios - 4.6)
Posted Image

#7 paico

paico

    @paico

  • Usuários
  • 135 posts
  • Sexo:Masculino

Posted 04/07/2006, 15:34

fala sério!! Muito bom mesmo!! Além de aprender a fazer essa quebra de linha nas tabelas ainda conheci um pouquinho sobre tableless!! Parabéns!
Blogosfera.us - www.blogosfera.us
Chureba - www.chureba.com
mblogg.in - serviço de microbloggin - www.mblogg.in

#8 -v6-

-v6-

    Normal

  • Usuários
  • 82 posts
  • Sexo:Não informado

Posted 20/09/2006, 18:39

COMO fazer isso buscando várias imagens no banco de dados.?
DETALHE: com nomes diferentes?
ESTUDANDO

PHP/Mysql/JavaScript/Tableless/
Fireworks/Dreamweaver/Flash

#9 harder

harder

    Turista

  • Usuários
  • 26 posts
  • Sexo:Não informado

Posted 16/04/2007, 09:24

Ai galera, nao sei se nao tem essa resposta nesse tutorial, ou se eu nao entendi. Mas queria saber como faço para configurar quantas linhas irão aparecer nesse nesse script. Como veem ai da para configurar quantas colunas, mas nao sei quantas linhas. Ate porque depois de definir quantas linhas teria que ser criado um link para as próximas páginas, caso fossem adicionais mais "objetos".... Acho que deu para entender!

<?
// Agora vamos montar o código. Pegue o valor total de resultados:
$total = mysql_num_rows($sql);
// Defina o número de colunas que você deseja exibir:
$colunas = "2";
// Agora vamos ao "truque":
if ($total>0) {
for ($i = 0; $i < $total; $i++) {
if (($i%$colunas)==0) {
?>


Valeu
Abraços

#10 thescente

thescente

    Eron Venter

  • Usuários
  • 599 posts
  • Sexo:Não informado
  • Localidade:Novo Hamburgo/RS

Posted 23/10/2007, 10:10

Eu gostaria de inserir apos o final de cada </tr> mais um <tr> com uma linha horizontal
como eu poderia fazer isso?

<table width="400">
<tr>
<td width="100"><img width="75" height="75" src="imagens/1.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/2.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/3.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/4.jpg" /></td>
</tr>
<tr>
<td><hr></td>
</tr>

<tr>
<td width="100"><img width="75" height="75" src="imagens/5.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/6.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/7.jpg" /></td>
<td width="100"><img width="75" height="75" src="imagens/8.jpg" /></td>
</tr>
<tr>
<td><hr></td>
</tr>

</table>


Como eu poderia adaptar no código?

#11 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 07/11/2007, 18:45

Depois de tanto, tanto tempo que este tutorial foi postado, mas, aparentemente ninguém percebeu que tem um erro no exemplo usando tabelas lá o BALALA (que Deus o tenha) adicionou um <tr> e um </tr> que são inuteis deixando a tabela quebrada (apesar que quase não se percebe) o correto seria assim
<table width="400" border="1">
<?php
$cont = 1;
for($i = 1; $i <= 24; $i++)
{
  if($cont == 1)
  {
	print("<tr>");
  }
?>
	<td width="100"><img width="75" height="75" src="imagens/<?php print($i); ?>.jpg" /></td>
<?php
  if($cont == 4)
  {
	print("</tr>");
	$cont = 1;
  } else
  {
	$cont++;
  }
}
?>
</table>

Falopa!

#12 leocampra

leocampra

    Turista

  • Usuários
  • 54 posts
  • Sexo:Não informado

Posted 17/03/2008, 10:36

pois é galera estou apanhando para fazer este codigo funcionar aqui deem uma olhada e me ajudem a achar o erro.

<?
$Sql=mysql_query("select codigo_sessao,nome from sessao order by nome",$db);
<table width="400" border="1">
<?php
$cont = 1;
for($i = 1; $i <= 24; $i++)
{
if($cont == 1)
{
print("<tr>");
}
?>
<td width="100"><?
echo"<li><a href=\"mostra_produto.php?codigo_sessao=".$valor['codigo_sessao']."\"><span>".$valor['nome']."</span></a></li>";
?></td>
<?php
if($cont == 4)
{
print("</tr>");
$cont = 1;
} else
{
$cont++;
}
}
?>

consegui resolver galera, ficou muito bom de uma olhada no codigo ae que fiz e deu certo

<?
echo "<table border=\"0\">";
$Sql=mysql_query("select codigo_sessao,nome from sessao order by nome",$db);
echo "<tr>";
$i=1;
while ($valor=mysql_fetch_array($Sql)) {
if(($i % 7) == 0){ echo "</tr><tr>"; }
?>
<td><?
echo"<li><a href=\"mostra_produto.php?codigo_sessao=".$valor['codigo_sessao']."\"><span>".$valor['nome']."</span></a></li>";
?></td>
<?
$i++;
}
echo"</tr>";
mysql_free_result($Sql);
echo "</table>";
?>

aquele abraço a todos

#13 DJ Cristiano

DJ Cristiano

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 14/05/2008, 20:28

Seguinte, o tutorial é ótimo e muito bem explicado, obrigado pela boa vontade.

Tentei adaptar o código à minha necessidade mas não consegui. Estou montando uma pequena agenda (Controle de Ramais) da empresa onde trabalho e gostaria de mostrar todos os ramais cadastrados em uma única página para que possa ser impresso pelos funcionários sempre que preciso. Quero mostrar esta lista em 2 ou 3 colunas como no código abaixo.

Desde já agradeço a ajuda dos colegas.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> Teste de Ramais </title>
<style type="text/css">
.tr_top {
background: #4968B8;
color: #fff;
font-weight: bold;
}
body {
font-family: Arial, Tahoma, Georgia, Verdana, ;
}
</style>
</head>

<body>

<table border="1" width="600" >
<tr>
<td>
<table cellpadding="1" cellpadding="0" border="1" width="100%">

<tr class="tr_top">
<td colspan="2">Administração</td>
</tr>

<tr>
<td>Setor 01</td><td>8801</td>
</tr>

<tr>
<td>Setor 02</td><td>8802</td>
</tr>

<tr>
<td>Setor 03</td><td>8803</td>
</tr>

<tr>
<td>Setor 04</td><td>8804</td>
</tr>

</table>
</td>

<td>
<table cellpadding="1" cellpadding="0" border="1" width="100%">

<tr class="tr_top">
<td colspan="2">Contabilidade</td>
</tr>

<tr>
<td>Setor 05</td><td>8805</td>
</tr>

<tr>
<td>Setor 06</td><td>8806</td>
</tr>

<tr>
<td>Setor 07</td><td>8807</td>
</tr>

<tr>
<td>Setor 08</td><td>8808</td>
</tr>

</table>
</td>

<td>

<table cellpadding="1" cellpadding="0" border="1" width="100%">

<tr class="tr_top">
<td colspan="2">Recursos Humanos</td>
</tr>

<tr>
<td>Setor 09</td><td>8809</td>
</tr>

<tr>
<td>Setor 10</td><td>8810</td>
</tr>

<tr>
<td>Setor 11</td><td>8811</td>
</tr>

<tr>
<td>Setor 12</td><td>8812</td>
</tr>

</table>

</td>

</tr>

</table>

</body>
</html>

Attached Files


Edição feita por: DJ Cristiano, 14/05/2008, 20:36.


#14 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 14/05/2008, 20:31

E tu não consegui usar o exemplo?
Mostra ai a tua adaptação online (funcionando) e em código publicado no post (ninguém costuma baixar os códigos anexados ao post).

Falopa!

#15 nfgMutaum

nfgMutaum

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Não informado

Posted 08/07/2008, 09:18

Pessoal...

Estou tendando fazer esse esquema de colunas... mas parece que minha exibição é diferente...

na primeira linha aparece 2 resultados... mas a partir da segunda começa a aparecer 1 por 1 ...

ja tentei muda os valores... mas naum consigo adptar....

o codigo é esse:

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">                          <tr><?php$busca = mysql_query("SELECT * FROM _propaganda");while($anu = mysql_fetch_array($busca)){$cod_noticia    = $anu["cod_noticia"];$titulo = $anu["titulo"];$data  = $anu["data"];$hora  = $anu["hora"];$descricao  = $anu["descricao"];?>                            <td><table width="100%" border="0" cellspacing="0" cellpadding="0">                              <tr>                                <td width="105"><font color="#000000"><a href="imagens/img_propaganda/<?=$anu['foto_g'];?>" rel="lightbox" title="<?=$anu['titulo'];?>"><img src="imagens/img_propaganda/<?=$anu['foto_p'];?>" width="100" height="100" hspace="3" vspace="3" border="0" align="left" widhth="50" /></a></font></td>                                <td width="59%"><table width="93%" border="0" cellspacing="0" cellpadding="0">                                  <tr>                                    <td><span class="style27 style28">    </span></td>                                  </tr>                                  <tr>                                    <td><span class="style12">                                      <?=$anu['titulo'];?>                                    </span></td>                                  </tr>                                  <tr>                                    <td class="textocinzanormal"><?=$anu['descricao'];?></td>                                  </tr>                                  <tr>                                    <td><a href="imagens/img_propaganda/<?=$anu['foto_g'];?>" title="<?=$anu['titulo'];?>" class="style29" style="text-decoration: none" rel="lightbox">:: Veja a peça</a></td>                                  </tr>                                </table></td>                              </tr>                            </table>                              <p> </p></td>                          <? if($pg==1){$pg=0;echo "</tr>" ;}$pg++;$cont++;} ?></tr>                        </table>

o exemplo de como está é esse: http://www.jcocco.co.../propaganda.php

Alguem pode me ajudar?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq