Hallo,
ich habe mit Hilfe des Nested-Sets Tutorials versucht ein Nested-Set Modell aufzubauen.
Das Modell funktioniert soweit auch ganz gut. Nur beim Hinzufügen von Unterpunkten habe ich mühe.
Also bis hier gehts:
Hier komme ich nicht mehr weiter. Wenn ich nun einem Unterpunkt noch einen Unterpunkt hinzufügen will, referenziere ich immer auf den, mit der root_id (1 Punkt in diesem Fall) und somit setzt er die Nummerierung fort und fängt nicht bei 1 an:
etc.
Wie kann ich dies nun richtig Verknüpfen?
Hier der Code:
Edit: Also mein Problem ist die korrekte Referenzierung der
root_id's. Ich arbeite zum Sortieren mit der Spalte "Ordering".
Momentan ist das Skript so aufgebaut, dass ich die übergeordnete
Kategorie ($parent_item) angebe und mich auf diese beziehe:
1. Letze ID holen
2. Höchstes Ordering-Feld holen (wobei root_id die id des
Parent-Items ist)
Das Problem ist nun, wenn ich für eine Unterkategorie eine
Unterkategorie anlegen will, dann bezieht sich das Script ja auf die
root_id, also auf das Element, welches im Feld "lft" den Wert 1 hat.
Ich müsste quasi angeben, dass ich das ausgewählte Element als "root_id" angesehen wird. Nur wie mache ich dies?
Vielen Dank & Gruss
ich habe mit Hilfe des Nested-Sets Tutorials versucht ein Nested-Set Modell aufzubauen.
Das Modell funktioniert soweit auch ganz gut. Nur beim Hinzufügen von Unterpunkten habe ich mühe.
Also bis hier gehts:
PHP-Code:
1 Punkt
1 Punkt
2 Punkt
3 Punkt
PHP-Code:
1 Punkt
1 Punkt
2 Punkt
4 Punkt
5 Punkt
6 Punkt
3 Punkt
Wie kann ich dies nun richtig Verknüpfen?
Hier der Code:
PHP-Code:
/**
* @function Adds a new item to the menu
*
* @param $item_name Name of the item, which gets added
* @param $parent_item Id of the parent item (category)
**/
function addItem($item_name, $parent_item)
{
$query = "SELECT * FROM kf_menu WHERE node_id = '".$parent_item."'";
$last_id = new Query($query);
if($last_id->error()) {
echo "<pre>\n";
echo $last_id->getError();
echo "</pre>\n";
die();
}
$row_last_id = $last_id->fetch();
$query_maxordering = "SELECT max(ordering) as ordering FROM kf_menu WHERE root_id = '".$row_last_id['root_id']."'";
$max_ordering = new Query($query_maxordering);
if($max_ordering->error()) {
echo "<pre>\n";
echo $max_ordering->getError();
echo "</pre>\n";
die();
}
$row_max_ordering = $max_ordering->fetch();
$next_ordering = $row_max_ordering['ordering'] + 1;
$query_insert = "LOCK TABLES kf_menu WRITE";
$add_item = new Query($query_insert);
$query_insert = "UPDATE kf_menu SET lft = lft + 2 WHERE root_id = '".$row_last_id['root_id']."' AND lft > '".$row_last_id['rgt']."' AND rgt >= '".$row_last_id['rgt']."'";
$add_item = new Query($query_insert);
$query_insert = "UPDATE kf_menu SET rgt = rgt + 2 WHERE root_id = '".$row_last_id['root_id']."' AND rgt >= '".$row_last_id['rgt']."'";
$add_item = new Query($query_insert);
$query_insert = "INSERT INTO kf_menu ( root_id, payload, lft, rgt, ordering ) VALUES ( '".$row_last_id['root_id']."', '".$item_name."', '".$row_last_id['rgt']."', '".$row_last_id['rgt']."' + 1, '".$next_ordering."' )";
$add_item = new Query($query_insert);
$query_insert = "UNLOCK TABLES";
$add_item = new Query($query_insert);
if($add_item->error()) {
echo "<pre>\n";
echo $add_item->getError();
echo "</pre>\n";
die();
}
else
{
return 'ITEM ADDED';
}
}
root_id's. Ich arbeite zum Sortieren mit der Spalte "Ordering".
Momentan ist das Skript so aufgebaut, dass ich die übergeordnete
Kategorie ($parent_item) angebe und mich auf diese beziehe:
1. Letze ID holen
2. Höchstes Ordering-Feld holen (wobei root_id die id des
Parent-Items ist)
Das Problem ist nun, wenn ich für eine Unterkategorie eine
Unterkategorie anlegen will, dann bezieht sich das Script ja auf die
root_id, also auf das Element, welches im Feld "lft" den Wert 1 hat.
Ich müsste quasi angeben, dass ich das ausgewählte Element als "root_id" angesehen wird. Nur wie mache ich dies?
Vielen Dank & Gruss
Kommentar