这很有趣,但这是 Cake php 中未记录的部分。文档说:树的顶部元素需要将 parent_id 设置为“null”。但是当您在编辑时保存元素时,重新排序不起作用,因为重新排序寻找孩子时有一个有趣的条件:
if ($id === null && $Model->id) {
$id = $Model->id;
} elseif (!$id) {
$id = null;
}
在 TreeBehavior 线 300 周围。
所以如果你用 id=>null 调用 reorder 并且你有一个 $Model->id ,那么实际的树项将只被重新排序。这是错误的,我想重新排序我的整个树,因为我已经更改了顶级类别项目的订单字段!我认为这是一种错误。
您必须将 id=>'' 设置为空,然后整个树将被重新排序。这就是你想要的。当您编辑顶部树项目并想要重新排序时,您必须使用 id=>'' 调用重新排序
if(!empty($this->data['WebshopCategory']['parent_id'])){
$this->reorder ( array('id' => $this->data['WebshopCategory']['parent_id'], 'field' => 'ordered', 'order' => 'ASC', 'verify' => true) );
}else{
$this->reorder ( array('id'=>'', 'field' => 'ordered', 'order' => 'ASC', 'verify' => true) );
}
它将重新排序整个树。注意:有很多树项目保存会变慢,所以你必须检查你的订单字段是否被更改。