2012-11-23 92 views
0

所以我有一個問題。我創建了一個阻力,是應該允許用戶訂購的類別,大部分我有這方面的工作我的WordPress插件內掉落列表...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'來允許表可排序。

這裏是我的JQuery製作列表拖放能夠和更新列表:

$('.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; 
} 

我的問題是,雖然列表完全更新第一次,下一個發送假設頁面的序列化數組沒有被手動刷新,現在更新不正確。這是因爲新列表和來自數據庫的新更新列表不再同步。

這是因爲我使用數組索引來匹配什麼需要更新,但最初的變化後,新的列表索引和索引從陣列中沒有獨來獨往的比賽來了...

沒有人有任何想法如何我可以解決這個問題?我周圍環顧了很多,我發現的大部分代碼與我的代碼類似,我不能看到任何可能導致我的破解的明顯差異。我需要在每次更新後刷新頁面嗎?

回答

0

,我發現自己的答案再次,哈哈......

我被集中到多的pirority_order領域,而不是我發送的每一個類別標識和使用SQL來ORDER BY priority_id,然後只需用一個計數器我可以分配一個新的訂單。

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>