• User Attivo

    Problema con funzione ricorsiva - dati a struttura gerarchica

    Ciao a tutti 😄
    sarà capitato anche a voi di dover creare un sistema di dati dinamici a struttura gerarchica.
    Ho letto qui che ci sono 2 metodi e, dopo aver letto il tutorial, non contento ho deciso di utilizzarli entrambi per soddisfare la mia esigenza.

    ora sono alle prese con una funzione ricorsiva che crea il menu di sinistra del sito. l'obiettivo è:

    quando clicco su una voce o sottovoce, mi si aprono gli elenchi di tutti i "genitori".

    come mai secondo voi la ricorsione avviene una sola volta?

    [PHP]<?php

    function get_range(){
    $result = mysql_query('SELECT lft,rgt FROM articoli WHERE id_articolo="'.$_GET[id_articolo].'"');
    while($row = mysql_fetch_array($result)){
    $range=array(
    0=>$row['lft'],
    1=>$row['rgt']
    );
    }//fine ciclo while
    return $range;
    }

    function is_parent($lft,$rgt,$range){
    if (($lft<=$range[0])&&($rgt>=$range[1])){return true;}else{return false;}
    }

    function get_tree($range,$id_parent,$count){

    //SE E' IL PRIMO GIRO CALCOLO IL RANGE DELL'ARTICOLO SELEZIONATO
    if((!$range)&&($_GET[id_articolo])){$range=get_range();}

    if(($_GET[id_articolo])&&(!$id_parent)){
    $id_parent=$_GET[id_articolo];
    }

    if($count>0){
    $where=$id_parent;
    $voci.="<ul id="sub-list">";
    }else{$where=0;}

    $sql="SELECT id_parent,id_articolo,titolo,lft,rgt FROM articoli WHERE id_parent=".$where." ORDER BY data_ins ASC";
    #echo $sql."<br>";
    $query=mysql_query($sql) or die(mysql_error());
    $conto=mysql_num_rows($query);

    //STAMPO IL MENU
    for($i=0;$i<$conto;$i++){
    while($dati=mysql_fetch_array($query)){

    $titolo_art=$GLOBALS[text]->converti_per_output($dati[titolo],0,0);
    $voci.="<li><a href="index.php?id_articolo=".$dati[id_articolo].""".$class.">".$titolo_art."</a></li>";
    //FINE STAMPA MENU

    //SE SONO NELLA VOCE DA APRIRE RICHIAMO LA FUNZIONE SUBMENU
    if(is_parent($dati[lft],$dati[rgt],$range)){
    $count++;echo $count."<br>";
    $voci.=get_tree($range,$dati['id_parent'],$count);
    }
    //FINE RIPETIZIONE DELLA FUNZIONE

    }//fine ciclo while
    }//fine ciclo for

    if ($count>0){$voci.="</ul>";}
    //FINE STAMPA MENU
    return $voci;
    }

    $menusix="<ul id='macro-list'>";
    if($ADMIN){
    $menusix.="<li><a href="index.php"><strong>+NUOVO ARTICOLO</strong></a>";
    }

    $menusix.=get_tree(0,0,0);

    $menusix.="</ul>".$mess2;
    ?>[/PHP]

    grazie vivissime a chiunque mi dedicherà del tempo.


  • User Attivo

    a: nessuno risponde perchè è complicato
    b: nessuno risponde perchè sono complicato o mi sono espresso male
    😄 nessuno risponde perchè viene il mal di testa solo a pensarci
    d: nessuno risponde perchè il codice, scritto da un non matematico come me forse è un po' incasinato, per non dire pieno di errori

    allora? quale scegliete? la A la B la C o la D?
    io compro una vocale, tu?