mysqldumper
-


Hinweise


Antwort
 
LinkBack (7) Themen-Optionen Thema durchsuchen
Alt 18.07.2008, 20:16   #91
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
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.
theo ist offline   Mit Zitat antworten


Alt 20.07.2008, 10:35   #92
TP-Newbie
 
Benutzerbild von pfump
 
Registriert seit: Jul 2008
pfump macht alles soweit korrekt
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
pfump ist offline   Mit Zitat antworten
Alt 05.08.2008, 11:49   #93
TP-Newbie
 
Registriert seit: Aug 2008
tobyff macht alles soweit korrekt

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='
.$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
                  ;'

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
tobyff ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Workshops und Tutorials
[Workshop] Nested Sets [Fortgeschrittene] [Workshop] Nested Sets
« [Tutorial] Einfaches Galerie Script mit Thumbnail Funktion (ohne MySQL) | [Workshop] Typo3-Workshop Teil IV - Template, Fortsetzung »

Stichworte
datenbank, mysql

LinkBacks (?)
LinkBack to this Thread: http://www.traum-projekt.com/forum/73-workshops-und-tutorials/58359-workshop-nested-sets.html
Erstellt von For Type Datum
hilfe nested sets - php.de This thread Refback 12.08.2008 17:41
Adobe UserGroup Dreamworker.de - FOR Schleife ordnen?! This thread Refback 26.05.2008 13:34
Ertse Versuche mit Baumstruktur,erstes Problem! - Inspire-World Forum This thread Refback 20.05.2008 09:18
Nested Sets ? Wikipedia This thread Refback 23.03.2008 18:57
PHP script resource DYNAMISCHES MENÜ ->rekursive funktion -> hilfe This thread Refback 15.10.2007 11:34
Pop Out and Drop Down Menu mit MYSQL - Forum: phpforum.de This thread Refback 19.08.2007 21:47
e-techniker.info - Blog Archive - Baumstrukturen This thread Pingback 16.02.2007 18:38

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Anfänger] [Workshop] Formmailer mike Workshops und Tutorials 92 04.04.2008 13:32
[Fortgeschrittene] [Workshop] Objektorientierte Programmierung in PHP Lars Workshops und Tutorials 114 29.05.2007 16:55
Nested Sets und SQL-Querys martinR Traum-Dynamik 0 17.11.2004 10:15
Nested Templates bei DW MX Haretürk Dreamweaver 3 19.01.2003 21:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:01 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67