Stosuje tak:
<?php function Move( $lft, $rgt, $parent_rgt ) { // Wybierz `pozycje` do przeniesienia // Wieprzowina: lft = 5, rgt = 6 $this -> queryResults( \"SELECT title FROM tree2 WHERE lft = '\".$lft.\"' AND rgt = '\".$rgt.\"'\" ); $row = $this -> fetchArray(); // Wybierz nowego `rodzica` `pozycji` do przeniesienia // Mieso: rgt = 11 $this -> queryResults( \"SELECT title FROM tree2 WHERE rgt = '\".$parent_rgt.\"'\" ); $row_parent = $this -> fetchArray(); // Wybierz najwiekszy `rgt`, gdzie $this -> queryResults( \"SELECT MAX(rgt) AS rgt FROM tree2 WHERE parent = '\".$row_parent['title'].\"'\" ); $row_max = $this -> fetchArray(); $this -> queryResults( \"UPDATE tree2 SET rgt = (rgt + 2) WHERE rgt >= ($row_max[rgt] + 1)\" ); // Dodaje nowa `pozycje` w ustalone pod ustalone miejsce $this -> queryResults( \"INSERT INTO tree2 SET parent = '\".$row_parent['title'].\"', title = '\".$row['title'].\"', lft = (\".$row_max['rgt'].\" + 1), rgt = (\".$row_max['rgt'].\" + 2)\" ); // Usuwa `pozycje` ze starego miejsca $this -> queryResults( \"DELETE FROM tree2 WHERE lft = '\".$lft.\"' AND rgt = '\".$rgt.\"'\" ); $this -> queryResults( \"UPDATE tree2 SET rgt = (rgt - 2) WHERE rgt > '\".$rgt.\"'\" ); $this -> queryResults( \"UPDATE tree2 SET lft = (lft - 2) WHERE lft > '\".$lft.\"'\" ); ?>
Wszystkie jest dobrze jak podam np. 5, 6, 11, ale jesli chce podac 7, 8, 5 (przesuniecie jakby w druga strone) to sie sypie.
<?php $moveTree = new Trees; $moveTree -> Move( lft_pozycji_do_przesuniecia, rgt_pozycji_do_przesuniecia, parent_rgt_nowa_kategoria(rodzic)_pozycji ); ?>
Problem chyba tkwi w kolejnosci zapytan SQL. Nie wiem dlaczego w przypadku gdy ostatni argument jest mniejszy od pozostalych to sie sypie...
Mam nadzieje ze mnie zrozumieliscie. Jak cos to pytac! Siedze nad tym juz dobre pare godzin...