Je m'auto-réponds après deux ans, le temps et la tête dure sont là :P , donc le souci c'est la serialisation de jquery.form.js en ajaxsubmit qui ne prend plus l'input contenu dans un Tr après un sortable, (un souci avec disableSelection ou autre je ne sais pas),l'input est désactivé après chaque sortable et donc chaque input disparaît après chaque déplacement de TR ;ma solution si on veut garder un tableau avec un Tr>input et utiliser le sortable sans pour autant faire des variables Js de mise en cache temporaire ...
Le view
<tbody id="tbodyProjects">
<?php echo $this->Form->create('Project',array('url'=>array('controller'=>'projects','action'=>'order'))); ?>
<?php foreach ($projects as $k =>$d): ?>
<tr>
<input type="hidden" value="<?php echo $d'Project']'order']; ?>" name="data[Project]<?php echo $d'Project']'id']; ?>]">
Le code js avec le sortable dans la view ( le helper est pour garder la largeur dimension cellule lors du sortable )
on sérialise tous les inputs après l'utilsation de sortable on mets dans une variable data et on l'envoie normalement en ajax tout bête
$('#tbodyProjects').sortable({
items: '> tr ',
update: function(e,ui) {
i = 0;
$('#tbodyProjects>tr').each(function(){
i++;
$(this).find('input').val(i);
});
data = $('#tbodyProjects>tr>input').fieldSerialize();
$.ajax({
url: "<?php echo $this->Html->url(array('controller'=>'projects','action'=>'order')); ?>",
data:data
});
},
helper: function(e, tr)
{
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index)
{
// Set helper cell sizes to match the original sizes
$(this).width($originals.eq(index).width());
});
return $helper;
}
}).disableSelection();
Dans le controller :
function admin_order() {
if($this->RequestHandler->isAjax()) {
$this->autoRender = false;
if(!empty($this->request->query 'data' ]'Project'])){
foreach($this->request->query 'data' ]'Project'] as $k=>$v){
$this->Project->id = $k;
$this->Project->saveField('order',$v);
}
}
}
return false;
}
Bien avoir le component request handler en appel
public $components = array('RequestHandler');