CakePHP- Дерево Поведение пользовательских заказов - PullRequest
1 голос
/ 28 октября 2011

У меня есть модель Поста, в которой есть Поведение Дерева. В представлении для каждого поста есть поле ввода текста заказа. После отправки этих полей я получаю id => стоимость заказа. Так что теперь мне нужно переместить или переместить каждую запись в зависимости от значения ее порядка, чтобы изменить порядок дерева.

Пример (заголовки являются примерами, которые следуют порядку сортировки):

До:

Post1 - order:20
_Post1.2 - order:20
_Post1.1 - order:10
__Post1.1.1 - order:10
__Post1.1.3 - order:30
__Post1.1.2 - order:20
_Post1.3 - order:30
Post2 - order:10

После того, как:

Post2 - order:10
Post1 - order:20
_Post1.1 - order:10
__Post1.1.1 - order:10
__Post1.1.2 - order:20
__Post1.1.3 - order:30
_Post1.2 - order:20
_Post1.3 - order:30

Ответы [ 2 ]

1 голос
/ 29 октября 2011

Для возможности переупорядочения я добавил в базу данных новый столбец sort, в котором будет храниться заказ.Итак, теперь у меня есть функция

function _sortPosts($newSort){
foreach ($newSort AS $id => $value) {
if(is_numeric($value['sort'])){$this->Post->updateAll(array('Post.sort' => $value['sort']),array('Post.id' => $id));
} else {
$this->Session->setFlash(__('Non-numeric value given.', true),'default', array('class' => 'error'));
$this->redirect($this->referer());
}

}
foreach(array_keys($this->data['Post']) as $parent){
$this->Post->reorder(array('id' => $parent, 'field' => 'Post.sort', 'order' => 'ASC', 'verify' => true));
}
}

Но она выполняется очень медленно, если есть более 20-30 детей.Здесь я вставил пример запросов, сгенерированных из-за изменения порядка одного из родителей и двух детей: http://pastebin.com/e076Czg5

1 голос
/ 28 октября 2011

Вы можете использовать функцию reorder.Проверьте здесь - http://book.cakephp.org/view/1355/reorder

...