我有一个具有树行为的Post模型。 在每个帖子的视图中都有一个订单文本输入字段。 提交此字段后,我得到id =>订单价值。 所以现在我必须根据其顺序值moveUp或moveDown每个帖子来重新排序树。
示例(标题只是遵循排序顺序的示例):
在:
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
答案 0 :(得分:1)
您可以使用reorder
功能。点击此处 - http://book.cakephp.org/view/1355/reorder
答案 1 :(得分:1)
为了能够使用重新排序,我在数据库中添加了一个新的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