[フロントエンド] Jquery UI +PHP でテーブルドラッグソートを実装

目的: jquery ui ライブラリを使用して、テーブルのドラッグ アンド ドロップの並べ替えを実装し、並べ替えをデータベースに保存します。

効果は以下の通りです

1. 準備:

1. jquery ui ライブラリをダウンロードします。オンライン パスを直接参照できます。

<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/主題/base/jquery-ui.css">
<script src="https://code.jquery. com/ui/1.12.1/jquery-ui.min.js"></script>

2. フロントエンドにはlayuiを使用し、バックエンドにはPHPを使用します。

2. 使用する

論理的な説明

1. jqueryuiライブラリの導入

2. js コードは、jqueryui の update() メソッドを使用して、ドラッグされた項目 ID と現在のページ番号を取得し、バックグラウンドに送信します。

3. バックエンドでのページングに thinkphp の paginate を使用しているため、最初のページ以外のドラッグ アンド ドロップのシーケンスを前後に接続できるようにするために、ページ番号を判断します。page=0 または page=1 の場合、両方とも page=1、page が 1 より大きい場合、page=page-1 とし、自分のページ番号から 1 を減算します。

4. 連続するシリアル番号を生成します。各ページに表示される項目数の pageSize を設定し (ページング中の項目数と一致するように)、ステップ 3 で計算したページに pageSize を乗算し、1 を加算します (例: ページ 1)。 (page*pageSize )+1 => (0*15)+1=1、(0*15)+2=2、... ページ 2: (1*15)+1=16、(1*15) )+2 =17、その目的は、ページング中にソート エントリの新しいシーケンス番号を接続できるようにすることであり、ページをめくるたびに 1 から開始する必要がなくなります (最初のページ: 1、2、 3、…15、2ページ目:16、17…30、3ページ目:31、32…)

5. すべてのエントリを走査し、並べ替えに基づいて走査されたインデックス値 $key を追加し、各エントリの新しいシリアル番号を生成し、最後にデータベースを更新します。

フロントエンドコード

<table class="layui-table box_table" lay-skin="nob" lay-size="lg" style=" text-align: center;" id="sort">
	<thead>
		<tr>
			<td>课件名</td>
			<td>课件类型</td>
			<td>发送班级</td>
		</tr>
	</thead>
	<tbody>
        <tr>
            <td>内容...</td>
            <td>内容...</td>
            <td>内容...</td>
        </tr>
    </tbody>
</table>

JSコード

function GetQueryString(name)
	{
	     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
	     var r = window.location.search.substr(1).match(reg);
	     if(r!=null)return  unescape(r[2]); return null;
	}
	// 拖拽排序
	$(document).ready(function () {
		$("#sort tbody").sortable({
			update:function () {
				var idArr = [];
	            $("input[name='id']").each(function() {		//遍历每一行的ID值
	                idArr.push($(this).val());		//把拍完序的数据ID依次推入数组
	            })
	            var page = GetQueryString('page')
	            console.log(idArr)
	            console.log(page)
	            $.ajax({
	                type: "POST",
	                dataType: "json",
	                url: "upsort",
	                data:{idArr:idArr,page:page},
	                success:function (res) {
	                	console.log(res)
	                	layer.msg(res.message, { icon:1, time: 1000 }, function(){
							window.location.reload()
						});
	                },
	                error:function (request) {
	                    console.log(request);
	                }
	            });
	        }
		})
	})

注:テーブルの外側に id="sort" を追加すると、セレクターはテーブル ソートの下の tbody を選択する必要があります。

バックエンドコントローラー

public function upsort()
	{
		if (request()->isPost()) {

            $data = input('post.');
            $page=$data['page'] ? $data['page']-1 : 0;
            $res = model('Kejian')->upsort($data['idArr'],$page);
            
            if ($res) {
                return apiResponse('200','操作成功');
            }else{
                return apiResponse('110','操作失败');
            }
        }else{
            return apiResponse('110','非法请求');
        }
	}

 バックエンドモデルモデル

public function upsort($idArr,$page)
	{
        $pageSize = 15;     //每页显示条数,与列表分页保持一致
        $sort = ($page * $pageSize)+1;
        Db::startTrans();
        try {
            foreach ($idArr as $key => $value) {
                Db::table('kejian')->update(['id'=>$value,'sort'=>$sort+$key]);
            }
            Db::commit();
            return true;
        } catch (Exception $e) {
            Db::rollback();
            return false;
        }
	}

おすすめ

転載: blog.csdn.net/qq_25285531/article/details/134287545