Торт PHP 4 Tree Поведение ручной настройки, левый конец, правый (JQuery заказ) - PullRequest
0 голосов
/ 10 февраля 2020

Я использовал плагин nestedSortable jQuery (https://github.com/ilikenwf/nestedSortable), чтобы упорядочивать свои категории с помощью перетаскивания. Каждый раз, когда заказывается категория, в контроллер отправляется запрос Ajax с сообщением массива с полными данными категорий. Все работает так, как ожидалось;

Массив, полученный в контроллере Ajax post:

Array
(
    [0] => Array
        (
            [item_id] => 
            [parent_id] => 
            [depth] => 0
            [left] => 1
            [right] => 8
        )

    [1] => Array
        (
            [id] => 1
            [parent_id] => 
            [depth] => 0
            [left] => 2
            [right] => 3
        )

    [2] => Array
        (
            [id] => 4
            [parent_id] => 
            [depth] => 0
            [left] => 4
            [right] => 5
        )

    [3] => Array
        (
            [id] => 2
            [parent_id] => 
            [depth] => 0
            [left] => 6
            [right] => 7
        )
)

В моем контроллере у меня есть следующая функция для обработки:

public function reorder() {
    $list = isset($_POST['_list']) ? json_decode($_POST['_list'], true) : null;
    foreach ($list as $item) {
        if (!empty($item['id'])) {

            $category = $this->Categories->get($item['id']);

            if (!empty($category)) {
                empty($item['parent_id']) ? $category->parent_id = null : $category->parent_id = $item['parent_id'] ;
                $category->lft = $item['left'];
                $category->rght = $item['right'];

                $this->Categories->save($category);
            }
        }
    }
}

Когда я отлаживаю категории перед сохранением lft и rght, они установлены правильно, однако после сохранения lft и rght содержатся совершенно разные значения.

Я предполагаю, что, поскольку TreeBehavior реализован, функция сохранения выполняет некоторые проверки и сброс левого и правого на другие значения? В любом случае, чтобы пропустить это?

...