ciclo di un menu a cascata in una tabella

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Sera a tutti,

è incredibile che ogni volta che devo intabellare dei dati devo eprderci ore ed ore.

Praticamente ora la cosa mis embra più complessa e non ne vengo fuori quindi chiedo il vostro aiuto.

la faccio molto semplice

ho una tabella mysql cosi composta

id|Nome Nazione
id|pippo|italia
id|topolino|germania
id|pluto|spagna
id|minni|italia

ora devo creare un menu a tendina <ul><li>

dove la prima intestazione deve essere il distinct delle nazoni

e per ogni nazione deve listarmi i nomi.

non conosco a priori le nazioni però deve intabellarle per 5 colonne .

quindi na cosa del tipo

PHP:
<ul>
<li><?php $nazione;?>
<ul>
<li><a href miosito.com/index.php?$id><?php $nome>;?></a></li>
</ul>
</li>
</ul>

in pratica se dal distinct mi escono 6 nazioni deve metterne 4 nella prima riga e 2 nella successiva e cosi via.

Ed in ogni nazione deve inserirmi i nomi in quelle nazioni ed il link deve avere l'id del nome.

Le ho provate di tutte ma non ne vengo fuori.

Cortesemente risucite ad aiutarmi?
 
ok son riuscito eprlomeno a creare le colonne

PHP:
<?php 
foreach($nat as $n){ ///contiene le nazioni distinte
?>
<td>
<div id="menu" style="padding:20px;">
		<ul>
			<li><a href="#"><img src="http://<?php echo$url;?>/naz/<?php echo substr($n,0,2);?>.gif" align="absmiddle">   <?php echo $n;?></a>
	<ul>
	<?php
	for($x=0;$x<=count($multi);$x++){
	if($n==$multi[$x]['nat']){//$multi è un multi array che contiene tutti i dati
	?>
	<li><a href="http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'];?>"><?php echo $multi[$x]['nome'];?><!--Home--></a>
	</li>
	<?php
	}
	}
	?>
	</ul>	
			</li>
</ul>
</div>
</td>
<?php
}
?>

ora ad esempio ho 4 nazioni e me le incolonna per 4

però mi resta il problema di creare le righe.

quindi se voglio due righe con due colonne nisba.

ho provato a inserire il tr ma mi son perso
 
Ciao, non è stato tanto semplice,
ho simulato con un array i risultati della query, prova questo
PHP:
<?php

$rows = array(
    0 => array(
        "nazione" => "Italia",
        "nome" => "Pippo"
    ),
    1 => array(
        "nazione" => "Italia",
        "nome" => "Giacomo"
    ),
    2 => array(
        "nazione" => "Italia",
        "nome" => "Paolo"
    ),
    3 => array(
        "nazione" => "Brasile",
        "nome" => "Agostinho"
    ),
    4 => array(
        "nazione" => "Brasile",
        "nome" => "Ademar"
    ),
    5 => array(
        "nazione" => "Francia",
        "nome" => "Catherine"
    )
);

$nazione = "";
echo "<ul>";
foreach ($rows as $row) {
    if ($row['nazione'] != $nazione) {
        if ($nazione != "") {
            echo "</ul>";
            echo "</li>";
        }
        $nazione = $row['nazione'];
        echo "<li>" . $row['nazione'];
        echo "<ul>";
        echo "<li>" . $row['nome'] . "</li>";
    } else {
        echo "<li>" . $row['nome'] . "</li>";
    }
}
echo "</ul>";
echo "</li>";
echo "</ul>";
?>
i risultati della query dovranno essere ordinati per nazione
 
Ultima modifica:
sai che mi rivolgo qua solo sulle cose difficili :evil: lameno difficili per me :)

Praticamente questo lo avevo raggiunto anche se devo ammettere che ero molto arrangiato. il tuo codice oltre che pulitissimo è anche più snello. L'ho appena provato e funge perfettamente e mi tengo su questo.

sei un grande ciri.

Però mi resta il dilemma su come impostare colonne e righe.

ad esempio se ho 10 nazioni voglio 4 menu_nazioni per riga. quindi 2 righe da 4 ed una da due.

le colonne riesco a inserirle
 
questo è più semplice : ti basta assegnare ad ogni ul il css giusto.
float:left e clear:both sono le proprietà che dovrai gestire nel ciclo
 
e ma io non conosco a priori le nazioni. possono essere 10 ma nel tempo 100.

Inviato con Tapatalk
 
prova cosi
PHP:
<style>
    ul.int {
        float: left;
        border: 1px solid black;
    }
</style>
<?php
$nazione = "";
$i = 0;
echo "<ul class='int'>";
foreach ($rows as $row) {
    if ($row['nazione'] != $nazione) {
        if ($nazione != "") {
            $i++;
            echo "</ul>";
            echo "</li>";
            if ($i % 4 == 0) {
                echo "</ul>";
                echo "<ul class='int'>";
            }
        }
        $nazione = $row['nazione'];
        echo "<li>" . $row['nazione'];
        echo "<ul>\n";
        echo "<li>" . $row['nome'] . "</li>";
    } else {
        echo "<li>" . $row['nome'] . "</li>";
    }
}
echo "</ul>";
echo "</li>";
echo "</ul>";
ogni 4 liste crea un nuovo blocco
 
niente si mettono sempre uno sotto l'altro. invece se ho 6 nazioni dovrebbe mettere 4 nella prima riga e due nella seconda riga quindic redo che bisgona mettere il div sotto un table
 
con questo codice
PHP:
if ($i % 4 == 0) {
                echo "</ul>";
                echo "<ul class='int'>";
            }
ogni 4 liste si crea un nuovo <ul> e grazie alla prorietà float dei css si allinea a sinistra dell'altro
se vuoi fare 2 righe basta che cambi il 4 con il 2
 

Discussioni simili