Ir para conteúdo

POWERED BY:

Arquivado

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

Menegat

[Resolvido] MOstrar lista de Categorias com subcategorias

Recommended Posts

Ola pessoal, pesquisei bastante no forum sobre meu problemas e so achei uam solução para a consulta ao banco, e não para o que eu preciso, que seria

a hora que eu mostro os dados na tela.

Bom ai vai:

eu tenho duas tabelas uma:

-> categorias

--->campos

-----> Id (id da categoria)

-----> categoria_nome (nome da categoria)

 

e

-> subcat

--->campos

-----> IdS (id da sub categoria)

-----> IdC (id da categoria)

-----> subcat_nome (nome da subcat)

 

bom, minha consulta é a seguinte:

$sql = mysql_query("select * from categorias order by categorias_nome asc");
$sql5 = mysql_query("select * from subcat ");

e a parte do codigo reposnsavel a mostrar isso ao usuario é essa:

<table width="100%"  border="0" cellpadding="0" cellspacing="0">
                        <?php 
						  if(mysql_num_rows($sql) > 0){ 
                          while($row1 = mysql_fetch_array($sql)){
						 ?>
                        <tr>
                          <td width="1%"><img src="ff.gif" width="4" height="7"></td>
                          <td colspan="3"><a href="produtos.php?categorias_id=<?php echo $row1["Id"]; ?>"class="fonte_data"><strong><?php echo $row1["categorias_nome"]; ?></strong></a></td>
                        </tr>
						<?php 
						  if (mysql_num_rows($sql5) > 0){ 
                          while($row5 = mysql_fetch_array($sql5) and $row5["Id"] = $row5["IdC"]){
						 ?>
                        <tr>
                          <td width="3%" align="right"><img src="ff.gif" width="4" height="7"></td>
                          <td width="95%" ><a href="produtos.php?subcat_id=<?php echo $row5["IdS"]; ?>"class="fonte_data"><strong><?php echo $row5["subcat_nome"]; ?></strong></a></td>
                        </tr>
						<?php    } //while
                       		    } //if 
                             } 
                           } else { ?>
                        <tr>
                          <td colspan="4" class="fonte_data"><b><?php echo "Nenhuma Categoria Cadastrada."; ?></b></td>
                        </tr>
                        <?php } //else ?>
                      </table>

Mas ele mostra primeiro todas as subcategorias e dopois todas as categorias, ao invez de uma categoria e suas respectivas subcategorias

e assim por diante.....

 

alguem sabe onde esta o erro e como posso consertar isso, pois tenho muita experiencia com php/sql;

 

 

Desde ja agradeço as dicas e apoios..

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma coisa desse tipo:


$sql = "SELECT categorias.Id, categoria_nome, IdC, subcat_nome

FROM categorias

INNER JOIN subcat

ON categorias.Id = subcat.IdC ";

$query = mysql_query( $sql );

$li = '<ul>';

while $dados = mysql_fetch_assoc( $query ) )

{

if( $dados['categoria_nome']!=$categoria_nome )

{

if( !empty( $categoria_nome ) )

$li .= '</ul></li>';

 

$categoria_nome = $dados['categoria_nome'];

$li .= '<li><h6>'.$dados['categoria_nome'].'</h6><ul>'."\n";

}

$li .= '<li>'.$dados['subcat_nome'].'</li>'."\n";

}

$li .= '</ul>'."\n".'</li></ul>';

 

echo $li;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, vlw ai bruno ele funciono direitinho, aparecendo categorias e subcategorias,

mas ele não aparece as categorias que não tenham uma subcategoria.

 

Não sei se fui claro, mas assim

do jeito que voce me passou funcionou mas mostra somente as categorias que tenham subcategorias

e as respectivas subcategorias.

 

Para mudar isso eu fação um outro teste logo a baixo ou so mudo os teste na sql?

 

 

E so corrigindo o Primeito post, eu quis dizer que não tenho experiencia com php, ao contrario do que escrevi,

a falta de uma palavra muda tudo. xD

 

agradeço..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para exibir as categorias que não tem categorias, troque o INNER JOIN por LEFT OUTER JOIN.

 

Outra forma de fazer isto é utilizar somente uma tabela, relacionando recursivamente à mesma.

 

link

 

E tem também uma classe do João Batista que faz isto.

http://forum.imasters.com.br/index.php?/topic/378975-menu-em-php-com-mysql/page__view__findpost__p__1469159

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

Funcionou tudo certinho......

 

agradeço a ajuda de voces, algo tão simples eu compiqui na hora de fazer....

 

mas a falta de pratica e conhecimento imfluenciam, mas agradeço novmente..

 

 

So gostaria de tirar mais uam ultima duvida...

 

se eu usar os isso em uma table eu posso?

sem alterar o funcionamento a operação??

 

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, pode.. mas falando em HTML.. faz sentido usar table? é semântico ?

 

me pareceu uma listagem de itens, por isso fiz com a tag HTML de lista.. <ul>, <li>.. talvez até um <ol> ficasse mais semântico ai no caso. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

POde ate ser, mas como vou usar links para as categorias e subcategorias não sei como ira aparecer depois, pois ainda n tive tempo de testas....

 

 

e no lugar das imagens do <li> eu usaria uma outra umagem de uma seta...

 

vlw a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai é CSS puro cara..

faz um:

#cat {
list-style: none; }//retira os marcadores default da lista
..
   $query = mysql_query( $sql );
$li = '<ul id="cat">';
e aplica um background da imagem que você quer..

 

ul#cat li {
   background: url('seta.jpg') no-repeat left center;
   padding-left: 20px; /* aqui você coloca o valor da largura da imagem */
}
alguma dúvida ? qual ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK, so mais uma coisa,

 

do jeito que esta ele esta colocando um marcador pra cada categoriga, mesmo ela não tento uma subcategoria,

teria como tirar isso?

para aparecer os marcadores so qndo à presença de uma subcategoria??

 

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai é CSS puro cara..

faz um:

#cat {
list-style: none; }//retira os marcadores default da lista
..
   $query = mysql_query( $sql );
$li = '<ul id="cat">';
e aplica um background da imagem que você quer..

 

ul#cat li {
   background: url('seta.jpg') no-repeat left center;
   padding-left: 20px; /* aqui você coloca o valor da largura da imagem */
}
alguma dúvida ? qual ?

 

Eu queria ver como uso a pocao <a> no codigo para linkar com os produtos respctivoas as subcategorias

 

estou fazendo assim

$li .= '<li><a href="produtos.php?subcat_id='.$dados['IdS']. '" >'.$dados['subcat_nome'].'</a></li>'."\n";

mas n esta voltando o valor do IdS.......estou fazendo certo??

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim? oque você tá mandando é um:

$_GET['subcat_id']

 

Qnto à tua dúvida de CSS eu não entendi bem.. as categorias tem marcadores? ou só as subs?

 

Se você quer retirar os marcadores das categorias sem subs, você terá que fazer um count nos registros de subs de cada categoria, e se for igual à zero, você coloca uma classe CSS especial, para retirar o marcador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, a duvida em questão das css eu consegui resolver...

 

mas agora a duvida eh a seguinte......

o nome da subcategoria sera um link, assim como os das categorias, pra quando for cliacadas apbrir uma pagina com os produtos referentes.

 

/*eu tententi implementar o link dessa forma*/
$li .= '<li><a href="produtos.php?subcat_id='.$dados['IdS'].'" >'.$dados['subcat_nome'].'</a></li>'."\n";

assim, ele passa o por paremetro o id da subcategoria pra quando chegar na pagina produtos

ele saber quais produtos mostrar em referencia ao Id.....

 

da forma que eu coloquei acima, ele envia os parametros para a pagina produtos, mas o parametro subcat_id vai sem valor para poder consultar.....

 

 

n sei se me entedenram??

Compartilhar este post


Link para o post
Compartilhar em outros sites

você lembrou de selecionar esse campo lá no SELECT??

$sql = "SELECT categorias.Id, categoria_nome, IdC, subcat_nome, IdS  
      FROM categorias 
      INNER JOIN subcat 
      ON categorias.Id = subcat.IdC ";
?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, eu esta selecionado o campo errado na query....

 

agora esta funcionado tudo,....

 

 

vlw a ajuda de todos....

 

e mais uma vez agradeço pelo imasters existir...

 

BrigadooOO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom o script...testei aqui, só não entendi mto bem

alguém poderia me explicar como faço para usá-lo com tabelas? não estou conseguindo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse código

 

Faça uma coisa desse tipo:

   $sql = "SELECT categorias.Id, categoria_nome, IdC, subcat_nome 
      FROM categorias 
      INNER JOIN subcat 
      ON categorias.Id = subcat.IdC ";
   $query = mysql_query( $sql );
$li = '<ul>';
while $dados = mysql_fetch_assoc( $query ) )
{
	if( $dados['categoria_nome']!=$categoria_nome )
	{
		if( !empty( $categoria_nome ) )
			$li .= '</ul></li>';	

		$categoria_nome = $dados['categoria_nome'];	
		$li .= '<li><h6>'.$dados['categoria_nome'].'</h6><ul>'."\n";
	}
   $li .= '<li>'.$dados['subcat_nome'].'</li>'."\n";
}
$li .= '</ul>'."\n".'</li></ul>';

echo $li;

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.