Hallo,
mache gerade die ersten Übungen und Gehversuche mit Nested Sets. Habe ein kleines Problem und anschließend noch eine Frage. Ich versuche in einem Select-Feld den Baum auszugeben, der in einer DB mittels Nested Sets gespeichert wurde. Bei einfacher Ausgabe funktioniert alles problemlos. Nur wenn ich es in einem Select-Feld versuche, klappt es nicht. Hier die Funktion und mein Versuch:
Mein Problem taucht hier auf:
Ich möchte, dass in dem Select-Feld auch eine Baumstruktur angezeigt wird. Das versuche ich durch Einrücken mittels . Jetzt wird allerdins folgender Code erzeugt:
Korrekterweise müsste es aber so aussehen:
aber ich weiß im Moment nicht, wo ich ansetzen soll.
Nun zu meiner zweiten Frage. Ich versuche unabhängig davon eine simple Navigation zu realisieren. Ich möchte, dass immer nur der Knoten, ohne Kinder ausgegeben wird. D.h. ich wähle die Hauptkategorie, und sehe beispielsweise zwei Unterkategorien, nicht aber die Unterkategorien dieser, sondern erst, wenn ich darauf klicke, also erneut eine Abfrage starte. Meine Frage ist nun, geht das, wenn ich in der DB nur eine id und die Spalte rgt und lft habe? Oder muss eine weitere Spalte, z.B. mit einer parent_id her, damit ich rekursiv abfragen kann? Vielen Danke für eure Hilfe.
mache gerade die ersten Übungen und Gehversuche mit Nested Sets. Habe ein kleines Problem und anschließend noch eine Frage. Ich versuche in einem Select-Feld den Baum auszugeben, der in einer DB mittels Nested Sets gespeichert wurde. Bei einfacher Ausgabe funktioniert alles problemlos. Nur wenn ich es in einem Select-Feld versuche, klappt es nicht. Hier die Funktion und mein Versuch:
PHP:
<?php $root = "Food";
// retrieve the left and right value of the $root node
$result = mysql_query('SELECT lft, rgt FROM tree '.
'WHERE title="'.$root.'";', $dbconnect);
$row = mysql_fetch_array($result);
// start with an empty $right stack
$right = array();
// now, retrieve all descendants of the $root node
$result = mysql_query('SELECT title, lft, rgt FROM tree '.
'WHERE lft BETWEEN '.$row['lft'].' AND '.
$row['rgt'].' ORDER BY lft ASC;', $dbconnect);
// display each row
while ($row = mysql_fetch_array($result)) {
// only check stack if there is one
if (count($right)>0) {
// check if we should remove a node from the stack
while ($right[count($right)-1]<$row['rgt']) {
array_pop($right);
}
}
// display indented node title
echo str_repeat(" ",count($right))."<option value=\"".$row['rgt']."\">".$row['title']."</option>";
// add this node to the stack
$right[] = $row['rgt'];
}
}
?>
<form id="form1" name="form1" method="post" action="">
<select name="select" size="5" multiple="multiple">
<?php display_tree($root); ?>
</select>
</form>
Mein Problem taucht hier auf:
PHP:
echo str_repeat(" ",count($right))."<option value=\"".$row['rgt']."\">".$row
HTML:
<option value="20">Food</option> <option value="13">Fruit</option> <option value="8">Red</option> <option value="5">Cherry</option> <option value="6">Strawberry</option> <option value="12">Yellow</option> usw.
HTML:
<option value="20"> Food</option>
Nun zu meiner zweiten Frage. Ich versuche unabhängig davon eine simple Navigation zu realisieren. Ich möchte, dass immer nur der Knoten, ohne Kinder ausgegeben wird. D.h. ich wähle die Hauptkategorie, und sehe beispielsweise zwei Unterkategorien, nicht aber die Unterkategorien dieser, sondern erst, wenn ich darauf klicke, also erneut eine Abfrage starte. Meine Frage ist nun, geht das, wenn ich in der DB nur eine id und die Spalte rgt und lft habe? Oder muss eine weitere Spalte, z.B. mit einer parent_id her, damit ich rekursiv abfragen kann? Vielen Danke für eure Hilfe.