jquery sortableを使用しているときに、画像のリストの順序をデータベースに保存しようとしています。私は非常に近いと感じていますが、最終的な詳細に頭を悩ませることはできません. CI 2.1.3 と jquery-ui 1.10.3 を使用しています。
私は動的に生成された画像付きのリストを持っています:
<ul id="order">
<li id="item-1"><img src="abc.jpg" /></li>
<li id="item-2"><img src="def.jpg" /></li>
<li id="item-3"><img src="ghi.jpg" /></li>
</ul>
そして、次の Jquery:
<script>
$(document).ready(function() {
$( "#order" ).sortable({
opacity: 0.6,
cursor: 'move',
update: function(event, ui){
var order = $(this).sortable("serialize");
console.log(order);
$.ajax({
url: "http://localhost/gridrobin/home/save_order",
type: 'POST',
data: order,
success: function (data) {
$("#test").html(data);
}
});
}
});
});
</script>
これは正常に機能し、リストを並べ替えることができます。次に、新しい注文をデータベースに保存します。ajaxポストをコントローラーに送信すると、それが届きます。var_dump で確認しました。
//var_dump($_POST);
$items = $this->input->post('item');
$total_items = count($this->input->post('item'));
echo '<h3>Debugging</h3>';
echo "<p>Total items sent: $total_items</p>";
$this->rd_model->update_order($total_items, $items);
次に、このデータをモデルに送信します。
for($item = 0; $item < $total_items; $item++ )
{
$data = array(
'id' => $items[$item],
'order' => $order = $item
);
$this->db->where('id', $data['id']);
$this->db->update('portfolio_items', $data);
echo '<br />'.$this->db->last_query();
}
そして、デバッグのために最後の db-query をエコーアウトします。
アイテム 1 とアイテム 2 を切り替えると、500 内部エラーが発生します。それらを元に戻すと、最後に実行されたクエリのエコーを受け取りますが、これは問題ないようです。
UPDATE `portfolio_items` SET `order` = 1 WHERE `id` = '1'
UPDATE `portfolio_items` SET `order` = 2 WHERE `id` = '2'
UPDATE `portfolio_items` SET `order` = 3 WHERE `id` = '3'
リストが元の状態に戻されたときにデータベースが更新される理由はよくわかりませんが、それ以外の場合はそうではありません。
更新 同じ問題を抱えている人にとって、sakibmoonの回答は私を大いに助けてくれましたが、主な問題は重複エントリエラーでした.どうやら注文テーブルを一意のインデックスとして設定していたからです...