Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Menu dinamico ad albero

    Buon pomeriggio.
    Ho due tabelle TB_LIVELLO_1 e TB_LIVELLO_2
    Nella prima:
    id_livello(PK) - Principale
    1 - Disposizioni
    2 - Strumenti
    3 - Consulenti


    Nella seconda:
    id(PK) - il_livello(K) - Secondaria
    1 - 1 - personale
    2 - 2 - chitarra
    3 - 2 - basso
    4 - 2 - batteria
    5 - 2 - microfono
    6 - 3 - PRS
    7 - 3 - IBANEZ




    Eseguo questa query:
    codice:
    SELECT c.vPrincipale , a.vSecondaria,a.id_livello FROM TB_LIVELLO_1 AS c
    LEFT JOIN TB_LIVELLO_2 AS a ON c.id_livello = a.id_livello
    order by c.id_livello ASC
    e mi restituisce:


    vPrincipale - vSecondaria
    Disposizioni - personale
    Strumenti - chitarra
    Strumenti - basso
    Strumenti - batteria
    Strumenti - microfono
    Consulenti - PRS
    Consulenti - IBANEZ




    Il menu che devo ottenere è cosi strutturato:


    Disposizioni
    - personale
    Strumenti
    - chitarra
    - basso
    - batteria
    - voce
    Consulenti
    - PRS
    - IBANEZ


    La query è giusta oppure no?
    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    da quanto hai scritto si, starà poi a te nel ciclare il recordset creare l'ioneo menù

  3. #3
    è proprio quello che mi risulta difficile.
    Come ciclare e ottenere il menu.
    Puoi aiutarmi cortesemente?

  4. #4
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    innazitutto devi eseguire la query e ciclare i recordset, magari puoi memorizzarli in un array del tipo chiave => valore con chiave vPrincipale e valore vSecondaria
    poi cicli l'array con un foreac $nomearray as $chiave => $valore e in base alla coppia che cicli scrivi o meno menù e sottomenù

  5. #5
    sto provando ma non mi restituisce quello che mi aspettavo e cioè, un array strutturato come segue:
    Codice PHP:

    $array 
    = array(
        
    "Disposizioni" => array(
             
    0=>"personale",
             
    =>"globale",
             
    =>"specifico"
             
    )
    ); 

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La query ti dovrebbe restituire l'equivalente di questo array
    Codice PHP:
    $resultset = array(
        [
    "Disposizioni""personale"],
        [
    "Strumenti""chitarra"],
        [
    "Strumenti""basso"],
        [
    "Strumenti""batteria"],
        [
    "Strumenti""microfono"],
        [
    "Consulenti""PRS"],
        [
    "Consulenti""IBANEZ"],
    ); 
    Quindi ciclando su di esso (tu lo farai con un while)

    Codice PHP:
    $menu = array();

    foreach( 
    $resultset as $array )
    {
        
    $menu[$array[0]][] = $array[1];
    }
    echo 
    "<pre>";
    print_r($menu);
    echo 
    "</pre>"

  7. #7
    con qualche accorgimento ho risolto:
    Codice PHP:
    $menu = array();            
    while (
    $row mysqli_fetch_assoc($query)) {                
    $menu[$row['vPrincipale']][] = utf8_encode($row['vSecondaria']);            
    }            
    foreach(
    $menu as $lista => $l){                
    $menu_navbar .= "<li ><a href='#' class='accordion' style='text-align:left;line-height:18px'>".utf8_encode($lista)."</a>                                    <ul data-index='0' class='panel togliSpazio'>";                
    foreach(
    $l as $link){                    
    $menu_navbar .= "<li style='text-align:left;line-height:18px;margin-right:-10px'><a href='#'>".$link."</a></li>";                
    }                
    $menu_navbar .= "</ul>                            </li>";            

    Grazie, grazie a tutti come sempre.
    Buona giornata.

  8. #8
    scusate, ma non avevo fatto caso ad un particolare, credevo che tutte le voci principali avessero almeno un figlio ma, sbagliavo.
    Nel menu principale c'è "Informazioni" che non ha nessun figlio, come tutti gli altri padri:

    vPrincipale - vSecondaria

    Disposizioni - personale
    Strumenti - chitarra
    Strumenti - basso
    Strumenti - batteria
    Strumenti - microfono
    Consulenti - PRS
    Consulenti - IBANEZ
    Informazioni -

    Dato che è un menu in stile accordion, ovviamente se il padre ha dei figli, apparirà la classica freccetta per indicare che c'è un sottomenu, ma volevo fare un controllo per cui, se non trova nessun figlio, quella classe class='accordion' non deve esserci.
    Ho distinto i padri in questo modo, ma non mi convince:
    [php]
    while ($row = mysqli_fetch_assoc($query)) {
    if($row['padreId']>0){
    $menu[$row['vPrincipale']][] = utf8_encode($row['vSecondaria']);
    }
    else{
    $menu[$row['vPrincipale']][] = NULL;
    }
    }

    [/php]


    Come faccio?
    Grazie ancora.





  9. #9
    fermi tutti questa è una rapina, no no, fatto e funziona.
    Codice PHP:
    //$l[0] verifico il valore attraverso questa variabile
    foreach($menu as $lista => $l){                    

    $menu_navbar .= "<li class='togliSpazio'><span></span><a href='#' ".($l[0]!='' "class='accordion'" "")." ".(strlen($lista)>35 "style='text-align:left;line-height:18px'" "").">".utf8_encode($lista)."</a>";  $menu_navbar .= "<ul data-index='".$i."' class='panel togliSpazio'>"


    grazie ancora.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.