Jquery可排序并序列化到数据库

时间:2014-06-10 23:06:48

标签: jquery codeigniter serialization jquery-ui-sortable

关于这个主题有很多帖子,但都让我感到困惑。

项目正在保存到数据库,但我不知道如何将其发送到数据库中的右侧行。 我有一个where语句,它是WHERE songid =(序列化的id),但它只是将每个id列号复制到排序列号中。 (这样做有意义)

我的数据库行字段= = songid userid songname sort

每个用户ID都是唯一的,而且songid设置为自动增量。我想为每个用户的歌曲单独订购。现在我只是

songid = 1,sort = 1;

songid = 2,sort = 2

等等。

不确定该怎么做。请提出任何建议。

HTML

<div id="thesort"class="sortable">
<?php foreach ($query as $dataitem): ?>
<div class="row" id="theitem_<?=$dataitem['songid']?>" data-songid="<?=$dataitem['songid']?>" >
    <audio ontimeupdate='updateprogress<?=$dataitem['songid']?>()'id='<?=$dataitem['songid']?>'src='<?=base_url();?>/uploads/<?=$dataitem['songurl']?>'></audio>
    <div class="col-md-6">
        <button class='btn btn-primary' onclick="playaudio('<?=$dataitem['songid']?>')">
        <span class='glyphicon glyphicon-play'></span>
        </button>
        <button class='btn btn-primary' onclick="pauseaudio('<?=$dataitem['songid']?>')">
        <span class='glyphicon glyphicon-pause'></span>
        </button>
        <progress id='seekbar<?=$dataitem['songid']?>' class="progress-bar songprog"value='0' max='1'  role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"></progress>
    </div>
    <div class="col-md-2">
        <a href='' download='<?=$dataitem['songurl']?>'><h3><?=$dataitem['songname']?></h3></a>
    </div>
    <div class="col-md-2">
        <h5><?=$dataitem['songdesc']?></h5>
    </div>
    <div class="col-md-2">
        <button id="item_<?=$dataitem['songid']?>" onClick="delSong('<?=$dataitem['songid']?>')"class="deletebut">
        <span class="glyphicon glyphicon-remove"></span>
        </button>
    </div>
</div>

javascript

function thestop(){
    var serialized =  $(thesort).sortable('serialize',{key:'sort'});
    $.post('songshare/songpos',serialized);  
}
var thesort = $('.sortable');
   $(thesort).sortable({
    axis:'y',
    stop: thestop
});

控制器

function songpos(){
    $this->load->model('songshare/songmodel');
    $sort = $this->input->post('sort');
    $data = array(
        'sort'=>$sort,
    );
    $this->songmodel->Songpos($data);
}

模型

function Songpos($data){ 
foreach ($data as $dataitem){
//$this->db->where('songid', $dataitem);
//$this->db->update('songs', $data); 
    $this->db->update('songs', $data, array('songid' => $dataitem));
    }
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要保存排序顺序。您可以创建一系列项目:

var ids = new Array;
    $.each(inputs, function(i, pinput) {
        ids[i] = $(pinput).val();
    });

并更新表格:

public function save_order() {
    $pids = $this->input->post('pids');
    $parr = array();
    foreach ($pids as $key => $value) {
        $parr[] = array('id' => $value, 'weight' => ($key + 1));
    }
    $result = $this->songmodel->update_batch($parr, 'id');
    if ($result) {
        echo TRUE;
    } else {
        echo FALSE;
    }
    exit;
}

我用了#34;体重&#34;保存排序顺序的字段。