Autor |
Nachricht |
m
Moderator Threadersteller
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 18.10.2007 11:20
Titel Menü (PHP&MySQL) - Adjacency List Model |
|
|
He. Ich möchte gerne ein Menü darstellen, und zwar einen Teilbaum. Die Daten
liegen in der Form id|parent_id|link|... vor. Einen ganzen Baum darzustellen ist
nicht das Problem. Doch wie gehe ich vor wenn ich einen Teilbaum darstellen
möchte, eben den zur aktuellen Seite?
Kompletter Baum wäre
Code: | Item 1
Item 2
- Subitem 2.1
- Subitem 2.2
Item 3
- Subitem 3.1
- Subitem 3.2
-- Subitem 3.2.1
Item 4 |
Wie schaffe ich es einen Teilbaum zu generieren wenn ich ich ein gegebenes Kind habe
zum Beispiel Subitem 3.2.1
Code: | Item 1
Item 2
Item 3
- Subitem 3.1
- Subitem 3.2
-- Subitem 3.2.1
Item 4 |
Zuletzt bearbeitet von m am Do 18.10.2007 11:57, insgesamt 2-mal bearbeitet
|
|
|
|
|
Backware
Dabei seit: 09.12.2004
Ort: bei Köln
Alter: 38
Geschlecht:
|
Verfasst Do 18.10.2007 12:13
Titel
|
|
|
- pfad auslesen des aktiven elements
- alle kinder von "root" auslesen
- beim durchlaufen und zeitgleichem anzeigen überprüfen: ist aktives element das mutter element des pfades des aktiven menüpunkts?
wenn ja: pfad auflisten
wenn nein: nächstes element
dabei musst du aber drauf achten, dass wenn die kinder im pfad auch weiter kinder haben, dass du diese auch anzeigen wirst..
nicht nur den pfad da ja sonst ein paar punkte fehlen.
|
|
|
|
|
Anzeige
|
|
|
Sarky
Dabei seit: 29.06.2002
Ort: Düsseldorf
Alter: 42
Geschlecht:
|
|
|
|
|
m
Moderator Threadersteller
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 18.10.2007 12:27
Titel
|
|
|
Ha, hört sich einfach an. Ich häng seit gestern dran und hab ein riesen Brett vorm Kopf
Hast du es schon mal umgesetzt? Kannst du eventuell ein paar Fetzen Code posten an denen ich
mich lang hangeln kann? Danke.
Zitat: | - pfad auslesen des aktiven elements |
Du sprichst vom Pfad, der Verbindung von root zum Kind?
Sarky hat geschrieben: | http://www.sitepoint.com/article/hierarchical-data-database |
Danke, den Artikel kenne ich. Das Ding ist, an den Pfad ran zu kommen ist nicht das Problem,
wie komme ich weiter, also ich habe den Pfad von parent_id zu parent_id nur was stelle ich mit dem an?
Zuletzt bearbeitet von m am Do 18.10.2007 12:49, insgesamt 3-mal bearbeitet
|
|
|
|
|
Backware
Dabei seit: 09.12.2004
Ort: bei Köln
Alter: 38
Geschlecht:
|
Verfasst Do 18.10.2007 12:50
Titel
|
|
|
Naja ich hab sowas des öfteren schon umgesetzt, wenn ich dir aber einfach code geben würde, würdest du dich ja einfach daran bereichern, dass ich mir die mühe bereits gemacht habe ;-P
es ist für dich besser, wenn du es dir selbst löst und ich dir nur die ansätze gebe die du benötigst.
dann lernst du mehr und du darfst dann stolz auf dich sein ^^.
eigentlich ist es relativ einfach.
was hast du denn bisher?! arbeitest du mit einer klasse oder wilder programmierung für jeden sonderfall einfach den code fix in der datei stehen?
für die die wenig zeit haben:
- erstelle eine klasse - myNode - mit folgenden funktionen:
--> function myNode ( $id = false )
- myNodes ist der konstruktor des baumes. hier wird nicht viel gemacht.
- empfängt eine variable, wenn diese nicht gegeben ist, wird sie mit false befüllt.
- ist $id = false, dann geh davon aus, dass ROOT angewählt sein soll, sprich: kein Menüpunkt ausgewählt wurde.
- wenn $id nicht false entspricht muss es eine id eines knotenelements sein, wenn dem so ist dürfen wir den knoten mit dem baum laden. wenn nicht, dann sollen wir mit root arbeiten
--> function getChilds ( $id = false )
- gibt alle Kinder des aktuellen Punktes oder von $id zurück
- ist $id gesetzt muss es eine ID sein. Somit gibt es alle Kinder der jeweiligen id zurück
- ist $id nicht gesetzt, wird der aktuelle Punkt (sprich: $this -> id) genutzt.
--> function addChild ( $data )
- Fügt ein Kind unter den aktuellen Punkt ein.
- $data steht für die Variablen, welche für den Punkt erforderlich sind.
--> function remove ( $data )
- Löscht den aktuellen Punkt
- Sollte folgende Funktion auf jedenfall ausführen.
--> function removeChilds ( $data )
- Löscht die Kinder des aktuellen Punkts
- $data steht für die Variablen, welche für den Punkt erforderlich sind.
--> function getPath ( $id = false )
- Ermittelt den Pfad vom aktuellen PUnkt bis zum ROOT des Baumes
- ist $id gesetzt, wird $id genutzt,
- wenn $id nicht gesetzt ist, wird der aktuelle PUnkt genutzt.
m hat geschrieben: | [...]
Danke, den Artikel kenne ich. Das Ding ist, an den Pfad ran zu kommen ist nicht das Problem,
wie komme ich weiter, also ich habe den Pfad von parent_id zu parent_id nur was stelle ich mit dem an? |
Dein PFAD sollte ein ARRAY sein mit den jeweiligen Elementen im index:
Code: |
Array(
0 => "root",
1 => "fruits",
3 => "red",
4 => "apple",
)
|
dann musst du nur beim auflisten des baumes schauen, ob die aktuelle $id ein index des pfad arrays, des aktiven pfades ist.
Zuletzt bearbeitet von Backware am Do 18.10.2007 12:53, insgesamt 1-mal bearbeitet
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
|
|
|
|
m
Moderator Threadersteller
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Do 18.10.2007 13:34
Titel
|
|
|
tacker hat geschrieben: | http://pear.php.net/package/DB_NestedSet |
Danke, ich weiß PEAR bietet auch das HTML_MENU Packet was genau das macht
was ich möchte. Aus diversen Gründen kann/darf ich das leider nicht nutzen.
Backware, danke, gerade schon mal schnell überflogen und schaue ich mir jetzt
nochmal genauer an
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Do 18.10.2007 13:39
Titel
|
|
|
Aber schau dir einfach mal den Code da an, da findest Du alles was Du brauchst.
|
|
|
|
|
|
|
|
Ähnliche Themen |
[PHP/MySQL] Menü aus DB mit Untermenü
[PHP/MySQL] Dynamisches Menü mit Nested Sets
css, ie6, list-style-image...
CSS: list item mit border
CSS: List-image nur bei Hauptmenüpunkten
css list-style-position
|
|