Определение столбцов Datatables - PullRequest
0 голосов
/ 25 апреля 2020

Я изучил различные ответы на похожие вопросы, но не смог найти окончательного ответа на мою проблему: У меня есть таблица, которая загружает данные со стороны сервера, используя плагин выбора (в файлах плагинов предварительно загруженных данных CDN ...), как только я выбрал несколько строк в таблице, я отправляю данные обратно для обработки на стороне сервера & попросить перезагрузить таблицу, как показано ниже сценария ... Скрипты на стороне сервера работают нормально, но, очевидно, когда я сделал выбор и хочу запустить другой скрипт на стороне сервера, чтобы сделать что-то с выбранными элементами из таблицы, я бы хотел перезагрузить таблицу - и данные, затронутые этим последним сценарием сервера-соде (...) -. На данный момент я могу достичь этого только путем перезагрузки всей страницы, так как таблица заполнена от моего рендерера 'foreach' l oop. Я хотел бы использовать вызов ajax из определения dataTable, чтобы я мог перезагружать только таблицу ...

У меня есть проблема с определением столбца, которое я не могу обработать из одного решения в другое ( например, из представления данных c '' stati * в сценарии PHP средства визуализации по сравнению с динамическим c представлением данных через ajax call / DataTable определение ). Ниже приведено определение Datatable / Columns с передачей данных на стороне сервера / stati c:

var plugins_table = $('.plugins_table').DataTable({
    columnDefs: [{
        orderable: false,
        className: 'select-checkbox',
        targets: 0
    }, {
        "targets": 2,
        "visible": false,
        "searchable": false
    }],
    select: {
        style: 'multi',
        selector: 'td:first-child'
    },
    order: [
        [1, 'asc']
    ]

});
$('#choose').on('click', function() {
    var ids=[];
    $.each(plugins_table.rows('.selected').nodes(), function(i, item) {

        var data = plugins_table.row(this).data();
        var id=data[2];
        ids.push(id);
    });

    var request = $.ajax({
        url: 'indexAjax.php?p=installKnownPlugins',
        data: {plugin_ids: ids},
        dataType: 'json',
        type: 'post'
    });
    request.done(function (response) {
        if (response.result == 'success') {
            // Reloads the entire PAGE (*not what I want...!*)
           window.location.reload(true);
        } else {
            alert(response.message);
            exit;
        }
    });
});

Сценарий PHP в визуализаторе:

<table class="plugins_table table table-hover table-striped" id="'plugins_table" >
       <thead>
            <tr>
                <th></th> //For the checkboxes
                <th>Nom</th>
                <th></th> // for the hidden data (eg the plugin_id...)
            </tr>
         </thead>
         <tbody>
         <?php
         foreach($plugins AS $plugin){
              echo '<tr>';
                 echo '<td></td>';
                 echo '<td>'.$plugin['plugin_name'].'</td>';
                 echo '<td>'.$plugin['plugin_id'].'</td>';
              echo '</tr>';
         }
         ?>
    </tbody>
</table>

И то, к чему я стремлюсь, это определить Datable & Columns с помощью вызова AJAX, такого как ниже:

    var plugins_table = $('.plugins_table').DataTable({
                    "ajax": "indexAjax.php?p=listPluginsforSite",
                    "columns": [
                         // WHERE  / HOW ARE THE CHECKBOXES DEFINED ?
                        {"data": "plugin_name"},
                        {"data": "plugin_id"}, // The hidden fields

                    ]

                });
$('#choose').on('click', function() {
            var ids=[];
            $.each(plugins_table.rows('.selected').nodes(), function(i, item) {

                var data = plugins_table.row(this).data();
                var id=data[2];
                ids.push(id);
            });

            var request = $.ajax({
                url: 'indexAjax.php?p=installKnownPlugins',
                data: {plugin_ids: ids},
                dataType: 'json',
                type: 'post'
            });
                    request.done(function (response) {
                    if (response.result == 'success') {
                        // RELOADS THE TABLE ONLY AND WHAT I WANT!!!
                        $('.plugins_table').DataTable().ajax.reload();
                    }
                });

Итак, чтобы подвести итог и завершить мой вопрос, я не могу получить правильные определения столбцов для использования выбора / перезагрузки для работы с вызовом ajax для данных ... Извините за длинную затянутую рекламу, но я подумал, что необходимо объяснить мой конкретный случай .. Большое спасибо за чтение и вашу помощь!

...