Mailinglisten-Archive |
Ok, ich trau mich das jetzt hier kaum zu posten, aber mehr als mich für
lausigen Code und mangelhafte Logik rügen könnt ihr ja nicht :) Und
daraus kann ich ja nur lernen :)
Also hier die Lösung meines Problems:
-----code-----
// fuer die Ausgabeschleife (while-Bedingungen)
$iA = 0;
$numBaumAnzeige = $baumAnzeige->numrows();
// und dann brauchen wir noch einen Vergleich der Level
$level_old = 0;
// und einen Vergleich der linken Begrenzer
$left_old = 0;
// da auf jeden Fall mit einer Liste angefangen wird, kann die
geoeffnet werden
echo '<ul><li>';
// Schleife fuer die Ausgabe
while($iA < $numBaumAnzeige) {
$rowBaumAnzeige = $baumAnzeige->fetch();
// was jetzt kommt, muss nicht sein, macht das Ding aber uebersichtlicher
$name = $rowBaumAnzeige['name'];
$level = $rowBaumAnzeige['level'];
$nachfahren = $rowBaumAnzeige['nachfahre'];
$left = $rowBaumAnzeige['sideleft'];
// $level_old ist 0 und $level ebenfalls, es handelt sich also um den
absoluten root
if(($level_old == 0) AND ($level == 0)){
echo $name.' => Level '.$level.' mit '.$nachfahren.' Nachfahren'."\n";
} else {
// um alle Moeglichkeiten abzudecken, gibt es eine lange Liste mit
IF-Statements
// da kann man sicher noch optimieren
// ist der aktuelle Level hoeher als der alte und gibt es weitere
Nachfahren
// handelt es sich um einen Ast, auf jedem Fall muss eine
geschachtelte Liste geoeffnet werden
if(($level > $level_old) AND ($nachfahren > 0)){
// die Einrueckung wird ueber das Level berechnet
echo '<ul style="padding-left: '.($level * 10).'px;">'."\n";
echo '<li>';
echo $name.' => Level '.$level.' mit '.$nachfahren.' Nachfahren'."\n";
// $level_old und $left_old aktualisieren
$level_old = $level;
$left_old = $left;
}
// ist der aktuelle Level hoeher als der alte und es gibt keine
Nachfahren
// handelt es sich um ein Blatt
if(($level > $level_old) AND ($nachfahren == 0)){
echo '<ul style="padding-left: '.($level * 10).'px;">'."\n";
echo '<li>';
echo $name.' => Level '.$level.' mit '.$nachfahren.'
Nachfahren</li>'."\n";
// sollte der Baum jetzt am Ende sein, muss die Liste noch
geschlossen werden
if(($iA + 1) == $numBaumAnzeige){
echo '</ul>'."\n";
}
// $level_old und $left_old aktualisieren
$level_old = $level;
$left_old = $left;
}
// ist alter und neuer Level gleich und es gibt keine Nachfahren
// handelt es sich um Rippen desselben Blattes
// da nun aber der vorige IF einmal wahr waere,
// muss das per Hilfe von $left ausgeschlossen werden
if(($level == $level_old) AND ($nachfahren == 0) AND ($left_old !=
$left)){
echo '<li>'.$name.' => Level '.$level.' mit '.$nachfahren.'
Nachfahren</li>'."\n";
// sollte der Baum jetzt am Ende sein, muss die Liste noch
geschlossen werden
if(($iA + 1) == $numBaumAnzeige){
echo '</ul>'."\n";
}
// $level_old und $left_old aktualisieren
$level_old = $level;
$left_old = $left;
}
// das vorhergehende Blatt ist erledigt,
// der aktuelle Level ist kleiner als der alte und es gibt Nachfahren
if(($level < $level_old) AND ($nachfahren > 0)){
// es gibt in jedem Fall eine ungeschlossene Liste darueber,
// die wird zuerst geschlossen
echo '</ul>'."\n";
echo '<li>'.$name.' => Level '.$level.' mit '.$nachfahren.'
Nachfahren</li>'."\n";
// $level_old und $left_old aktualisieren
$level_old = $level;
$left_old = $left;
}
// und der letzte, der aktuelle Level ist kleiner als der alte, es
gibt aber keine Nachfahren
if(($level < $level_old) AND ($nachfahren == 0)){
// es gibt in jedem Fall eine ungeschlossene Liste darueber,
// die wird zuerst geschlossen
echo '</ul>'."\n";
echo '<li>'.$name.' => Level '.$level.' mit '.$nachfahren.'
Nachfahren</li>'."\n";
// sollte der Baum jetzt am Ende sein, muss die Liste noch
geschlossen werden
if(($iA + 1) == $numBaumAnzeige){
echo '</ul>'."\n";
}
// $level_old und $left_old aktualisieren
$level_old = $level;
$left_old = $left;
}
}
$iA++;
}
// erste, umschliessende Liste, schliessen
echo '</li></ul>';
}
-----codeende-----
Liebe Grüße aus Berlin und schönes Wochenende Jörn
php::bar PHP Wiki - Listenarchive