Metoda w klasie...
<?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.\"'\" );
?>
Stosuje tak:
<?php
$moveTree = new Trees;
$moveTree -> Move( lft_pozycji_do_przesuniecia, rgt_pozycji_do_przesuniecia, parent_rgt_nowa_kategoria(rodzic)_pozycji );
?>
Wszystkie jest dobrze jak podam np. 5, 6, 11, ale jesli chce podac 7, 8, 5 (przesuniecie jakby w druga strone) to sie sypie.
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...
Ten post edytował kicaj_ 9.07.2004, 02:10:51