非常に多くのリストページがあり、すべてのデータテーブルを設定するための js ファイルは 1 つだけです。そのために、各リスト ページから aoColumns の値を、datatables ロジックが記述されている共通の js ファイルに送信しています。リストページの1つに次のような関数を書きました:
public function assignedToMeHideSort()
{
return array(
"{bSortable: false}", "null", "null", "{bSortable: false}", "null",
"null", "null", "null", "null", "null", "null", "null", "null", "null",
"null", "null", "null", "null", "{\"bSortable\": false}"
);
}
$aoColumn = assignedToMeHideSort();
echo '<input type="hidden" name="aoColumn" id="aoColumn" value="' . implode(",", $aoColumn) . '">';
次に、一般的な js ファイルで次のように記述しました。
if ($('#aoColumn').val()) {
var ao = [];
var aos = $('#aoColumn').val().split(',');
for (var i = 0; i < aos.length; i++) {
if (aos[i] == 'null') {
//no need for processing
ao.push('{ null }');
} else {
//remove {, } and whitespace, return array splitted by :
var s = aos[i].replace('{', '').replace('}', '').replace(' ', '').split(':');
//create object
var o = {};
//here you need to force a real boolean instead of "false"
o[s[0].toString()] = (s[1] == "false") ? false : true;
ao.push(o);
}
}
}
var oTable = $('#data-table').dataTable({
"sDom": 'CT<"clear">firtlip',
"oTableTools": {
"sSwfPath": basePath + "/js/extras/TableTools/media/swf/copy_csv_xls_pdf.swf",
"aButtons": [
{"sExtends": "csv", "sFileName": curpath + ".csv", "sButtonText": "Save to CSV", "mColumns": "visible"}
]
},
"aaSorting": [
[0, "desc"]
],
"bAutoWidth": false,
"aLengthMenu": [
[10, 25, 50, -1],
[10, 25, 50, "All"]
],
"iDisplayLength": 10,
"oLanguage": {
"sSearch": "Filter : "
},
"aoColumns": ao,
'sPaginationType': 'full_numbers'
});
しかし、リストページでは、すべての列幅が 100px と表示されています。それを変更したいのですが、列ごとに異なります。そのために、 withプロパティaoColumnDefs
の直後に追加しました。しかし、うまくいきません。この幅の問題を解決する方法を教えてください。aoColumns
sWidth
前もって感謝します。