私は Datatables.js を使用しており、PHP ファイルから JSON をテーブルに入力しています。私の現在の設定はこれです:
PHPファイルがJSONを生成 > JSファイルが前のPHPファイルへのリンクでテーブルを初期化 > PHPファイルがグラフを表示 (HTML付き。PHPなのでヘッダー/フッターを追加できます)。
これに関する問題は、30 個のグラフがあることです。JSON 用の 30 個の PHP ファイル + 初期化用の 30 個の JS ファイル、およびグラフ表示用の 30 個の追加の PHP ファイル。さて、これはすでに途方もない量のファイルです (私の意見では) が、さらにテーブルを追加する必要があります。
今あるテーブルのそれぞれに、同じ行の別の列の値を URL に渡すリンクを含む新しい列を作成します。たとえば、Datatable の列の 1 つで、値は 1983 です。他の列のリンクは になります/query.php?value=1983
。
これでやりたかったことは、この変数を JSON を生成する PHP ファイルに渡し、変数を使用してクエリを変更できるようにすることです。これはPHPコードになります
<?php
$myServer = "server";
$myDB = "database";
$conn = sqlsrv_connect ($myServer, array('Database'=>$myDB));
$value = $_GET['value'];
$sql ="SELECT year, value
FROM database.dbo.table
WHERE year = $value";
$data = sqlsrv_query ($conn, $sql);
$result = array();
do {
while ($row = sqlsrv_fetch_array ($data, SQLSRV_FETCH_ASSOC)) {
$result[] = $row;
}
} while (sqlsrv_next_result($data));
$json = json_encode ($result);
sqlsrv_free_stmt ($data);
sqlsrv_close ($conn);
?>
これにより、JSON が正しく生成されます。ただし、ユーザーがテーブル内のリンクをクリックすると、新しいテーブルが含まれる新しいページに移動したいと考えています。ただし、私のやり方では、リンクは生成された JSON に移動します。したがって、私の解決策は、JSON を生成する PHP とテーブルを表示する PHP ファイルをマージすることです。
<?php //Insert the code I posted above ?>
<!DOCTYPE html>
<html>
<head>
<!-- Included files, title, etc... -->
</head>
<body>
<?php include '../common/header.inc' ?>
<div class="container">
<table id="chart" style="clear: both">
<thead>
</thead>
<tbody>
<tr>
<td colspan="3" class="dataTables_empty">There doesn't seem to be anything here!</td>
</tr>
</tbody>
</table>
</div>
<?php include '../common/footer.inc'?>
<script src="/js/main.js"></script>
<script src="table.js"></script> <!-- This is the Datatable initialization -->
</body>
</html>
初期化は次のようになります
$(document).ready(function () {
var header = [ // This puts the data in the right column
{ "sTitle": "Year", "mData": "label", "sClass": "center" },
{ "sTitle": "Length", "mData": "value", "sClass": "center" }
]
var oTable = $('#chart').dataTable({
"bProcessing": true,
"sPaginationType": "full_numbers",
"sAjaxSource": "query.php", // Loads the JSON script
"sAjaxDataProp": "",
"aoColumns": header,
"sDom": 'T<"clear">Rlfrtip',
"oTableTools": {
"sSwfPath": "/media/swf/copy_csv_xls_pdf.swf",
"sRowSelect": "multi",
"aButtons": ["select_all", "select_none",
{
"sExtends": "collection",
"sButtonText": "Export Selected Rows",
"aButtons": [
{"sExtends": "copy", "bSelectedOnly": true, "mColumns": [0, 1] },
{ "sExtends": "csv", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
{ "sExtends": "xls", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
{ "sExtends": "pdf", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
]
},
{ "sExtends": "print", "sButtonText": "Print View" }
]
}
});
});
これに関する問題は、初期化が JSONとその下の HTML コードを読み取っていることです。
基本的に私が求めているのは、JSONだけを変数に保存して、JSコードでJUST THE JSONにリンクできる方法はありますか? これは可能ですか?これを行うより良い方法はありますか?(私はそれについてあまり知らないので、クレイジーなPHPスクリプトは必要ありません)。
解決策:これはジョンの提案後の私のコードです。に変更sAjaxSource
する必要もありましたaaData
。しかし、今はうまくいきます!
<?php
$myServer = "server";
$myDB = "database";
$conn = sqlsrv_connect ($myServer, array('Database'=>$myDB));
$value = $_GET['value'];
$sql ="SELECT year, value
FROM database.dbo.table
WHERE year = $value";
$data = sqlsrv_query ($conn, $sql);
$result = array();
do {
while ($row = sqlsrv_fetch_array ($data, SQLSRV_FETCH_ASSOC)) {
$result[] = $row;
}
} while (sqlsrv_next_result($data));
$json = json_encode ($result);
sqlsrv_free_stmt ($data);
sqlsrv_close ($conn);
?>
<!DOCTYPE html>
<html>
<head>
<!-- Included files, title, etc... -->
</head>
<body>
<?php include '../common/header.inc' ?>
<div class="container">
<table id="chart" style="clear: both">
<thead>
</thead>
<tbody>
<tr>
<td colspan="3" class="dataTables_empty">There doesn't seem to be anything here!</td>
</tr>
</tbody>
</table>
</div>
<?php include '../common/footer.inc'?>
<script src="/js/main.js"></script>
<script type="text/javacript">
$(document).ready(function () {
var json = <?php echo $json ?>;
var header = [ // This puts the data in the right column
{ "sTitle": "Year", "mData": "label", "sClass": "center" },
{ "sTitle": "Length", "mData": "value", "sClass": "center" }
]
var oTable = $('#chart').dataTable({
"bProcessing": true,
"sPaginationType": "full_numbers",
"aaData": json, // Loads the JSON script
"sAjaxDataProp": "",
"aoColumns": header,
"sDom": 'T<"clear">Rlfrtip',
"oTableTools": {
"sSwfPath": "/media/swf/copy_csv_xls_pdf.swf",
"sRowSelect": "multi",
"aButtons": ["select_all", "select_none",
{
"sExtends": "collection",
"sButtonText": "Export Selected Rows",
"aButtons": [
{"sExtends": "copy", "bSelectedOnly": true, "mColumns": [0, 1] },
{ "sExtends": "csv", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
{ "sExtends": "xls", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
{ "sExtends": "pdf", "bSelectedOnly": true, "mColumns": [0, 1], "bFooter": false },
]
},
{ "sExtends": "print", "sButtonText": "Print View" }
]
}
});
});
</script>
</body>
</html>