Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732

    creare una lista con struttura ad albero

    è una domanda scema ma proprio non riesco a venirne a capo :master:

    ho un array costruito in modo simile a questo:

    (livello) (nome elemento)
    quindi
    1 paolo
    2 nicola
    2 alessia
    3 francesco
    2 gianfranco
    3 carmelo
    4 ermenegilda

    dovrei riuscire a rappresentare una struttura tipo

    codice:
    paolo
        nicola
        alessia
            francesco
        gianfranco
            carmelo
                ermenegilda
    il tutto con degli ul, naturalmente...

    io ho fatto questo:
    Codice PHP:
    <?php
    $id 
    1;
    $rows $this->requestAction('/items/getmenuitems_ns/'$id);

    $livello = -1;
    $visible_path null;
    $livello_vis null;

        foreach (
    $rows as $row) {
            
    $livello_str null;
               if (
    $livello $row['livello']) {
                 
    $livello_str "\n<ul>[*]";
                 
    $livello_vis .= $row['visible'];
            }
            elseif (
    $livello $row['livello']) {
                while (
    $livello >= $row['livello']) // scendo i livelli della lista fino a chiuderla
                
    {
                    
    $livello_str .= "\n[/list]";
                    
    $livello $livello 1;
                    
    $livello_vis substr($livello_vis0, -2);
                }
                
    $livello_str .= "[*]";
                
    $livello_vis .= $row['visible'];
            }
            elseif (
    $livello == $row['livello'] and $livello != 0) {
                
    $livello_str "\n[*]";
                
    $livello_vis substr($livello_vis0, -1);
                
    $livello_vis .= $row['visible'];
            }
            if (!
    preg_match("/0/"$livello_vis)) {
                echo 
    $livello_str;
                echo 
    $livello;
                echo 
    $html->link($row['nome'], "/items/view/".$row['id']);
            }
            
    $livello $row['livello']; // imposto il vecchio livello per sapere come devo salire o scendere nell'albero
        
    }
        echo 
    "";

        while (
    $livello > -1) { // scendo i livelli della lista fino a chiuderla
             
    echo "[/list]\n";
             
    $livello $livello 1;
        }
    echo 
    "[/list]";
    ?>
    in parte funziona, ma non mi restituisce un codice html valido... dove sbaglio? :master:


    edit: dimenticavo...
    alcuni nodi possono essere invisibili, quindi non devono essere visualizzati e anche il ramo che parte da loro deve essere nascosto per fare questo ho costruito una semplice variabile $livello_vis, a cui aggiungo 1 se il livello è visibile e 0 se non lo è

  2. #2
    Prova una cosa cosi:

    Codice PHP:
    <?php
    $tree 
    = array(array('livello' => 1'nome' => 'paolo''livello_vis' => 0),
                  array(
    'livello' => 2'nome' => 'nicola''livello_vis' => 0),
                  array(
    'livello' => 2'nome' => 'alessia''livello_vis' => 1),
                  array(
    'livello' => 3'nome' => 'francesco''livello_vis' => 2),
                  array(
    'livello' => 2'nome' => 'gianfranco''livello_vis' => 0),
                  array(
    'livello' => 3'nome' => 'carmelo''livello_vis' => 0),
                  array(
    'livello' => 4'nome' => 'ermenegilda''livello_vis' => 0));

    echo(
    '<ul>');

    $previous_level 1;
    foreach (
    $tree as $row) {
        if (
    $row['livello_vis'] > 0) {
            continue;
        }
        if (
    $row['livello'] == $previous_level) {
            echo(
    "[*]{$row['nome']}");
        } elseif (
    $row['livello'] > $previous_level) {
            echo(
    "[*]<ul>");
            echo(
    "[*]{$row['nome']}");
        } elseif (
    $row['livello'] < $previous_level) {
            
    $count $previous_level $row['livello'];
            echo(
    str_repeat("[/list]"$count));
            echo(
    "[*]{$row['nome']}");
        }
        
    $previous_level $row['livello'];
    }
    $count $previous_level 1;
    echo(
    str_repeat("[/list]"$count));

    echo(
    '[/list]');
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.