Blockstruktur erzeugen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Blockstruktur erzeugen

    Hi Leute!

    also ich habe folgendes Problem und ich hoffe ihr könnt mir helfen:

    Also ich habe eine Tabelle mit z.B. Technologien. Jede Technologie baut auf eine vorhergehende auf, bzw. ist in der Ebene 0 (Also eine Technologie, die keine Vorgänger hat).
    Also eine Technologie beinhaltet weitere Technologien, von welchem einige vl. wieder ein Paar untergeordnete Technologien enthalten..
    Dies sieht dann in etwa so aus:
    Physik
    -->Relativitätstheorie
    -->-->Beschleunigung
    -->Teilchenphysik
    usw.

    Dazu habe ich 3 Felder angegeben:
    t_ID (ID Der Technologie)
    t_Parent_ID (ID der Technologie, in welche die aktuelle hineinkommt)
    t_Ebene (Die Ebene der Technologie (wird später automatisch (nicht manuell) berechnet und erstellt))

    Diese Technologien werden als Blöcke dargestellt (div Elemente).
    Dazu habe ich folgende Funktion geschrieben:

    ----------------------------------------------------------------------------------
    PHP-Code:
        //Für die Auswertung der Techtreeblöcke
            
    $Q_Block "SELECT         t_Ebene, t_Name, t_Beschreibung, t_Max_Level, t_ID, t_Parent_ID
                        FROM         tech
                        ORDER BY     t_Parent_ID ASC, t_ID ASC"
    ;                //t_Ebene ASC,
                        
        //Startvariablen        
        
    $Block_Nr   2;    //Start Block ID
        
    $Ebene        0;    //Startebene

        //Funktion Block erzeugen
        
    function block_erzeugen ($Ebene$Q_Block$Block_Nr){
        
            
    $Block_Nr block_wechsel($Block_Nr);                    //Wechselt die Block - ID
            
            
    $A_Block mysql_query($Q_Block) OR die(mysql_error());    //Array erzeugen (immer gleich)    
            
            
    if(mysql_num_rows($A_Block)){                            //prüfen ob Datensätze vorhanden sind
            
                
    while($R_Block mysql_fetch_assoc($A_Block)) {        //Bei jedem Schleifendurchlauf wird ein Array 
                                                                    //mit den Elementen des aktuellen Datensatzes gefüllt.
                    
    if($Ebene == $R_Block['t_Ebene']){
                        echo 
    "\n  <div id=\"t_box".$Block_Nr."\">\n";
                        echo 
    "    <div id=\"t_Name\">"        .$R_Block['t_Name']        ."</div>\n";
                        echo 
    "    <div id=\"t_Beschreibung\">".$R_Block['t_Beschreibung']."</div>\n";
                        echo 
    "    <div id=\"t_Beschreibung\">".$R_Block['t_ID']."</div>\n";
                        
                        
    $ID $R_Block['t_ID'];
                        while(
    $R_Block_Hilf mysql_fetch_assoc($A_Block)) {
                            
                            if((
    $Ebene == $R_Block_Hilf['t_Ebene']) AND ($ID == $R_Block_Hilf['t_Parent_ID'])){
                                
                                
    $Ebene_Hilf $Ebene 1;
                                
                                
    block_erzeugen($Ebene_Hilf$Q_Block$Block_Nr);    //Block mit nächsthöherer Ebene erzeugen                
                            
    }                    
                        }

                        echo 
    "</div>\n";
                    }
                }
            }else{
                echo 
    "<p>Konnte Techtree nicht anzeigen. Es wurden keine Technologien gefunden..</p>";
            }
        }

        
    //Funktion um die Block ID für jede Ebene zu Wechseln
        
    function block_wechsel ($Nr) {
            if        (
    $Nr == 1){$Nr 2;}
            elseif    (
    $Nr == 2){$Nr 1;}
            return 
    $Nr;
        }
        
        
    block_erzeugen($Ebene$Q_Block$Block_Nr); 
    ----------------------------------------------------------------------------------

    Was hat es mit dem Blockwechsel auf sich? Nichts. Der dient nur dazu das <div> Attribut ID zu regeln, um die Blockdarstellung für jede Unterebene zu wechseln Also dass einmal <div id=Block1> und oder id=Block2 dasteht, damit CSS richtig formatiert. Dies Funktioniert einwandfrei und man kann sich diese Funkton wegdenken..

    Jetzt endlich meine Frage:

    Beim aufruf dieser Funktion wird mir
    1. nur der 1. Grundblock (Ebene 0) dargestellt, nicht alle Grundtechnologien und
    2. sollte ein Datensatz gefunden werden, der ein Kind von einem anderen ist (Eltern_ID == Kind_Parent_ID) dann wird nicht der entsprechende Datensatz angezeigt sondern irgendeiner, bei dem die Ebene stimmt. Da nimmt er dann irgendeine ID her..

    Wäre super wenn ihr mir mit diesem Problem helfen könntet.. ich progge erst seit 2 wochen php und bin noch ziemlicher noob..
    mfg, alex
    Zuletzt geändert von Abbadon; 25.08.2006, 10:46.

  • #2
    ich hatte mal das selbe problem ich wollte auch einen "baum" erstellen, habe dann aber aufgegeben und mir ein vorgefertigtes script runtergeladen und modifiziert.

    hmm...

    zu 1:
    PHP-Code:
    if(($Ebene == $R_Block_Hilf['t_Ebene']) AND ($ID == $R_Block_Hilf['t_Parent_ID'])){
                                
    $Ebene_Hilf $Ebene 1;
                                
    block_erzeugen($Ebene_Hilf$Q_Block$Block_Nr);    //Block mit nächsthöherer Ebene erzeugen                

    --> hier muss noch irgendwo eine abfrage rein, damit nicht, sobald du deinen unterblock gefunden hast ein neuer block reinkommt, sondern dass der block reinkommt, der auch wirklich rein soll.. aber meinung hättest du das schon im 2. teil der if bedingung gmacht.. sehr komisch...

    zu 2. tut mir leid, da sehe ich absolut nicht woran das liegen könnte
    Zuletzt geändert von Hoephtos; 25.08.2006, 17:16.

    Kommentar

    Lädt...
    X