2012-11-23 5 views
0

그래서 약간 문제가 있습니다. 나는JQuery 드래그 앤 드롭 정렬 목록

표는 MySQL 데이터베이스에서 채워집니다 ... 드래그를 생성하고 내가이 작업이 대부분의 경우, 카테고리를 주문하는 사용자를 허용하도록되어 내 워드 프레스 플러그인 내에서 목록을 드롭 한 :

$results = $wpdb->get_results($sql); 

    foreach($results as $result) 
    { 
    ?> 
    <tr id="list_item_<?php echo $result->priority_order; ?>" class="list_item"> 
       <td> 
        <?php echo $result->name; ?> 
       </td> 
       <td> 
        <?php echo $result->priority_order; ?> 
       </td> 
      </tr> 
    <?php 
    } 

그리고 'jquery-ui-sortable'을 사용하여 테이블을 정렬 할 수 있습니다.

$('.list').sortable(
{ 
    items: '.list_item', 
    opacity: 0.6, 
    cursor: 'move', 
    axis: 'y', 
    update: function() 
    { 
     var order = $(this).sortable('serialize') + '&action=update_order'; 
     $.post(ajaxurl, order, function(response) 
     { 
      //alert(response); 
     }); 
    } 
}); 

여기

는 PHP가 새로운 순서로 데이터베이스 갱신하는 데 사용됩니다 :

function save_order() 
{ 
    global $wpdb; 

    $table_name = $wpdb->prefix . "categories"; 
    $sql = "SELECT * FROM ".$table_name." ORDER BY priority_order ASC"; 

    $results = $wpdb->get_results($sql); 
    $results = parseObjectToArray($results); 

    $new_order = $_POST["list_item"]; 

    $counter = 0; 
    foreach($new_order as $v) 
    { 
    if(isset($results[$v]["priority_order"])) 
    { 
     $update_sql = "UPDATE ".$table_name." SET priority_order='".$counter."' WHERE category_id='".$results[$v]["category_id"]."'"; 
     $wpdb->query($update_sql); 

     $counter++; 
    } 
    } 
    die(); 
} 
add_action('wp_ajax_update_order','save_order'); 

// Converts StdObject to regular array 
function parseObjectToArray($object) 
{ 
$array = array(); 

    foreach($object as $o) 
    { 
    if (is_object($o)) 
    { 
     $array[] = get_object_vars($o); 
    } 
    } 
    return $array; 
} 

여기에 목록을 드래그 할 수 및 목록을 업데이트하는 내 JQuery와있다


내 문제는 목록이 완벽하게 전나무 시간을 업데이트하는 동안 페이지가 있다고 가정하여 전송되는 다음 직렬화 된 배열입니다. 수동으로 새로 고치지 않았습니다. 이제 잘못 업데이트됩니다. 새 목록과 데이터베이스에서 새로 업데이트 된 목록이 더 이상 동기화되지 않기 때문입니다.

I 업데이트가 필요한 것을 일치하는 배열 인덱스를 사용하고 있지만, 초기 변경 후, 새 목록의 인덱스와 인덱스가 배열없이 혼자 경기에서오고 있기 때문입니다 ...

사람이 있습니까 어떤 아이디어가이 문제를 어떻게 해결할 수 있을까요? 나는 꽤 많이 둘러 보았고, 필자가 발견 한 코드의 대부분은 내 것과 유사하다. 그리고 눈에 띄는 차이점을 발견했다. 각 업데이트 후에 페이지를 새로 고쳐야합니까? 나는 하하, 자신을 다시 한번 대답을 발견

답변

0

...

단순히 카운터 I와 다음, 대신 내가 priority_id의 ORDER BY 각 범주 ID 및 사용 SQL을 보냈 pirority_order 필드에 훨씬에 집중했다 새로운 주문을 할 수 있습니다.

global $wpdb; 

$table_name = $wpdb->prefix . "categories"; 
$sql = "SELECT * FROM ".$table_name." ORDER BY priority_order ASC"; 

$results = $wpdb->get_results($sql); 
$results = parseObjectToArray($results); 

$new_order = $_POST["ebs_list_item"]; 

$counter = 0; 
foreach($new_order as $v) 
{ 
    $update_sql = "UPDATE ".$table_name." SET priority_order=".$counter." WHERE id=".$v; 
    $wpdb->query($update_sql); 

    $counter++; 
} 
die(); 

<tr id="list_item_<?php echo $result->id; ?>" class="list_item"> 
    <td> 
     <?php echo $result->name; ?> 
    </td> 
    <td> 
     <?php echo $result->priority_order; ?> 
    </td> 
</tr>