PHP datatables / ajax: <td>в данных - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно обновить старый проект - он имеет свой собственный бэкэнд и доставляет данные строки в виде массива, который отображается как стандартная HTML-таблица.

Последний атрибут в массиве строк имеет «редактирование»столбец "по умолчанию, что означает, что он содержит разметку для значка редактирования, подобного следующему:

$aData = array(
    "first_name"    => "John",
    "last_name"     => "Connor",
    "edit_columns"  => "<a href='#' class='edit'>Edit</a>"
);

Проблема - в моем бэкэнде есть также таблицы, которые будут доставлять несколько ячеек таблицы (которые работают до тех пор, покаРаньше это была HTML-таблица) с данными массива, такими как:

$aData = array(
    "first_name"    => "John",
    "last_name"     => "Connor",
    "edit_columns"  => "<a href='#' class='edit'>Edit</a> </td><td> <a href='#' class='delete'>Delete</a>"
);

Проблема: плагин datatables будет обрабатывать edit_columns как одну ячейку и фильтровать разметку </td><td>, что приведет к 2 гиперссылкамв одной ячейке.

Я знаю, что мне нужно было бы провести рефакторинг моих данных, но мой клиент хочет оставить данные бэкэнда без изменений.Итак, есть ли способ «сдвинуть» данные ячейки по мере необходимости?

1 Ответ

0 голосов
/ 23 мая 2019

В зависимости от используемой вами версии таблицы данных, вы можете прослушать xhr.dt -вент с использованием javascript, а затем изменить / разбить данные до того, как они будут отображены в вашей таблице.

myTable.on('xhr.dt', function (e, settings, json, xhr) {
  let data = json.data;
  for ( let i=0, dataLength=data.length; i<dataLength; i++ ) {
    let edit_columns = data[i].edit_columns.split("</td><td>");
    data[i].edit_column = edit_columns[0];
    data[i].delete_column = edit_columns[1];
  }
});

Теперь выможете использовать созданные столбцы данных (edit_column и delete_column) в вашей таблице, как обычные столбцы, без изменения кода на серверной стороне / сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...