DEV

jquery ui sortable で並び順を取得する(serialize)

参考:http://api.jqueryui.com/sortable/#method-serialize

ここで、item_1、item_2といった感じで連番ふるよといいましたが、どちらかというと並び替えの場合、並び替え対象でDBのIDで管理しないといけないと思いますので、item_idという感じにした方がよかったです。

cakePHPだと、下記のような感じにするといいのではないでしょうか。

item_<?php echo h($item['Item']['id'])?>

$(this).sortable(‘serialize’);で下記のようなデータが得られます。

item[]=2&amp;item[]=1

2と1がIDであれば、これをそのままAjaxでsortアクションなんかに渡します。 以下は例です。

function save_sort(sort_data){
$.ajax({
type:'post',
url: '<?php echo $this->Html->url(array( 'controller' => 'hogehoge', 'action' => 'sort'))?>',
data: sort_data,
dataType: 'html',
async: true,
success: function(data){
alert('sort ok!');
}
});
}
$(function(){
$('#sortable').sortable({
cursor: 'move',
opacity: 0.7,
placeholder: "placeholder",
forcePlaceholderSize: true,
cancel:false,
handle:'.move_btn',
update: function(event, ui){
save_sort($(this).sortable('serialize'));
}
});
});

これでhogehogeコントローラーのsortアクションにアクセスしてくれて、$this->request->dataの中にソートデータが下記のように入っております。Formのシリアライズと一緒です。便利です。

スクリーンショット 2014-06-25 0.49.26