This is my Server side code and its response
$response = array(
"draw" => intval($draw),
"iTotalRecords" => $records,
"iTotalDisplayRecords" => $totalRecords,
"aaData" => $data_arr,
"dayFirstHeadingdynamic" => $monthallDates
);
return response()->json($response);
{
"draw": 1,
"iTotalRecords": 11,
"iTotalDisplayRecords": 11,
"aaData": [
{
"Recruiter": "person name",
"Day0": 0,
"Day1": 0,
"Day2": 0,
"Day3": 0,
"Day4": 0,
"Day5": 0,
"Day6": 0,
"Day7": 0,
"Day8": 0,
"Day9": 0,
"Day10": 0,
"Day11": 0,
"Day12": 0,
"Day13": 0,
"Day14": 0,
"Day15": 0,
"Day16": 0,
"Day17": 0,
"Day18": 0,
"Day19": 0,
"Day20": 0,
"Day21": 0,
"Day22": 0,
"Day23": 0,
"Day24": 0,
"Day25": 0,
"Day26": 0,
"Day27": 0,
"Day28": 0,
"Day29": 0,
"Day30": 0,
"Total": 0
}
],
"dayFirstHeadingdynamic": [
"2023-12-01",
"2023-12-02",
"2023-12-03",
"2023-12-04",
"2023-12-05",
"2023-12-06",
"2023-12-07",
"2023-12-08",
"2023-12-09",
"2023-12-10",
"2023-12-11",
"2023-12-12",
"2023-12-13",
"2023-12-14",
"2023-12-15",
"2023-12-16",
"2023-12-17",
"2023-12-18",
"2023-12-19",
"2023-12-20",
"2023-12-21",
"2023-12-22",
"2023-12-23",
"2023-12-24",
"2023-12-25",
"2023-12-26",
"2023-12-27",
"2023-12-28",
"2023-12-29",
"2023-12-30",
"2023-12-31"
]
}
I want to generate dynamic column by looping “dayFirstHeadingdynamic” => $monthallDates from server side code $response array, because dates in “dayFirstHeadingdynamic” response can be increase and decrease, below is my client side code
$(document).ready(function(){
var month_year = "";
var duration_date_from = "";
var duration_date_to = "";
var sortByRecruiterIncharge = [];
var customSearch = "";
rolesList = $('#day_qualifiedleads_report').DataTable({
"deferRender": true,
"processing": true,
"serverSide": true,
"searching": false,
"ordering" : false,
lengthMenu: [20, 50, 100, 200, 500],
ajax: {
url: "<?php echo url('qualified-leads-reporting-dayWise-Filter');?>",
data: function (data) {
$('input[type="checkbox"]').click(function(){
var status = $(this).val();
var title = $(this).closest('label').attr('title');
if(title === "sortByRecruiterIncharge"){
if(status === "All"){
if($(this).prop('checked')){
$('.btn-group.show input[type="checkbox"]').prop('checked', true);
$('.btn-group.show input[type="checkbox"]').each(function(){
sortByRecruiterIncharge.push($(this).val());
});
}else{
$('.btn-group.show input[type="checkbox"]').prop('checked', false);
sortByRecruiterIncharge = [];
}
}else{
if($(this).prop('checked')){
sortByRecruiterIncharge.push(status);
}else{
sortByRecruiterIncharge = sortByRecruiterIncharge.filter(function (value) {
return value !== status;
});
}
sortByRecruiterIncharge = removeDuplicatesFromArray(sortByRecruiterIncharge);
}
}
});
function removeDuplicatesFromArray(array){
return array.filter((value, index) => array.indexOf(value) === index);
}
data.month_yearoption = month_year;
data.durationdatefrom = duration_date_from;
data.durationdateto = duration_date_to;
data.sortByRecruiterIncharge = sortByRecruiterIncharge;
data.customSearch = customSearch;
}
},
"columns": [
{ data: 'Recruiter' },
<?php for($i=0; $i<sizeof($monthallDates); $i++){?>
{ data: '<?php echo "Day$i";?>' },
<?php } ?>
{ data: 'Total' }
],
select: {
style: 'multi'
},
});
$('#month_year').change(function () {
month_year = $(this).val();
reloadTable('month_year',month_year)
});
$('#duration_date_from').change(function () {
duration_date_from = $(this).val();
reloadTable('duration_date_from',duration_date_from)
});
$('#duration_date_to').change(function () {
duration_date_to = $(this).val();
reloadTable('duration_date_to',duration_date_to)
});
$('#sortByRecruiterIncharge').change(function () {
rolesList.draw();
reloadTable('sortByRecruiterIncharge',sortByRecruiterIncharge)
});
$('#customSearch').keyup(function () {
customSearch = $(this).val();
reloadTable('customSearch',customSearch)
});
function reloadTable(field_name, value){
var month_year = $("#month_year").val();
var dateArray = month_year.split('-');
var year = dateArray[0];
var month = dateArray[1];
var durationdateTo = $("#duration_date_to").val();
var durationdateFrom = $("#duration_date_from").val();
$('#day_qualifiedleads_report').DataTable().clear();
$('#day_qualifiedleads_report').DataTable().destroy();
$('#day_qualifiedleads_report').DataTable({
"deferRender": true,
"processing": true,
"serverSide": true,
"searching": false,
"ordering" : false,
lengthMenu: [20, 50, 100, 200, 500],
"columnDefs": [
{ "orderable": false, "targets": "_all" }
],
ajax: {
url: "<?php echo url('qualified-leads-reporting-dayWise-Filter');?>",
data: function (data) {
data.month_yearoption = month_year;
data.durationdatefrom = duration_date_from;
data.durationdateto = duration_date_to;
data.sortByRecruiterIncharge = sortByRecruiterIncharge;
data.customSearch = customSearch;
}
},
Instead of this columns code, I want to generate column dynamically as per response of server side code.
"columns": [
{ data: 'Recruiter' },
<?php for($i=0; $i<sizeof($monthallDates); $i++){?>
{ data: '<?php echo "Day$i";?>' },
<?php } ?>
{ data: 'Total' }
],
"initComplete": function (settings, json) {
if (month_year != null || durationdateTo!='' || durationdateFrom!='') {
$("#tablerowdaywise2").empty();
var dayFirstHeadingdynamic = json.dayFirstHeadingdynamic;
$("#tablerowdaywise2").append("<th>Recruiters</th>");
for (var i = 0; i < dayFirstHeadingdynamic.length; i++) {
$("#tablerowdaywise2").append("<th>" + dayFirstHeadingdynamic[i] + "</th>");
}
$("#tablerowdaywise2").append("<th>Total</th>");
}
},
select: {
style: 'multi'
},
});
}
});
Since 3 days I am stuck up with this issue, In client side code I have tried so many solution to get desired result but unable, In function reloadTable(field_name, value) I have tried to change
"columns": [
{ data: 'Recruiter' },
<?php for($i=0; $i<sizeof($monthallDates); $i++){?>
{ data: '<?php echo "Day$i";?>' },
<?php } ?>
{ data: 'Total' }
],
to this, but unable to get desires result
"columns": (function (json) {
var dynamicColumns = [];
var columnsFromServer = json.dayFirstHeadingdynamic;
for (var i = 0; i < columnsFromServer.length; i++) {
dynamicColumns.push({ data: columnsFromServer[i] });
}
return dynamicColumns;
})(),
I have tried below code also, but still unable to get desired result.
"columns": function (settings, json) {
var dayFirstHeadingdynamic = json.dayFirstHeadingdynamic;
var dynamicColumns = [
{ data: 'Recruiter' },
];
for (var i = 0; i < dayFirstHeadingdynamic.length; i++) {
dynamicColumns.push({ data: '<?php echo "Day$i";?>' });
}
dynamicColumns.push({ data: 'Total' });
return dynamicColumns;
},