Visualizzazione risultati 1 fino 4 di 4

Discussione: Creare lista con sotto-liste da database

  1. #1
    Guest

    Predefinito Creare lista con sotto-liste da database

    Sono due giorni che ci sbatto la testa ma non riesco a risolvere questo problema...

    Devo creare un menu con i sotto menu prendendo i dati da una tabella sql...

    id nome link genitore
    0 link1 /pagine/link1 -1
    1 link2 /pincopallo/asd/link2 -1
    2 link21 /pincopallo/sottolinks1 1
    3 link211 /blablabla 1

    l'id genitore indica a quale voce del menu superiore appartiene l'elemento, se è "-1" deve essere nel menu principale (o è meglio usare null?)

    io recupero i dati dalla tabella, ma poi non so come trasformarli in un'elenco...

    Dovrebbe venire qualcosa così:

    Codice HTML:
    <ul>
      <li><a href="/pagine/link1">link1</a></li>
      <li><a href="/pincopallo/asd/link2">link2</a>
        <ul>
          <li><a href="/pincopallo/sottolinks1">link21</a></li>
          <li><a href="/blablabla">link211</a></li>
        </ul>
      </li>
    </ul>
    E dovrebbe funzionare anche se ci fossero 3, 4, 5, 6... livelli...
    Ultima modifica di tampertools : 11-02-2014 alle ore 18.48.50

  2. #2
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Esegui una query che seleziona tutte le righe con genitore = '-1'.
    Ogni riga controlli se ci sono altre righe con genitore = id: in caso affermativo ti basta eseguire la stessa query.

    Qualcosa del genere:
    Codice PHP:
    <?
    echo '<ul>';
    $query = mysql_query('SELECT * FROM table WHERE genitore = \'-1\'');
    while(
    $riga = mysql_fetch_array($query)){
    $id = $riga['id'];
    $nome = $riga['nome'];
    $link = $riga['link'];
    echo
    "<li><a href='$link'>$nome</a></li>";
    $query2 = mysql_query("SELECT * FROM table WHERE genitore = '$id'");
    if(
    mysql_num_rows($query2) > 0){
    echo
    '<ul>';
    while(
    $riga2 = mysql_fetch_array($query2)){
    $nome2 = $riga2['nome'];
    $link2 = $riga2['link'];
    echo
    "<li><a href='$link2'>$nome2</a></li>";
    }
    echo
    '</ul>';
    }
    }
    echo
    '</ul>';
    ?>
    Per renderlo infinito potresti utilizzare una funzione o semplicemente implementare meglio il while.

    Ciao!

  3. #3
    Guest

    Predefinito

    Grazie :D

    Il mio errore era di pensare "meno query faccio, meglio è", sbagliavo


    Ecco il codice adattato per poter andare all'infinito:
    (Nel caso a qualcuno servisse )
    Codice PHP:
    function crea_menu($genitore) {
    $sql = "SELECT * FROM pagine WHERE genitore = '" . $genitore . "' ORDER BY id ASC";
    $risultato = mysql_query($sql);
    $html = "";
    if (
    mysql_num_rows($risultato) > 0) {
    $html .= "<ul>";
    while (
    $link = mysql_fetch_row($risultato)) {
    $html .= "<li><a href=\"" . $link[2] . "\">" . $link[1] . "</a>";
    $html .= crea_menu($link[0]);
    $html .= "</li>";
    }
    $html .= "</ul>";
    }
    return
    $html;
    Ultima modifica di tampertools : 11-02-2014 alle ore 22.16.03

  4. #4
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Citazione Originalmente inviato da tampertools Visualizza messaggio
    Il mio errore era di pensare "meno query faccio, meglio è", sbagliavo
    Non sbagli affatto, ma in questa circostanza secondo le mie conoscenze questa è la via più semplice

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •