Ir para o conteúdo
2100928

[Resolvido] Ciclos em menu PHP+SQL

Mensagens Recomendadas

2100928

Boas...

O código que tenho é o seguinte:

<div class="collapse navbar-collapse js-navbar-collapse js-navbar">
<ul class="nav navbar-nav">

	 <!-- MENU REPETE X QTD CATEGORIAS PAI -->
	 <?php do { ?>
<?php if($row_consulta_familias['idpai'] == 0){ //MOSTRA SE IDPAI == 0 ?>
			 <li class="dropdown mega-dropdown">
			 <a href="category.php" class="dropdown-toggle" data-toggle="dropdown">
 <?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?> <span class="fa fa-chevron-right pull-right"></span></a>



			 <ul class="dropdown-menu mega-dropdown-menu row dropmenu">

				 <!-- NOVIDADES DA CATEGORIA PAI -->
				 <li class="col-sm-3">
					 <ul>
						 <li class="dropdown-header padding0">NOVIDADES</li>						
						 <div id="myCarousel" class="carousel slide" data-ride="carousel">
							 <div class="carousel-inner">
							 <div class="item active">
								 <a href="#"><img src="http://placehold.it/254x150/ff0000/f5f5f5/&text=YES+OLS" class="img-responsive" alt="product 1"></a>
								 <h4><small>descritivo</small></h4>									
								 <button href="#" class="btn btn-block btnRosa" type="button">49,99 €</button> <button href="#" class="btn btn-block btnRosa" type="button"><span class="fa fa-heart"></span> Add to Wishlist</button>	
							 </div><!-- End Item -->
							 </div><!-- End Carousel Inner -->
						 </div><!-- /.carousel -->
						 <li class="divider"></li>
						 <li><a href="#"><span class="fa fa-plus"></span> Novidades</a></li>
					 </ul>
				 </li>

					 <!-- MENU REPETE X QTD CATEGORIAS FILHO -->
 <?php if($row_consulta_familias['idpai'] == $row_consulta_familias['id']){ //MOSTRA SE O IDPAI(acima) = IDPAI ?>
					 <li class="col-sm-3">
						 <ul>
							 <li class="dropdown-header padding0 rgbaRosa">
								 <?php echo $row_consulta_familias['id']; ?>
								 <a href="index.php?page=cat"><?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?></a>
							 </li>
							 <!-- MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
							 <li><a href="index.php?page=scat">SubCat1</a></li>
							 <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
							 <li class="divider"></li>
						 </ul>
					 </li>
					 <?php } ?>
 <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-->

			 </ul>
		 </li>
<?php } ?>
<?php } while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)); ?>
	 <!-- FIM MENU REPETE X QTD CATEGORIAS PAI -->
</ul>
</div><!-- /.nav-collapse -->
Estrutura SQL
CREATE TABLE `familia` (
`id` int(3) NOT NULL auto_increment,
`codigo` varchar(55) NOT NULL default '',
`idpai` int(3) NOT NULL default '0',
`texto` varchar(255) NOT NULL default '',
`ativo` int(1) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;
Explicação da lógica

Se a categoria tiver $row_consulta_familias['idpai'] = 0 é uma categoria e guarda o id em $row_consulta_familias['id']

Se a categoria tiver $row_consulta_familias['idpai'] = $row_consulta_familias['id'] é uma subcategoria (Filho)

A ligação á base de dados está a funcionar e com o código acima aparecem as categorias com o idpai=0

O problema é que ao fazer um ciclo que diz que o idpai=0... dentro dele não posso contradizer ao criar um ciclo que diz que o idpai=id (Visto este id ser diferente de zero)


André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

esse texto todo é alguma constatação ?

é o código, a compreensão do que esta mal e um pedido de ajuda.

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Está-te a faltar aí alguma lógica, se percebi o teu problema. Não queres carregar as sub-famílias para dentro das famílias respectivas?

Exemplo de algoritmo:

$listOfFamilias = array('id' => 1, 'texto' => 'Frutas',   'idpai'  => 0,
                       'id' => 2, 'texto' => 'Legumes',  'idpai'  => 0,
                       'id' => 3, 'texto' => 'Morangos', 'idpai'  => 1,
                       'id' => 4, 'texto' => 'Pêssegos', 'idpai'  => 1,
                       'id' => 5, 'texto' => 'Ananás',   'idpai'  => 1,
                       'id' => 6, 'texto' => 'Alface',   'idpai'  => 2,
                       'id' => 6, 'texto' => 'Cebolas',  'idpai'  => 2);

foreach($listOfFamilias as $familia)
{
  if($familia['idpai'] != 0)
     continue;

  echo 'Família pai: ' . $familia['texto'];

  foreach($listOfFamilias as $subfamilia)
  {
     if($subfamilia['idpai'] != $familia['id'])
        continue;

     echo 'Sub família: ' . $subfamilia['texto'] . '<br/>';
  }
}

Isto vai dar um output do género:

Família pai: Frutas
Sub família: Morangos
Sub família: Pêssegos
Sub família: Ananás

Família pai: Legumes
Sub família: Alface
Sub família: Cebolas

Editado por bioshock

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Está-te a faltar aí alguma lógica, se percebi o teu problema. Não queres carregar as sub-famílias para dentro das famílias respectivas?

Exemplo de algoritmo:

$listOfFamilias = array('id' => 1, 'texto' => 'Frutas',   'idpai'  => 0,
					'id' => 2, 'texto' => 'Legumes',  'idpai'  => 0,
					'id' => 3, 'texto' => 'Morangos', 'idpai'  => 1,
					'id' => 4, 'texto' => 'Pêssegos', 'idpai'  => 1,
					'id' => 5, 'texto' => 'Ananás',   'idpai'  => 1,
					'id' => 6, 'texto' => 'Alface',   'idpai'  => 2,
					'id' => 6, 'texto' => 'Cebolas',  'idpai'  => 2);

foreach($listOfFamilias as $familia)
{
  if($familia['idpai'] != 0)
  continue;

  echo 'Família pai: ' . $familia['texto'];

  foreach($listOfFamilias as $subfamilia)
  {
  if($subfamilia['idpai'] != $familia['id'])
	 continue;

  echo 'Sub família: ' . $subfamilia['texto'] . '<br/>';
  }
}

Isto vai dar um output do género:

Família pai: Frutas
Sub família: Morangos
Sub família: Pêssegos
Sub família: Ananás

Família pai: Legumes
Sub família: Alface
Sub família: Cebolas

Sim o que pretendo é exactamente isto para aplicar em um menu, as categorias e subcategorias estao em uma base de dados.

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Sim o que pretendo é exactamente isto para aplicar em um menu, as categorias e subcategorias estao em uma base de dados.

<div class="collapse navbar-collapse js-navbar-collapse js-navbar">
<?php do { ?>
 <!-- MENU REPETE X QTD CATEGORIAS PAI -->
 <ul class="nav navbar-nav">
	 <li class="dropdown mega-dropdown">
<a href="index.php?page=cat" class="dropdown-toggle" data-toggle="dropdown">
<?php echo $row_familias1['texto_'.($_REQUEST['lang'])]; ?> <span class="fa fa-chevron-right pull-right"></span></a>

		 <ul class="dropdown-menu mega-dropdown-menu row dropmenu">
			 <!-- NOVIDADES DA CATEGORIA PAI -->
 <li class="col-sm-3">
				 <ul>
					 <li class="dropdown-header padding0">NOVIDADES</li>						
					 <div id="myCarousel" class="carousel slide" data-ride="carousel">
						 <div class="carousel-inner">
						 <div class="item active">
							 <a href="#"><img src="http://placehold.it/254x150/ff0000/f5f5f5/&text=YES+OLS" class="img-responsive" alt="product 1"></a>
							 <h4><small>descritivo</small></h4>									
							 <button href="#" class="btn btn-block btnRosa" type="button">49,99 €</button> <button href="#" class="btn btn-block btnRosa" type="button"><span class="fa fa-heart"></span> Add to Wishlist</button>	
						 </div><!-- End Item -->
						 <div class="item">
							 <a href="#"><img src="http://placehold.it/254x150/00FF00/f5f5f5/&text=YES+OLS" class="img-responsive" alt="product 1"></a>
							 <h4><small>descritivo</small></h4>									
							 <button href="#" class="btn btn-block btnRosa" type="button">49,99 €</button> <button href="#" class="btn btn-block btnRosa" type="button"><span class="fa fa-heart"></span> Add to Wishlist</button>	
						 </div><!-- End Item -->
						 </div><!-- End Carousel Inner -->
					 </div><!-- /.carousel -->
					 <li class="divider"></li>
					 <li><a href="#"><span class="fa fa-plus"></span> Novidades</a></li>
				 </ul>
			 </li>

 <?php //Repete familias2 enquanto existirem e se o idpai.familia2 = id.familia1 ?>
			 <!-- MENU REPETE X QTD CATEGORIAS FILHO -->
			 <?php do { //Repete familias2 enquanto existirem e se o idpai.familia2 = id.familia1?>
 <?php if ($row_familias2['idpai'] == $row_familias1['id']) { // Show if recordset not empty ?>
				 <li class="col-sm-3">
					 <ul>
						 <li class="dropdown-header padding0 rgbaRosa">
							 <a href="index.php?page=cat"><?php echo $row_familias2['texto_'.($_REQUEST['lang'])]; ?></a>
						 </li>
						 <?php do { //Repete familias3 enquanto existirem e se o idpai.familia3 = id.familia2?>
							 <?php if ($row_familias3['idpai'] == $row_familias2['id']) { // Show if recordset not empty ?>
								 <!-- MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
								 <li><a href="index.php?page=scat"><?php echo $row_familias3['texto_'.($_REQUEST['lang'])]; ?></a></li>
								 <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
							 <?php } // Show if recordset not empty ?>
						 <?php } while ($row_familias3 = mysql_fetch_assoc($familias3)); ?>
						 <li class="divider"></li>
					 </ul>
				 </li>
				 <?php } // Show if recordset not empty ?>
 <?php } while ($row_familias2 = mysql_fetch_assoc($familias2)); ?>
			 <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-->
		 </ul>
</li>
</ul>
 <!-- FIM MENU REPETE X QTD CATEGORIAS PAI -->
 <?php } while ($row_familias1 = mysql_fetch_assoc($familias1));//repete familias1 enquanto existirem idpai=0?>
</div><!-- /.nav-collapse -->

Com este código aparece bem, no entanto só aparece o primeiro menu (com as subcategorias e subsub)

A 2ª categoria aparece, mas sem as subcategorias

exemplo.jpg

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Edit 1: Ok, já verifiquei que rectificaste, fizeste um quote e pensava que estavas a fazer quote do teu código original.

Editado por bioshock

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Continuo com o problema, na 1ª categoria tudo bem, como podem ver nas imagens do post acima.

No entanto a 2ª categoria aparece, mas sem as subcategorias associadas.

Provavelmente será um problema no ciclo... já tentei alterar mas não estou a conseguir chegar ao resultado desejado.

Também ja tentei com o for como indicado, mas os resultados foram ainda piores.

Assim o código mantém como mostrei no post anterior.


André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

este é o teu código:

<div class="collapse navbar-collapse js-navbar-collapse js-navbar">
   <ul class="nav navbar-nav">
       <!-- MENU REPETE X QTD CATEGORIAS PAI -->
<?php
   do {
       if($row_consulta_familias['idpai'] == 0)
       {
           //MOSTRA SE IDPAI == 0
?>
       <li class="dropdown mega-dropdown">
           <a href="category.php" class="dropdown-toggle" data-toggle="dropdown">
               <?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?>
               <span class="fa fa-chevron-right pull-right"></span>
           </a>
           <ul class="dropdown-menu mega-dropdown-menu row dropmenu">
               <!-- NOVIDADES DA CATEGORIA PAI -->
               <li class="col-sm-3">
                   <ul>
                       <li class="dropdown-header padding0">NOVIDADES</li>
                       <div id="myCarousel" class="carousel slide" data-ride="carousel">
                           <div class="carousel-inner">
                               <div class="item active">
                                   <a href="#"><img src="http://placehold.it/254x150/ff0000/f5f5f5/&text=YES+OLS" class="img-responsive" alt="product 1"></a>
                                   <h4><small>descritivo</small></h4>
                                   <button href="#" class="btn btn-block btnRosa" type="button">49,99 €</button>
                                   <button href="#" class="btn btn-block btnRosa" type="button"><span class="fa fa-heart"></span> Add to Wishlist</button>        
                               </div><!-- End Item -->
                           </div><!-- End Carousel Inner -->
                       </div><!-- /.carousel -->
                       <li class="divider"></li>
                       <li><a href="#"><span class="fa fa-plus"></span> Novidades</a></li>
                   </ul>
               </li>
               <!-- MENU REPETE X QTD CATEGORIAS FILHO -->
<?php
           if($row_consulta_familias['idpai'] == $row_consulta_familias['id'])
           {
               //MOSTRA SE O IDPAI(acima) = IDPAI
?>
               <li class="col-sm-3">
                   <ul>
                       <li class="dropdown-header padding0 rgbaRosa">
                           <?php echo $row_consulta_familias['id']; ?>
                           <a href="index.php?page=cat"><?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?></a>
                       </li>
                       <!-- MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
                       <li><a href="index.php?page=scat">SubCat1</a></li>
                       <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-FILHO -->
                       <li class="divider"></li>
                   </ul>
               </li>
<?php       } ?>
               <!-- FIM MENU REPETE X QTD CATEGORIAS FILHO-->
           </ul>
       </li>
<?php
       }
   } while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias));
?>
   <!-- FIM MENU REPETE X QTD CATEGORIAS PAI -->
   </ul>
</div><!-- /.nav-collapse -->

agora, uma coisa te digo, isso é impossivel fazer da forma como está apresentado:

- como pretendes listar as subcategorias sem um segundo query ?

ps : se pretendes apresentar tudo, dá para fazer sem um segundo query, mas o trabalho que isso dá é desnecessário

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Sim, eu tentei essa solução, alias tenho 2 querys... mas já dei voltas e voltas e não estou a conseguir chegar ao query correcto (Por desconhecimento, com certeza)

$query_familias1 = "SELECT * FROM familias1 WHERE idpai = 0 AND ativo = 1 ORDER BY ordem ASC"; //OK

$query_familias2 = "SELECT * FROM familias1 WHERE idpai = id(Da query anterior) ativo = 1 ORDER BY ordem ASC"; // O que pretendia era que selecionasse se o id pai fosse = ao id da consulta anterior


André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

a única coisa que necessitas é seguir esta lógica:

while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) {
 // apresenta a info do pai
 $query_familias2 = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." ativo = 1 ORDER BY ordem ASC";
 // executa a query
 while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)) {
   // apresenta as subfamilias
 }
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Tentei seguir a sua lógica...

mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_familias = "SELECT * FROM familias1 WHERE idpai = 0 AND ativo = 1 ORDER BY ordem ASC";
$consulta_familias = mysql_query($query_consulta_familias, $yes_connect) or die(mysql_error());
$row_consulta_familias = mysql_fetch_assoc($consulta_familias);
$totalRows_consulta_familias = mysql_num_rows($consulta_familias);

mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." AND ativo = 1 ORDER BY ordem ASC";
$consulta_subfamilias = mysql_query($query_consulta_subfamilias, $yes_connect) or die(mysql_error());
$row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias);
$totalRows_consulta_subfamilias = mysql_num_rows($consulta_subfamilias);

mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_subsubfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_subfamilias['id']." AND ativo = 1 ORDER BY ordem ASC";
$consulta_subsubfamilias = mysql_query($query_consulta_subsubfamilias, $yes_connect) or die(mysql_error());
$row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias);
$totalRows_consulta_subsubfamilias = mysql_num_rows($consulta_subsubfamilias);

<div class="collapse navbar-collapse js-navbar-collapse js-navbar">
   <?php while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) { // apresenta as categorias idpai = 0?>
 <ul class="nav navbar-nav">
	 <li class="dropdown mega-dropdown">
   <a href="index.php?page=cat" class="dropdown-toggle" data-toggle="dropdown">
   <?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?> <span class="fa fa-chevron-right pull-right"></span></a>
		    <ul class="dropdown-menu mega-dropdown-menu row dropmenu">
 <?php while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)) { // apresenta as subfamilias idpai = ".$row_consulta_familias['id']?>
				    <li class="col-sm-3">
					    <ul>
						    <li class="dropdown-header padding0 rgbaRosa">
							    <a href="index.php?page=cat"><?php echo $row_consulta_subfamilias['texto_'.($_REQUEST['lang'])]; ?></a>
						    </li>
						    <?php while ($row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias)) {// apresenta as subsubfamilias em que o idpai = ".$row_consulta_subfamilias['id']. ?>
	 <li><a href="#"><?php echo $row_consulta_subsubfamilias['texto_'.($_REQUEST['lang'])]; ?></a></li>
	 <li class="divider"></li>
    <?php }?>
						    <li class="divider"></li>
					    </ul>
				    </li>
 <?php } ?>
   </ul>
  </li>
 </ul>
<?php } ?>
   </div><!-- /.nav-collapse -->

Problemas:

1ª Categoria não aparece

2ª Categoria aparece, mas com as subcategorias e subsubcategorias da 1ª categoria

3ª categoria, parece mas sem qualquer subcategoria e subsubcategoria


André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Sim li, pode me ter falhado algo, mas tentei seguir á risca o teu código e adaptar á minha realidade...

Coloquei o código que mostra as categorias onde tens o comentário // apresenta a info do pai

Coloquei o código que mostra as subcategorias e subsubcategorias onde tens o comentário // apresenta as subfamilias

Inclusivé removi as query que já tinha criado e criei a consulta_categorias, consuta_subcategorias e consulta_subsubcategorias


André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

amostras o HTML onde disse para apresentar mas deste-te ao prazer de não fazer as queries onde disse para fazeres


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Está a referir-se a esta query?

$query_familias2 = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." ativo = 1 ORDER BY ordem ASC";

Alterei para:

<?php $query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." AND ativo = 1 ORDER BY ordem ASC"; ?>

Não altera nada a nivel visual

Coloquei antes do segundo ciclo while

Alguém me consegue dar uma ajuda... já fiz e refiz vezes sem conta seguindo a lógica que o colega disponibilizou, mas não estou a conseguir chegar ao resultado desejado.??

O meu código actualmente está assim:

<?php virtual('Connections/yes_connect.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
 if (PHP_VERSION < 6) {
   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 }
 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
 switch ($theType) {
   case "text":
  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  break;   
   case "long":
   case "int":
  $theValue = ($theValue != "") ? intval($theValue) : "NULL";
  break;
   case "double":
  $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
  break;
   case "date":
  $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
  break;
   case "defined":
  $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
  break;
 }
 return $theValue;
}
}
mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_familias = "SELECT * FROM familias1 WHERE idpai = 0 AND ativo = 1 ORDER BY ordem ASC";
$consulta_familias = mysql_query($query_consulta_familias, $yes_connect) or die(mysql_error());
$row_consulta_familias = mysql_fetch_assoc($consulta_familias);
$totalRows_consulta_familias = mysql_num_rows($consulta_familias);
mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." AND ativo = 1 ORDER BY ordem ASC";
$consulta_subfamilias = mysql_query($query_consulta_subfamilias, $yes_connect) or die(mysql_error());
$row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias);
$totalRows_consulta_subfamilias = mysql_num_rows($consulta_subfamilias);
mysql_select_db($database_yes_connect, $yes_connect);
$query_consulta_subsubfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_subfamilias['id']." AND ativo = 1 ORDER BY ordem ASC";
$consulta_subsubfamilias = mysql_query($query_consulta_subsubfamilias, $yes_connect) or die(mysql_error());
$row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias);
$totalRows_consulta_subsubfamilias = mysql_num_rows($consulta_subsubfamilias);
if (isset($_GET['lang'])) {
 $_REQUEST['lang'] = $_GET['lang'];
} elseif (isset($_POST['lang'])) {
 $_REQUEST['lang'] = $_POST['lang'];
}
if (!isset($_REQUEST['lang']) || empty($_REQUEST['lang'])) {
$_REQUEST['lang'] = $lang['language'];
}
?>
<script>
$(document).ready( function() {
   $('#myCarousel').carousel({
 interval:   2000
});

var clickEvent = false;
$('#myCarousel').on('click', '.nav a', function() {
  clickEvent = true;
  $('.nav li').removeClass('active');
  $(this).parent().addClass('active'); 
}).on('slid.bs.carousel', function(e) {
 if(!clickEvent) {
  var count = $('.nav').children().length -1;
  var current = $('.nav li.active');
  current.removeClass('active').next().addClass('active');
  var id = parseInt(current.data('slide-to'));
  if(count == id) {
   $('.nav li').first().addClass('active');
  }
 }
 clickEvent = false;
});
});
</script>
<div class="row clearfix conteudos">
<div class="col-md-3 col-offset-9 column margens0" style="position:absolute; z-index:99; margin-top: 0px;">
<div style=" background-color:rgba(201,31,140,1.00); border:1px rgba(255,255,255,1.00); border-right:1px rgba(255,255,255,1.00); width:100%; height:10px; text-align:right; margin-top:0px; margin-left:1px;"><img src="img/menutop.png"></div>
<nav class="navbar navbar-default">
   <div class="navbar-header">
 <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".js-navbar-collapse">
  <span class="sr-only">Toggle navigation</span>
  <span class="icon-bar"></span>
  <span class="icon-bar"></span>
  <span class="icon-bar"></span>
 </button>
</div>

<div class="collapse navbar-collapse js-navbar-collapse js-navbar">
   <?php while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) { // apresenta as categorias idpai = 0?>
 <ul class="nav navbar-nav">
	 <li class="dropdown mega-dropdown">		   
   <a href="includes/category.php?cat=<?php echo $row_consulta_familias['id'] ?>" class="dropdown-toggle" data-toggle="dropdown">
   <?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?> <span class="fa fa-chevron-right pull-right"></span></a>
		    <ul class="dropdown-menu mega-dropdown-menu row dropmenu">
		    <?php $query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." AND ativo = 1 ORDER BY ordem ASC"; ?>
 <?php while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)) { // apresenta as subfamilias idpai = ".$row_consulta_familias['id']?>
				    <li class="col-sm-3">
					    <ul>
						    <li class="dropdown-header padding0 rgbaRosa">
							    <a href="index.php?cat=<?php echo $row_consulta_familias['id'] ?>&cat=<?php echo $row_consulta_subfamilias['id'] ?>"><?php echo $row_consulta_subfamilias['texto_'.($_REQUEST['lang'])]; ?></a>
						    </li>
						    <?php while ($row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias)) {// apresenta as subsubfamilias em que o idpai = ".$row_consulta_subfamilias['id']. ?>
	 <li><a href="index.php?cat=<?php echo $row_consulta_familias['id'] ?>&cat=<?php echo $row_consulta_subfamilias['id'] ?>&cat=<?php echo $row_consulta_subsubfamilias['id'] ?>"><?php echo $row_consulta_subsubfamilias['texto_'.($_REQUEST['lang'])]; ?></a></li>
	 <li class="divider"></li>
    <?php }?>
						    <li class="divider"></li>
					    </ul>
				    </li>
 <?php } ?>
   </ul>
  </li>
 </ul>
<?php } ?>
   </div><!-- /.nav-collapse -->
</nav>
</div>
</div>
<?php
mysql_free_result($consulta_familias);
mysql_free_result($consulta_subfamilias);
mysql_free_result($consulta_subsubfamilias);
?>

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Consegues criar um JSfiddle com a estrutura do teu layout (apenas o menu) que desejas e respectivos níveis?

Será mais fácil criar lá um exemplo em Javascript e depois só tens de convertê-lo em PHP.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Consegues criar um JSfiddle com a estrutura do teu layout (apenas o menu) que desejas e respectivos níveis?

Será mais fácil criar lá um exemplo em Javascript e depois só tens de convertê-lo em PHP.

Não estou a conseguir... https://jsfiddle.net/qerkch2w/

A ideia é um menu no estilo do da amazon.com

Botão Categorias

- Categoria 1 ------ Sub 1 [subsub1, subsub2 ] , Sub 2 [subsub1, subsub2], |(..)

- Categoria 2

- (...)

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Não está fácil de acertar com isto... mas não quero desistir... mais do que haver outras soluções, gostava realmente de compreender e aprender a estruturar este menu

Já postei montes de vezes, mas neste momento o código está assim...

<div class="collapse navbar-collapse js-navbar-collapse">
 <ul class="nav navbar-nav">
	 <li class="dropdown dropdown-large">
		 <a href="#" tabindex="-1" class="dropdown-toggle" data-toggle="dropdown">CATEGORIAS <b class="caret"></b></a>
		 <ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu" style="margin-top:-5px;">
			 <?php $query_consulta_familias = "SELECT * FROM familias1 WHERE idpai = 0 AND ativo = 1 ORDER BY ordem ASC";?>
			 <?php while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) {?>
			 <li class="dropdown-submenu">
				 <a tabindex="-1" href="includes/category.php?cat=<?php echo $row_consulta_familias['id'] ?>"><?php echo $row_consulta_familias['texto_'.($_REQUEST['lang'])]; ?> <span class="fa fa-chevron-right pull-right"></span></a>
				 <ul class="dropdown-menu mega-dropdown-menu row dropmenu">
					 <li class="col-sm-3">
						 <ul>
							 <li class="dropdown-header">New in Stores</li>						
							 <div id="myCarousel" class="carousel slide" data-ride="carousel">
								 <div class="carousel-inner">
								 <div class="item active">
									 <a href="#"><img src="http://placehold.it/254x150/3498db/f5f5f5/&text=New+Collection" class="img-responsive" alt="product 1"/></a>
									 <h4><small>Summer dress floral prints</small></h4>									
									 <button class="btn btn-primary" type="button">49,99 €</button> <button href="#" class="btn btn-default" type="button"><span class="glyphicon glyphicon-heart"></span> Add to Wishlist</button>	
								 </div><!-- End Item -->
								 <div class="item">
									 <a href="#"><img src="http://placehold.it/254x150/ef5e55/f5f5f5/&text=New+Collection" class="img-responsive" alt="product 2"/></a>
									 <h4><small>Gold sandals with shiny touch</small></h4>									
									 <button class="btn btn-primary" type="button">9,99 €</button> <button href="#" class="btn btn-default" type="button"><span class="glyphicon glyphicon-heart"></span> Add to Wishlist</button>	
								 </div><!-- End Item -->
								 <div class="item">
									 <a href="#"><img src="http://placehold.it/254x150/2ecc71/f5f5f5/&text=New+Collection" class="img-responsive" alt="product 3"/></a>
									 <h4><small>Denin jacket stamped</small></h4>									
									 <button class="btn btn-primary" type="button">49,99 €</button> <button href="#" class="btn btn-default" type="button"><span class="glyphicon glyphicon-heart"></span> Add to Wishlist</button>	
								 </div><!-- End Item -->							
								 </div><!-- End Carousel Inner -->
							 </div><!-- /.carousel -->
							 <li class="divider"></li>
							 <li><a href="?page=<?php echo $row_consulta_familias['id'] ?>">Ver tudo</a></li>
						 </ul>
					 </li>
					 <li class="col-sm-3">
						 <ul>
							 <?php $query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." ativo = 1 ORDER BY ordem ASC";?>
							 <?php do { ?>
							 <li class="dropdown-header padding0 rgbaRosa">
								 <a href="?cat=<?php echo $row_consulta_familias['id'] ?>&cat=<?php echo $row_consulta_subfamilias['id'] ?>"><?php echo $row_consulta_subfamilias['texto_'.($_REQUEST['lang'])]; ?></a>
							 </li>
	 <?php $query_consulta_subsubfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_subfamilias['id']." ativo = 1 ORDER BY ordem ASC";?>
								 <?php do { ?>
								 <li><a href="?cat=<?php echo $row_consulta_familias['id'] ?>&cat=<?php echo $row_consulta_subfamilias['id'] ?>&cat=<?php echo $row_consulta_subsubfamilias['id'] ?>"><?php echo $row_consulta_subsubfamilias['texto_'.($_REQUEST['lang'])]; ?></a></li>
								 <?php } while ($row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias)); ?>
							 <li class="divider"></li>
							 <?php } while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)); ?>
						 </ul>
					 </li>
				 </ul>
			 </li>
			 <?php } ?>
		 </ul>
	 </li>
 </ul>
</div>

A lógica sem o HTML

<?php $query_consulta_familias = "SELECT * FROM familias1 WHERE idpai = 0 AND ativo = 1 ORDER BY ordem ASC";?>
// Consulta as familias em que o idpai é zero que são as categorias
<?php while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) {?> // Enquanto houver categorias mostra
	 <?php $query_consulta_subfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." ativo = 1 ORDER BY ordem ASC";?>
	 // Consulta as familias em que o idpai é igual ao ID das familias anteriores que são as subcategorias
	 <?php do { ?>
	 //Enquanto houver subcategorias mostra
					 <?php $query_consulta_subsubfamilias = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_subfamilias['id']." ativo = 1 ORDER BY ordem ASC";?>
					 // Consulta as familias em que o idpai é igual ao ID das subfamilias anteriores que são as subsubcategorias
					 <?php do { ?>
					 //Enquanto houver subsubcategorias mostra
					 <?php } while ($row_consulta_subsubfamilias = mysql_fetch_assoc($consulta_subsubfamilias)); ?>
	 <?php } while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)); ?>
<?php } ?>

O que estou a fazer mal?? Já fiz e refiz de tanta maneiras... :(

Editado por apocsantos
geshi

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Se efectuar todas as consultas antes do HTML, a 1ª categoria fica 5***** mas na 2ª e restantes não aparecem nem subcategorias, nem subsubcategorias

Editado por 2100928

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
2100928

Agora sim tópico resolvido...

O meu obrigado a todos, com uma grande especial para o HappyHippyHippo... como ele tinha dito anteriormente e me demonstrou... a solução é:

while ($row_consulta_familias = mysql_fetch_assoc($consulta_familias)) {
// apresenta a info do pai
$query_familias2 = "SELECT * FROM familias1 WHERE idpai = ".$row_consulta_familias['id']." ativo = 1 ORDER BY ordem ASC";
// executa a query
while ($row_consulta_subfamilias = mysql_fetch_assoc($consulta_subfamilias)) {
// apresenta as subfamilias
}
}

Editado por apocsantos
geshi

André Almeida

Programação Web

Design de Comunicação

Web Marketing

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.