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されます。

