JQuery UI Saving Sortable List

Sé que esta pregunta ya se hizo antes, pero las soluciones no me funcionaron. Estoy tratando de guardar el nuevo orden de los artículos en la base de datos.

Lo he simplificado muy considerablemente, pero esta es la idea básica. Tengo un formulario con una lista ordenable incrustada en él.

  • Item
  • Item
  • Item
  • Item

Tengo JQuery y JQuery UI Loaded y el código The Following habilita la función de lista ordenable y publica los ID de los artículos y el nuevo orden de clasificación en un script php. la variable “editor” es una variable pública que está configurada en cargar, funciona bien. La ordenación funciona bien, pero el valor del nuevo orden que publican no parece cambiar cuando reordena la lista.

 //sorting feature $("#itemsort").live('hover', function() { $("#itemsort").sortable({ opacity:.5, update : function () { var neworder = $('#itemsort').sortable('serialize'); var inputs = serializePost('#itemlist'); $.post("core/actions.php",{ 'order': editor, 'inputs': inputs, 'neworder': neworder},function(){ alert("Order saved.", 1); }); } }); }); 

En actions.php …

  if(isset($_POST['order'])){ //set a variable for each post $batchid = $_POST['inputs']['itemid']; parse_str($_POST['neworder'], $neworder); //count the number of entries to be ordered $count = count($batchid); //use the count to create an incremental loop for each item to be updated. $i=0; while ($i <= $count) { $query ="UPDATE {$_POST['order']} SET order=$neworder[item][$i] WHERE id=$batchid[$i]"; ++$i; } } 

No estoy seguro de por qué el pedido que recibo para cada artículo no cambiará.

¿Algunas ideas?

-L

 $("#list").live('hover', function() { $("#list").sortable({ update : function () { var neworder = new Array(); $('#list li').each(function() { //get the id var id = $(this).attr("id"); //create an object var obj = {}; //insert the id into the object obj[] = id; //push the object into the array neworder.push(obj); }); $.post("pagewhereyouuselist.php",{'neworder': neworder},function(data){}); } }); }); 

Luego en su archivo PHP, o en este ejemplo “pagewhereyouuselist.php”

 $neworderarray = $_POST['neworder']; //loop through the list of ids and update your db foreach($neworderarray as $order=>$id){ //you prob jave a connection already i just added this as an example $con = mysql_connect("host","username","password"); if (!$con){ die('Could not connect: ' . mysql_error()); } mysql_select_db("my_db", $con); mysql_query("UPDATE table SET order = {$order} WHERE id = {$id}"); mysql_close($con); } 

eso debería hacerlo, no lo probé, ya que es una conexión de ejemplo. el guión real que estoy usando en realidad es más específico para mi progtwig, esta es una versión simplificada para mostrar el concepto

Prueba esto:

Tus campos de HTML

 
  • Item 1
  • Item 2
  • Item 3
  • Item 4

JS para enviar orden:

 $("#itemsort").live( 'hover', function() { $("#itemsort").sortable({ update: function () { var inputs = $('#itemlist').serialize(); $.post("./jq-ui-test.php", inputs, alert("Order saved.") ); } }); }); 

Orden de ahorro:

 if( isset( $_POST['itemid'] ) && is_array( $_POST['itemid'] ) ) { foreach( $_POST['itemid'] as $order => $item ) { $order = intval( $order ); $item_esc = mysql_real_escape_string( $item ); $sql_query = "UPDATE {$_POST['order']} SET order={$order} WHERE id = '{$item_esc}'"; } } 

Además, si desea que la orden de inicio comience desde 1 (no desde 0) cambie $order = intval( $order ); a $order = intval( $order ) + 1;