Tabulatorのテーブルのデータとして、今まで大容量、多いレコードのデータを読み込む必要がなかった為、Ajaxでリクエストして受信したデータを一旦ローカルの配列にして表示させてましたが、
この度、大量のデータでページ毎に読み込む必要があって試してみました。Tabulatorのドキュメントの通りにしてます。
詳しくはこちら
< コード例 >
Javascriptクライアント
// ++ Tabulator ++ //
let table = new Tabulator('#table_files', {
columns: COLUMNS,
// ロード時既定ソート列 リクエストパラメータはsortでMapのList //
initialSort: [
{column: "NM_FILE", dir: "asc"}, //sort by this first
//{column:"TM_UPDATE", dir:"desc"}//then sort by this second
],
// ソートモードはサーバー側 //
sortMode: "remote",
ajaxURL: url, //ajax URL
// AJaxのリクエストパラメータ //
ajaxParams: {
years: years, folders: folders, exts: exts, fnm: fnm, isin: isin,
ischart: isChartShow ? "1" : "0"
},
ajaxConfig: "POST",
index: "id",
ajaxRequesting: function (url, params) {
return true
},
// == レスポンスの処理 == //
// dataのキーを返す応答 + jqGridのuserDataの処理 //
ajaxResponse: function (url, params, response) {
//url - the URL of the request
//params - the parameters passed with the request
//response - the JSON object returned in the body of the response.
console.log(response)
// === ここにテーブル以外の処理を入れる === //
return response
},
// ==== 省略 ==== //
})
PHPサーバー
データ配列のキーはTabulatorがデフォルトで使う “data”にします。
レスポンスにTabulatorがデフォルトで使う “last_page” を加えます
<?php
// == リクエストパラメータ == //
// Tabulatorが送るページインデックスとレコード数 //
// ページと行数 //
$page = $_POST["page"] ? $_POST["page"] : $_GET["page"];
$size = $_POST["size"] ? $_POST["size"] : $_GET["size"];
// Tabulatorが送るソート列と方向 //
// ソート //
$sorts = $_POST["sort"] ? $_POST["sort"] : $_GET["sort"];
$sort_column = $sorts[0]["field"];
$sort_order = $sorts[0]["dir"];
// レスポンス配列 //
$resp = array(
"data" => $response_array_limited,
"sql" => $sql_files, // 実行SQL
"last_page" => $last_page, // <== Tabulatorが使うデフォルトページ数
"totalcount" => $totalcount, // 合計レコード数
"tmcost" => $entm - $sttm,
"total_file_size" => $total_file_size,
"sorts" => $sorts
);
echo json_encode($resp, JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES + JSON_NUMERIC_CHECK + JSON_UNESCAPED_LINE_TERMINATORS);
<?php
// SQL ソートとページング部分 //
ORDER BY
##SORT_COLUMN## ##SORT_ORDER##, NM_FOLDER ASC, NM_FILE ASC
LIMIT :STARTIDX, :PAGESIZE
// ソートはSQL文を置換 //
$sql_files = str_replace("##SORT_COLUMN##", $sort_column, $sql_files);
$sql_files = str_replace("##SORT_ORDER##", $sort_order, $sql_files);
// ページングはパラメータを渡す //
// ページング用 //
$startidx = ($page - 1) * $size;
$endidx = $startidx + $size - 1;
$last_page = (int) ($totalcount / $size) + 1;
// 明細 パラメータセット 実行 //
$stmt = $dbh->prepare($sql_files);
$stmt->bindvalue(':STARTIDX', $param_startidx, PDO::PARAM_INT);
$stmt->bindvalue(':PAGESIZE', $param_size, PDO::PARAM_INT);
$stmt->execute();
コメントを投稿するにはログインしてください。