NestedSet - Algorithmus gesucht

Ich habe eine aktualisierte Version unter Content*Builder online gestellt.

Das ist eine reine Bugfix Version, da es einige Server gibt, die magic_quotes oder so aus haben (irgendwas mit dieser Einstellung muss es sein). Jedenfalls funtkionierte die Klasse auf solchen Servern net.

Ciao, Jörg
 
Version 1.5 von CB_NestedSet ist nun auch verfügbar. Möglich ist nun auch das verschieben und sortieren von Zweigen.

Wer immer die aktuellste Version haben will, kann sich diese auch aus den Content*Builder Paketen aus dem lib Verzeichnis 'entwenden'.

Ciao, Jörg
 
Version 1.6 ist nun verfügbar.

Jede get Methode kann nun mit einem weiteren Parameter aufgerufen werden: $additionalSQL. Dieses Array kann vier Einträge haben (field, join, where, append), welche als zusätzliche SQL Statements in die Abfragen eingebaut werden.

Beispiel:

In Content*Builder werden in einer Sprachtabelle zusätzliche Sprachversionen für die Rubriken abgelegt. Diese Tabelle musste ich irgendwie mit der NestedSets Klasse verbinden. So kam dieses Feature zustande.
Wichtig ist hierbei, dass die Tabelle mit dem definierten NestedSet immer als Alias n bekommt. Daher müssen die Feldnamen der Nestedset Tabelle mit n.feldName oder so angesprochen werden.

PHP:
// Array mit zusätzlichen SQL Code
$additionalSQL = array (
	"field" => ", lang.text, lang.languageID",
	"join"  => "LEFT JOIN ".TABLE."_language AS lang ON lang.typeID = n.fid AND lang.type = 'column' AND lang.languageID = '$defaultLanguage'"
);

Das kann nun an eine beliebige Get Methode übergeben werden.

PHP:
$nodeRequest = $nestedSet->getAllNodes(true, $additionalSQL);

Hoffe das nützt jemanden was, aber ich find das ganz brauchbar.

Ciao, Jörg Stöber
 
vorweg erstmal topppp ich habs auch schon versucht hinzubiegen und bin kläglich gescheitert :(

aber eins fehlt mir wo stelle ich in der klasse ne verbindung zur db her?

bei der Pear::NestedSets übergebe ich beim initialisieren den $dns mit. Wie weiß die Klasse in welcher DB sich die Tabelle befindet und wie die Zugangsdaten dorthin sind?
 
Zuletzt bearbeitet von einem Moderator:
Ich will meine bescheidene Navigation auch auf Nested Sets umstellen, da ich bis jetzt noch die Parent-Methode nutze. Ich habe nur sehr wenige Hits, da ist das zwar egal, aber unschön. :)

Ich will mein Menü jedoch nie ganz ausgeklappt sehen. Eigentlich sollten immer nur die Hauptpunkte zu sehen und nur die Menüpunkte aufgeklappt sein, die man aufklappen muss um zur aktuellen Seite zu gelangen.

Wie mache ich das am intelligensten? Jemand ne gute Idee für ne Query und muss ich das am besten nachher mit PHP aussortieren?

Grüße
Tobias
 
Die Literatur habe ich zum größten Teil durch. Mir ist nur noch keine intelligente Lösung eingefallen.

Warum Umstieg? Noch sind die beiden Webseiten wo es Verwendung finden soll recht klein, so das der Umstieg problemlos möglich ist. Auf Dauer will ich es aber umgestellt haben, damit ich nicht so viele Anfragen an die DB benötige.

Grüße
Tobias
 
Ich glaube wir reden etwas aneinander vorbei.

Das Beispiel auf die Menüstruktur zur übernehmen ist kein Problem. Nur zeigt er bis jetzt immer den gesamten Baum an.

page.jpg


Wenn jetzt ein Besucher die Seiten "I" (rot) öffnet (die Grafik ist übrigens dem Tut entnommen), dann sollen alle Übergeordneten Elemente und gleichgestellte Elemente (aber keine die andere Eltern haben!) anzeigt werden (rosa). Diese Selektion stellt mein Problem dar.

Optional sollte man auch noch die Kinder von I (J und L) mit anzeigbar machen.
 
twam: wenn du den Ast, der ausgewählt ist, komplett ausklappen willst, könntest du einerseits mit getRootNodes alle Wurzeleinträge abfragen und dann mit getBranch den gesamten Zweig der geöffnet ist. Danach kann man in einer foreach Schleife alle root Elemente durchgehen und bei dem geöffneten Zweig noch mal die Elemente dieser Abfrage.

Problematisch ist allerdings ein Menu, durch dass man sich Level für Level durchhangeln muss. Ich suche immer noch nach dem Algorithmus den ich im allerersten Post dieses Threads suche. Man kann zwar fabelhaft einfach alle Vorgänger abfragen, aber dessen Gechwister bekomme ich nicht. Somit tritt das Phänomen bei der Navigation auf, dass beim Wechsel von der 2. Ebene in die 3. Ebene alle Geschwister des Knotens in der 2. Ebene immer verschwinden, was einfach verwirrend ist.

Die Klasse bekommt natürlich eine Methode dafür, sobald ich die Abfrage habe. Und es muss eine geben, denn man kann ja problemlos alle direkten Vorgänger abfragen.....

Ciao, Jörg
 
Zurück