我尝试为我的数据表创建列,这些列是我在ajaxcall变量在服务器端处理的,但是我似乎找不到一个好的解决方案。
这是我的数据表代码:
$('.ajaxTable').each(function() {
let that = this;
$(that).DataTable({
processing: true,
serverSide: true,
ajax: {
type: "POST",
dataType: 'json',
url: 'ajaxcall.php',
data: function (params) {
var query = {
ajaxcall: 'getSelectDataTable',
controlName: $(that).attr("call"),
draw: params['draw'],
start: params['start'],
search: params['search']['value'],
columns: params['columns'],
order: params['order']
}
return query;
}
},
columns: [
{ "data": "column1" },
{ "data": "column2" },
{ "data": "column3" },
{ "data": "column4" },
{ "data": "aktionen" }
],
dom: 'Bfrtip',
buttons: [
'colvis',
{
extend: 'copy',
exportOptions: {
columns: "thead th:not(.noExport)"
}
},
{
extend: 'csv',
exportOptions: {
columns: "thead th:not(.noExport)"
}
},
{
extend: 'excel',
exportOptions: {
columns: "thead th:not(.noExport)"
}
},
{
extend: 'pdf',
exportOptions: {
columns: "thead th:not(.noExport)"
}
},
{
extend: 'print',
exportOptions: {
columns: "thead th:not(.noExport)"
},
customize: function ( win ) {
$(win.document.body)
.css( 'background-color', '#FFFFFF' )
.css( 'color', '#000000' );
$(win.document.body).find( 'table' )
.addClass( 'datatable_print' )
.css( 'font-size', 'inherit' );
}
}
],
fixedHeader: true,
lengthMenu: [[$(that).attr("length")], [$(that).attr("length")]],
language: {
"url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json",
buttons : {
colvis: 'Spalten',
copy: 'Kopieren',
copyTitle: 'In Zwischenablage kopieren',
copySuccess: {
_: '%d Datensätze kopiert',
1: 'Kopieren fehlgeschlagen'
},
print: 'Drucken'
}
}
})});
如您所见,我必须对“列”部分进行硬编码,但是我想使此特定位灵活,以便在我的Plattform上的多个表上使用.ajaxTable-Class而不用写每个硬编码。 对我来说,最佳实践似乎是我有一个PHP函数来生成Datatable并在此函数的Parameters中定义我要添加的列。我该如何实现?还是我暂时看不到他们的更好的方式?
谢谢。