Ext.treeで並べ替え

Ext.Treeで親子関係を持った並べ替えをして保存してみます。
JSONデータによるツリーの生成は省きます。
WebアプリにはcakePHPを使用しました。
groupテーブルには、
int id  (一意id)
int groups_id  (親id)
int ordr  (並び順)
を持たせます。treeビヘイビアは使用しません。


root = new Ext.tree.AsyncTreeNode()
にノードがぶら下がり、
nodes.eachChild(function(child){});
で直接の子childに対してループ処理ができます。
child.hasChildNodes()
でさらにその子が存在するか判定できます。
child.idで自分のIDが、
child.parentNode.idで親IDが得られます。
並び順はループ中のindexで得ます。

データは、
1:root:0,3:1:0,2:root:1,
と,と:で区切って一時配列にできる文字列としておいて、
jQueryのAjaxで送信しています。
受け側は、

	function reorder() {
		if(!empty($this->params['form']['reorder'])) {
			$postreorders = explode(',',$this->params['form']['reorder']);//配列に分割
			foreach($postreorders as $pro) {//配列をループ
				if(!empty($pro)) {//値があれば
					$reorder = explode(':',$pro);//配列に分割
					if(count($reorder) == 3) {//蛇足
						$data = array();//data初期化
						$data['id'] = $reorder[0];//id指定
						if($reorder[1] == 'root') {
							$data['group_id'] = null;//第一階層なら親なし
						} else {
							$data['group_id'] = $reorder[1];//親id
						}
						$data['ordr'] = $reorder[2];//並び順
						$this->Group->save($data);//update
					}
				}
			}
		}
		exit();
	}

cakePHPはデータを配列で渡せばSQLを自動生成してくれます、
$data['id']があればUPDATEされ、なければINSERTされます。