флажок из контроллера Codeigniter не отображается в таблицах данных ajax-вызов

#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 /…