#php #ajax #codeigniter #datatables
#php #ajax #codeigniter #таблицы данных
Вопрос:
У меня небольшая проблема с моим кодом.
У меня есть код для отображения данных в таблицах данных, и в моем первом столбце я хочу показать флажок select. Мои таблицы данных были созданы вызовом ajax и контроллером в Codeigniter. Но когда я загружаю код, флажок не отображается, но каждый другой столбец может отображаться.
Это мой код
Мой контроллер
function data_schedule_emp()
{
$draw = intval($this->input->get("draw"));
$start = intval($this->input->get("start"));
$length = intval($this->input->get("length"));
$year = $this->input->post("year");
$month = $this->input->post("month");
$dept = $this->input->post("dept");
$pos = $this->input->post("pos");
$date_slct = $year.'-'.$month.'-';
$shifts = $this->m_general->get_data('tb_shift')->result();
$rows = $this->m_employee->list_schedule_emp($date_slct)->result();
if($dept=='99'){
if($pos=='ALL'){
$pin_emp = $this->m_employee->get_detail_emp()->result();
}else{
$pin_emp = $this->m_employee->get_detail_emp($pos)->result();
}
}else{
if($pos=='ALL'){
$pin_emp = $this->m_employee->get_detail_emp($dept)->result();
}else{
$pin_emp = $this->m_employee->get_detail_emp($dept,$pos)->result();
}
}
$total_days = tglakhir($year,$month);
$data = array();
$no = 1;
$all_data = array();
$array_pin = array();
$row = array();
$date = array();
foreach ($rows as $row) {
// this may seem convoluted, take your time to understand
$people[$row->date][$row->id_nip] = $row;
}
foreach($pin_emp AS $q)
{
$array_pin[]=$q->emp_pin;
$details[$q->emp_pin] = $q;
}
foreach($shifts AS $shift_e){
$array_shift[$shift_e->id_shift] = $shift_e;
}
for($m=1; $m <= $total_days; $m ){
if($m<10){
$m = '0'.$m;
}else{
$m = $m;
}
$dates[]=$m;
}
foreach ($array_pin AS $pin){
$x=$bg=$n_shift='';
$date_range = array();
$n_shift = $details[$pin]->emp_shift;
foreach ($dates as $date) {
$x_shift = $n_shift;
$full_date = $year.'-'.$month.'-'.$date;
$day = date('D', strtotime($full_date));
if(($n_shift==1) amp;amp; ($day=='Fri')){
$x_shift=2;
}if(($day == 'Sun') OR ($day == 'Sat')){
$x_shift=13;
}
$bg = $array_shift[$x_shift]->background;
$label = $array_shift[$x_shift]->code_shift;
$note = $array_shift[$x_shift]->note;
$x='<a class="btn '.$bg.' btn-xs" data-toggle="tooltip" data-placement="top" title="'.$note.'">'.$label.'</a>';
$check='<input type="checkbox">';
if(isset($people[$full_date][$pin]->id_shift_emp)==TRUE){
$get_shift = $people[$full_date][$pin]->id_shift_emp;
$code_shift = $people[$full_date][$pin]->code_shift;
$bg = $array_shift[$get_shift]->background;
$label = $array_shift[$get_shift]->code_shift;
$note = $array_shift[$get_shift]->note;
$x='<a class="btn '.$bg.' btn-xs" data-toggle="tooltip" data-placement="top" title="'.$note.'>'.$code_shift.'</a>';
}
$date_range[]=$x;
}
$data = array(
$check,
$pin,
$details[$pin]->emp_name
);
$no ;
$all_data[]=array_merge($data,$date_range);
}
$output = array(
"draw" => $draw,
"recordsTotal" => $rows,
"recordsFiltered" => $rows,
"data" => $all_data
);
echo json_encode($output);
}
Это мой вызов ajax
$('#list_schedule_emp').dataTable({
"ajax": {
"url": base_url 'employee/data_schedule_emp',
"type": "POST",
"data": {
"year": $('#year').val(),
"month": $('#month').val(),
"dept": $('#dept').val(),
"pos": $('#pos').val()
}
},
"className": 'select-checkbox',
drawCallback: function() {
$('[data-toggle="tooltip"]').tooltip({
container: 'body'
});
}
});
и это мое мнение
<div class="table-responsive">
<input type="hidden" name="year" id="year" value="<?php echo $year; ?>">
<input type="hidden" name="month" id="month" value="<?php echo $month; ?>">
<input type="hidden" name="dept" id="dept" value="<?php echo $dept; ?>">
<input type="hidden" name="pos" id="pos" value="<?php echo $pos; ?>">
<table class="table table-bordered table-striped table-hover" id="list_schedule_emp">
<thead>
<tr>
<th>Select</th>
<th>Pin</th>
<th>Nama</th>
<?php foreach ($date_range AS $date) { ?>
<th><?php echo $date ?></th>
<?php } ?>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
Где моя ошибка? Пожалуйста, покажите мне.
Спасибо всем.
Комментарии:
1. Вы проверили вывод
json_encode($output)
, есть ли у него ввод флажка?2. mr @mPareek да, я проверил вывод проверки, и он есть, просто не показан. У меня есть проверка веб-разработчиком Firefox
Ответ №1:
Datatables предоставляет функциональность для автоматического добавления флажка в качестве первого столбца, см. Документы или аналогичный вопрос на их форумах
По сути, должно сработать полное удаление всех созданных флажков из ваших данных и изменение кода инициализации на что-то вроде приведенного ниже.
ПРИМЕЧАНИЕ
Вы не сообщили нам версию таблиц данных, которые вы используете, и их api изменился многими тонкими способами за эти годы, поэтому вам может потребоваться настроить этот пример, прочитав соответствующие документы для вашей конкретной версии.
$('#list_schedule_emp').dataTable({
"ajax": {
"url": base_url 'employee/data_schedule_emp',
"type": "POST",
"data": {
"year": $('#year').val(),
"month": $('#month').val(),
"dept": $('#dept').val(),
"pos": $('#pos').val()
}
},
drawCallback: function() {
$('[data-toggle="tooltip"]').tooltip({
container: 'body'
});
}
columnDefs: [ {
orderable: false,
className: 'select-checkbox',
targets: 0
} ],
select: {
style: 'os',
selector: 'td:first-child'
},
order: [[ 1, 'asc' ]],
});
Комментарии:
1. Здравствуйте, мистер. @WesleySmith, я использую таблицы данных 1.10.12. Я попробовал ваш пример и до сих пор не работает. может быть, нужно обновить версию таблиц данных?
2. @MardinoIsmail Хм, я не уверен, что эта версия должна поддерживать эту функцию, и вот еще одна статья, показывающая то же самое с немного другим подходом, может быть, попробуйте это: gyrocode.com/articles /…