phpbar.de logo

Mailinglisten-Archive

[php] NestedSet: Ausgabe automatisch einrücken und sortieren

[php] NestedSet: Ausgabe automatisch einrücken und sortieren

Andreas Müller Andy.Mueller at t-online.de
Fre Feb 27 09:53:43 CET 2004


Lars Brinkmann wrote:

>Hi PHPler,
>
>  ich frage mich, ob es möglich ist, die Ausgabe eines
>  Nested-Set-Modells mit Hilfe der SQL-Anweisung automatisch
>  einzurücken, ohne dass ich dafür eine PHP-Funktion schreiben muss.
>
>  Mit Count(*) kann ich ja den Level eines Elementes ermitteln. Aber
>  wie kann ich nun zum Beispiel vor die Bezeichnung die Anzahl von
>  Count(*) an Leerzeichen voranstellen? Auch die Sortierung bereitet
>  mir noch Kopfzerbrechen. Wenn ich nach der Bezeichnung alphabetisch
>  sortieren lasse, passt natürlich die Reihenfolge der Knoten nicht
>  mehr. Kann man das vielleicht alles mit einer Query-Anweisung erledigen?
>
>  So soll es aussehen:
>
>  Punkt 1
>   Punkt 1.1
>   Punkt 1.2
>  Punkt 2
>
>  
>  
>
Hallo,

ich arbeite gerade an einem ähnlichen Problem. Das alphabetische 
Sortieren macht wirklich Stress -_-, und bisher fehlt mir dazu auch noch 
eine Lösung.
Für die Darstellung gibt es aber 2 Möglichkeiten:
1. Die einfachere: Die setzt einfach soviele "spaces" wie Level vor den 
String!
2. Die Ausgabe mit HTML-Liste: mit einer HTML Liste bekommst du auch 
noch die Nummerierung hin.. das einzige Manko: Wann öffne ich die Liste 
und wann schliese ich sie. Dieses Problem habe ich mit einer Function 
gelöst.. Grundsätzlich wird bei jeden Eintrag aus der DB ein <li> 
geöffnet. Bei ersten Eintrag wird ein <ul> (Listen anfangen) und beim 
letzten ein </ul> (Listen schliesen) gesetzt!
Jetzt wird es aber schwierigen, denn wir wollen ja auch eine HTML4- 
XHTML- konforme Liste haben:
Also müssen wir alle <li> Tags auch wieder schliesen! Dafür benötigen 
wir den Level des Datensatzes, den wir mit den vorhergegangen Element 
vergleichen. Der Level kann > , < oder = sein. Wenn der Level = ist dann 
schliesen wir einfach nur </li> wenn der Level > ist müssen wir eine 
neue Liste mit <ul> öffnen und ein Listen elment mit <li> anlegen.
Ist der Leven kleiner errechnen wir uns um wieviel der Level kleiner ist 
und dementsprechend viele </li> und </ul> müssen wir dann auch setzen.
Mit einer kleinen Erweiterung der Funktion kannst du auch die Zählung 
Erstellung, soweit du kein HTML nutzen kannst. Bei moderneren Browser 
werden die Elemnte selbst gezählt und mit CSS2 kannst du sie auch 
richtig schön formatieren!

Ich hoffe ich konnte dir ein paar Denkanstösse geben die dir helfen das 
Problem zu lösen.

Mit freundlichen Grüßen
Andy


php::bar PHP Wiki   -   Listenarchive