2012-07-02 3 views
0

Я использую jQuery sortable() для упорядочивания изображений в БД. HTML выглядит следующим образом.jQuery sortable - PHP

<h2>Revision 1</h2> 

<ul class='sortable'> 
<li class='sortPhotos' id='item_249745' > 
    <img src="../data/gallery/13387/images/album/1650519801.jpg"/> 
    <p>1650519801.jpg</p> 
</li> 
<li class='sortPhotos' id='item_249744' > 
    <img src="../data/gallery/13387/images/album/704633205.jpg"/> 
    <p>704633205.jpg</p> 
</li> 
</ul> 

<h3>Revision 2</h3> 

<ul class='sortable'> 
<li class='sortPhotos' id='item_518811' > 
    <img src="../data/gallery/13387/images/album/001.jpg"/> 
    <p>001.jpg</p> 
</li> 
<li class='sortPhotos' id='item_518812' > 
    <img src="../data/gallery/13387/images/album/003.jpg"/> 
    <p>003.jpg</p> 
</li 
</ul> 

JS

<script> 

    $(".sortable").sortable({stop:function(i) { 
      $.ajax({ 
       type: "GET", 
       url: "../albumUploader/queries/sort.php", 
       data: $(".sortable").sortable("serialize") 
      }); 
     }, 
     opacity:1.0 
    });  
</script> 

И, наконец, SQL

foreach($_GET['item'] as $key=>$value) { 

    mysql_query(" UPDATE galleryimage 
        SET sort = '{$key}' 
        WHERE id = '{$value}' 
        "); 
} 

Проблема с приведенного выше примера - первая редакция является единственным пересмотр, который на самом деле сортировки в БД. Другой вариант (ы) - нет. Это видно из мониторинга сети в расширении веб-разработчика Chrome, который оба списка отправляют в БД, но второй не пишет. Любые идеи по этому поводу?

+0

Мне нужно, чтобы выяснить, как дать уникальный идентификатор для каждого UL - это, кажется, сортируется только признавая первый и не .sortable, как класс – Bungdaddy

+0

Wait - оба списка отправляются на PHP-код или нет? Ваш ответ, кажется, подразумевает да, но ваш комментарий, похоже, не подразумевает. – Brilliand

ответ

0

Каждый сортируемый должен иметь свой собственный уникальный идентификатор. Я разрешил это:

ul id='sortable_" . $count ."' 
$count++; 

$(".revisionNum").each(
     function(e) { 
     num = e + 1; 
     $("#sortable_" + num).sortable(
      {stop:function(i) { 
       serial = $("#sortable_" + num).sortable("serialize"); 
       $.ajax({ 
        type: "GET", 
        url: "../albumUploader/queries/sort.php", 
        data: serial 
       }); 
      }, 
      opacity:1.0 
     });  
    }); 
0

Одним из решений было бы одновременно отправлять только один список на сервер. Это может быть сделано путем отправки данных из $(this), а не из $(".sortable"):

$(".sortable").sortable({stop:function(i) { 
     $.ajax({ 
      type: "GET", 
      url: "../albumUploader/queries/sort.php", 
      data: $(this).sortable("serialize") 
     }); 
    }, 
    opacity:1.0 
}); 
+0

Я полагаю, что я должен признать, что, несмотря на то, что подобные события являются стандартными для событий jQuery, я на самом деле не тестировал его с помощью этого конкретного плагина. – Brilliand