+ Antworten
Seite 7 von 8 ErsteErste ... 4 5 6 7 8 LetzteLetzte
Ergebnis 91 bis 105 von 120

Thema: [Workshop] Nested Sets

  1. #91
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.343
    hi pfump,

    wenn ich dich richtig verstehe, dann geht es dir reinweg um das ein- und ausklappen der baumstruktur. da das ein js-problem ist wuerde ich dich bitten, diese frage vielleicht noch mal bei den puristen zu stellen. die loesung dieser aufgabe ist meiner ansicht nach nicht grundlegender bestandteil des workshops.
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  2. #92
    TP-Newbie pfump macht alles soweit korrekt Avatar von pfump
    Registriert seit
    Jul 2008
    Beiträge
    3
    Ja so ist es. Ich nutze ja die Funktion ShowNavi() um den Baum anzuzeigen.
    Jetzt müßte ich ja den verschiedenen Listeneinträgen ne id verpassen.
    Diese dann mit JS einblenden bzw. ausblenden.

    Nur leider weiß ich nicht wie ich das machen soll.

    Denke mal das ist gar kein so gr0ßes Problem.
    Der Baum wird ja sozusagen in der Tree-Variable gespeichert,
    also müßte ich ja die ID's in dieser Variable mit setzten...
    Aber in der Sache steh ich echt auf dem Schlauch.


    Mfg

  3. #93
    TP-Newbie tobyff macht alles soweit korrekt
    Registriert seit
    Aug 2008
    Beiträge
    2

    Auf und Zuklappen

    Da hier mehrfach die Frage nach dem Auf- und Zuklappen gestellt wurde möchte ich an dieser Stelle mal meine Lösung vorstellen.

    Zusätzlich zu lft und rgt speichere ich schon beim hinzufügen der Menüpunkte die parent_id, also die id des Elternelements ab. Alle Elemente mit der gleichen parent_id wie der angeklickte Menüpunkt sind also Geschwister und müssen mit angezeigt werden. Des weiteren sind alle Menüpunkte anzuzeigen, die die id des aktuellen Menüpunktes als parent_id eingetragen haben, sprich die Kinder. Das funktioniert dann für Menüs mit nur einer Unterebene. Will man mehr Ebenen verarbeiten werden damit aber nicht die alle Kinder der Großeltern angezeigt (Ich mag diese Vergleiche ;-) ).

    Als Beispiel folgende Struktur:

    PHP-Code:
    root
    ---Punkt 1
    ---Punkt 2
    ------Punkt 2.1
    ---------Punkt 2.1.1
    ---------Punkt 2.1.2
    ------------Punkt 2.1.2.1
    ------------Punkt 2.1.2.2
    ------------Punkt 2.1.2.3
    ------------Punkt 2.1.2.4
    ---------Punkt 2.1.3
    ------Punkt 2.2
    ---------Punkt 2.2.1
    ---------Punkt 2.2.2
    ------Punkt 2.3
    ---Punkt 3
    ------Punkt 3.1 
    Wenn Punkt 2.1.2 angeklickt wurde haben 2.1.1 und 2.1.3 die gleiche parent_id und werden mit angezeigt (nicht aber die Unterelemente, da diese eine andere parent_id haben). Ausserdem haben 2.1.2.1 bis 2.1.2.4 die id des Angeklickten als parent_id, werden also ebenfalls angezeigt. Level 1 Elemente werden einfach immer angezeigt, womit wir auch Punkt 1, Punkt 2 und Punkt 3 haben. Aber was nun noch fehlt ist Punkt 2.2 und 2.3.

    Daher habe ich vorher mit folgender Abfrage "alle Eltern" ausgelesen:

    PHP-Code:
    $query '
    SELECT
      m2.parent_id
    FROM
      menupunkte AS m1
    LEFT JOIN
      menupunkte AS m2
    ON
        m1.lft BETWEEN m2.lft AND m2.rgt
      AND
        m1.rgt BETWEEN m2.lft AND m2.rgt
    WHERE
        m1.id='
    .$id_aktueller_Punkt.'
      AND
        m2.parent_id!=0 // Hier schließe ich die Wurzel aus
      AND
        m2.parent_id!=1 // Hier alle Level 1 Elemente, die sind ja eh immer da
    ;'

    Als Ergebnis würde ich für obigen Baum mit Auswahl von 2.1.2 die parent_id von 2.1 geliefert bekommen. Ich packe also das Ergebnis in ein Array ($parents), um es später zu verwenden.

    Der Sinn ist dass ich nun zusätzlich noch alle Elemente auslesen kann, die die gleiche parent_id wie meine direkten Vorfahren haben. Also Punkt 2.2 und 2.3.

    Ich bekomme demnach folgendes Menü:

    PHP-Code:
    root
    ---Punkt 1
    ---Punkt 2
    ------Punkt 2.1
    ---------Punkt 2.1.1
    ---------[B]Punkt 2.1.2[/B]
    ------------
    Punkt 2.1.2.1
    ------------Punkt 2.1.2.2
    ------------Punkt 2.1.2.3
    ------------Punkt 2.1.2.4
    ---------Punkt 2.1.3
    ------Punkt 2.2
    ------Punkt 2.3
    ---Punkt 3 
    Die letztendliche Abfrage bau ich mir dann so zusammen:

    PHP-Code:
    // Menüpunkte auslesen
            
    $query 'SELECT
                        /* Daten */
                          COUNT(*) AS level,
                        COUNT(*)-1 AS open 
                      FROM
                          menupunkte AS m1,
                          menupunkte AS m2
                      WHERE
                          m1.lft BETWEEN m2.lft AND m2.rgt
                      AND
                        m2.lft!=1 // Schließt bei mir die Wurzel aus
                      GROUP BY
                          m1.lft,
                          m1.parent_id, // damit parent_id in HAVING
                          m1.id            // auftauchen darf
                      HAVING
                          COUNT(*)=1 // Level 1 Elemente
                          OR m1.parent_id=m1.id // Ähm?
                          OR m1.parent_id='
    .$id_aktueller_Punkt// Kinder
                     
                    // Vorfahren mit auswählen
                    
    if(count($parents)>0) { 
                        foreach(
    $parents AS $parent) {
                            
    $query .= ' OR m1.parent_id='.$parent;
                        };
                    };
                     
                     
    $query .='
                      ORDER BY
                          m1.lft
                      ;'

    Bei mir klappt das ganze so ausgezeichnet und ohne JS.
    level ist bei mir übrigens die Ebene. Die oberste Ebene hat bei mir die 1. Die Zweite Ebene die 2 usw (logisch!). Wenn ich von der Ebene nun 1 abziehe (COUNT(*)-1) haben alle ausgeklappten Elemente einen Wert größer 0 und sind damit logisch wahr. Dies kann man dann für eine CSS-Formatierung nutzen. So haben alle Level 1 Elemente bei mir die Formatierung border-top:1px solid #333333 und alle ausgeklappten Elemente nicht. Somit kann man die Zusammengehörigkeit gut darstellen.

    Ich hoffe das hilft manch einem weiter...

    Gruß, toby
    Geändert von tobyff (27.09.2008 um 21:09 Uhr)

  4. #94
    TP-Newbie InFlames macht alles soweit korrekt
    Registriert seit
    Sep 2008
    Beiträge
    3
    Ich brauche es genau so wie es tobyff geschrieben hat.

    PHP-Code:
    // Menüpunkte auslesen
            
    $query 'SELECT
                        /* Daten */
                          COUNT(*) AS level,
                        COUNT(*)-1 AS open 
                      FROM
                          menupunkte AS m1,
                          menupunkte AS m2
                      WHERE
                          m1.lft BETWEEN m2.lft AND m2.rgt
                      AND
                        m2.lft!=1 // Schließt bei mir die Wurzel aus
                      GROUP BY
                          m1.lft,
                          m1.parent_id, // damit parent_id in HAVING
                          m1.id            // auftauchen darf
                      HAVING
                          COUNT(*)=1 // Level 1 Elemente
                          OR m1.parent_id=m1.id // Ähm?
                          OR m1.parent_id='
    .$itm// Kinder
                     
                    // Vorfahren mit auswählen
                    
    if(count($parents)>0) { 
                        foreach(
    $parents AS $parent) {
                            
    $query .= ' OR m1.parent_id='.$parent;
                        };
                    };
                     
                     
    $query .='
                      ORDER BY
                          m1.lft
                      ;'

    Nur was soll die Variable $itm sein?

  5. #95
    TP-Newbie tobyff macht alles soweit korrekt
    Registriert seit
    Aug 2008
    Beiträge
    2
    Zitat Zitat von InFlames Beitrag anzeigen
    Nur was soll die Variable $itm sein?
    Oh, ein kleiner Patzer. Das ist die id des aktuell gewählten Elements. Wie im Beispiel Punkt 2.1.2. Ich übergebe das ganze als $_GET["itm"]. Also z.B.

    PHP-Code:
    <a href="menuhandler.php?itm='.$id_aktueller_punkt.'">2.1.2</a
    Gruß, toby

  6. #96
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    hallo forum,

    ich möchte mich bei euch herzlichst bedanken! vorallem Theo für das tutorial, Mat81 für die erweiterung des tutorial und der funktionalität, und Allen die dazu beigetragen haben. ihr habt es geschafft ein sagenhaft einfach zu verstehendes tutorial zu einem grausam komplexen thema zu schreiben. es ist das einzige tut was ich gefunden habe, welches außer der theorie (die ich schon längst durch andere veröffentlichungen und die mengenlehre in der dritten schulklasse verstanden habe) auch das verstehen der mysql statements und die anwendung in php vermittelt.
    macht weiter so!

    ich hätte da sogar eine idee für den nächsten schritt: das verschieben der nodes inkl. ihrer kinder in der ebenen tiefe und zwischen parents


    a1
    - a2
    -- a3
    b1

    a1
    b1
    - a2
    -- a3

    a1
    - a2
    b1
    - a3

    a1
    - a2
    - a3
    b1

    a1
    a2
    - a3
    b1

    b1
    - a1
    -- a2
    --- a3


    die grafische bedienung könnte man mit checkboxen lösen, in dem man neben jedem node zwei checkboxen (ziel, opfer) darstellt.

    ich versuche es mal in das bestehende beispiel zu implementieren, allerdings muss ich mir gedanken machen, wie man verhindert, dass man ein elternteil in eines seiner eigenen kinder packt. möglich wäre ein jscript welches bei der auswahl einer opfer-node-checkbox die ausgeschlossenen ziel-node-checkboxen ausblendet/ausgraut.
    edit: ideal wäre es wenn es doch ginge, und zwar wenn man elternteil in eines seiner eigener kinder steckt, wird einfach umgetausch, kind wird zum parent, parent zum kind, die übrigen bleiben wie sie sind (kinder von kind, bleiben beim selbigen gehen einfach mit, kinder von parent, die geschwister des ziel kindes sind bleiben im parent welches zum kind wird. <-- ich glaube nach dem bier werd ich langsam unlogisch xD

    eine weitere alternative wäre nen jscript/ajax tree mit drag&drop (z.b. wie es in dem ext js framework gemacht ist)

    ich fange zwar erst an mit objekt orientierter php programmierung, aber die php geschichte mit den mysql statements kriege ich denk ich hin, aber von jscript verstehe ich nix. wer hat lust und laune da mit zu machen? ich würde das komplett dokumentieren und versuchen in der selben "einfachen" weise hier darzulegen wie Theo und Mat81
    Geändert von flames (27.10.2008 um 23:42 Uhr)

  7. #97
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    so, für den anfang hab ich nach dem tutorial 1:1 das alles zusammengebaut, was Theo und Mat81 veröffentlicht haben, damit man auf der exakt gleichen codebasis weiterarbeiten kann.

    die live version
    http://apfelzeug.ath.cx/nestedsets/

    das archiv zum downloaden
    http://apfelzeug.ath.cx/nestedsets.zip

  8. #98
    TP-Junior diddy macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Raum Magdeburg
    Beiträge
    7

    Thumbs up

    Hallo Nested Sets Freunde,
    da mich dieses Thema auch sehr interessiert habe ich mich vor ein paar Tagen hier angemeldet und sitze laufend vor diesem Thema.

    Toller Workshop und auch von mir ein großes Dankeschön an theo und mat81 für die gute Arbeit.

    Gruß
    diddy

    Und entschuldigt, wenn ich beim Posten mal ein Fehler mache.
    Geändert von diddy (28.10.2008 um 23:04 Uhr) Grund: Gruß und Entschuldigung vergessen

  9. #99
    TP-Junior diddy macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Raum Magdeburg
    Beiträge
    7
    Hallo flames,
    beide Links funktionieren bei mir nicht. Error 404 File Not Found!

    Gruß
    diddy
    Geändert von diddy (28.10.2008 um 23:05 Uhr) Grund: sorry, auch hier den Gruß vergessen

  10. #100
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    ja, weiss, ich, ich bastle da grade rum, die files sind in ner stunde wieder da

    edit: is wieder online
    Geändert von flames (28.10.2008 um 23:33 Uhr)

  11. #101
    TP-Junior diddy macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Raum Magdeburg
    Beiträge
    7
    Hallo tobyff,
    auch Dein Beitrag ist sehr interessant. Allerdings komme ich mit Deiner Erklärung nicht klar.
    Bei mir klappt nichts auf.

    Benutzt Du die gleiche Struktur und Code wie von theo und mat81 beschrieben?
    Oder ist der Quelltext nur so eine Art "Denkanstoß"?

    Gruß
    diddy

  12. #102
    TP-Junior diddy macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Raum Magdeburg
    Beiträge
    7
    Guten Abend,
    toll und dann versuchen wir es in einer Stunde wieder.
    Habe mir die beiden Tutorials auch schon zusammen gesetzt, aber irgend wo ist noch der Wurm drinn.
    Ich kenne z.B. die "if: else: endif;" Variante nicht und $PHP_SELF benutzt doch auch keiner mehr. Hast Du das bei Dir noch drinn?

    gruß diddy

  13. #103
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    ist schon wieder alles online.

    ja der code ist 1:1 der von theo und mat81, daran will auch nichts verändern, die sollen nur als basis für weitere schritte dienen.

    das was ich mache ist noch nicht soweit um hier präsentiert zu werden. ich habe noch nichtmal angefangen, da sehr viel zutun (arbeit und noch nen eigenes projekt nicht abgeschlossen)

  14. #104
    TP-Junior diddy macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Ort
    Raum Magdeburg
    Beiträge
    7
    Hallo flames,
    kein Problem.

    Habe es online gleich getestet. Der IE hat mich allerdings nicht in den Adminbereich gelassen. Mit Opera hat es funktioniert. Allerdings wurde die 2.Wurzel ohne mein Zutun zur 3. gemacht. Nun werde ich mir die Zip-Datei mal downloaden.

    Ok, der Dowload hat auch geklappt.

    Gruß diddy
    Geändert von diddy (29.10.2008 um 00:29 Uhr) Grund: Nachtrag Download ok

  15. #105
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    die wurzel wurde mit meinem zutun geändert, wir haben gleichzeitig da rumgeklickt und du hast die änderung gesehen die ich gemacht habe.

    ich weiss nix von internetexplorer, meine prioritätslisten der browser die ich nutze: safari, firefox
    die priorität für browserkompatibilität beim erstelen von seiten: fireox, safari, opera
    wenns mit IE klappt, dann ist es zufall und ich freue mich für die leute, die ie nutzen

+ Antworten
Seite 7 von 8 ErsteErste ... 4 5 6 7 8 LetzteLetzte

Ähnliche Themen

  1. [Workshop] Formmailer
    Von mike im Forum Workshops und Tutorials
    Antworten: 93
    Letzter Beitrag: 29.01.2009, 12:34
  2. [Workshop] Objektorientierte Programmierung in PHP
    Von Lars im Forum Workshops und Tutorials
    Antworten: 114
    Letzter Beitrag: 29.05.2007, 17:55
  3. Nested Sets und SQL-Querys
    Von martinR im Forum Traum-Dynamik
    Antworten: 0
    Letzter Beitrag: 17.11.2004, 11:15
  4. Nested Templates bei DW MX
    Von Haretürk im Forum Dreamweaver & andere Webeditoren
    Antworten: 3
    Letzter Beitrag: 19.01.2003, 22:29

Stichworte


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51