Содержимое ячейки фильтра DataTables, а не значение БД - PullRequest
0 голосов
/ 14 ноября 2018

Использование таблиц данных 1.10.19

У меня есть MySQL DB, структура выглядит следующим образом;

+------+-----------------+----------+----------+
| name | email           | status   | complete |    
+------+-----------------+----------+----------+
| Joe  | me@example.com  | 1        |1         |
+------+-----------------+----------+----------+
| Jim  | you@example.com | 1        |0         |
+------+-----------------+----------+----------+
| Sara | him@example.com | 0        |0         |
+------+-----------------+----------+----------+

Я использую этот скрипт для извлечения данных из БД.

Мой фильтр данных работает как ожидалось при поиске 0 и 1, но он фильтрует оба столбца status и complete. Я хотел бы найти слова active / inactive и complete / incomplete вместо 1 и 0.

Я использую опцию datatables columns.render для визуализации пользовательского вывода в этих столбцах на основе результатов строки.

Мой код DataTable:

$('#example').dataTable({
    "ajaxSource": "results.php", // output below
    "columns": [{
        "data": "name"
    }, {
        "data": "email"
    }, {
        "data": "status",
        "render": function(data, type, row, meta) {
            // row[2] returns an int of 0 or 1 from the db. inactive/active
            if (row[2] == 0) {
                return `inactive`;
            }
            if (row[2] == 1) {
                return `active`;
            }
        }
    }, {
        "data": "complete",
        "render": function(data, type, row, meta) {
            // row[2] returns an int of 0 or 1 from the db. incomplete/complete
            if (row[3] == 0) {
                return `incomplete`;
            }
            if (row[3] == 1) {
                return `complete`;
            }
        }
    }, ]
});

Файл results.php возвращает следующее;

"data": [
    [
      "Joe",
      "me@example.com  ",
      "1",
      "1",
    ],
    [
      "Jim",
      "you@example.com  ",
      "1",
      "0",
    ],
    [
      "Sara",
      "him@example.com  ",
      "0",
      "0",
    ],
]

Моя внешняя таблица HTML выглядит следующим образом;

+------+-----------------+----------+------------+
| name | email           | status   |complete    |
+------+-----------------+----------+------------+
| Joe  | me@example.com  | active   |complete    |
+------+-----------------+----------+------------+
| Jim  | you@example.com | active   |incomplete  | 
+------+-----------------+----------+------------+
| Sara | him@example.com | inactive |incomplete  |
+------+-----------------+----------+------------+

В настоящее время фильтр, похоже, фильтрует значение db int, а не текст ячейки.

Как мне искать слова вместо 0 и 1.

1 Ответ

0 голосов
/ 14 ноября 2018

Ниже, кажется, работает просто отлично. Ввод "Неактивный" показывает только Сара в результате. Что ты делаешь по-другому?

Редактировать: я обновил фрагмент, чтобы он соответствовал вашему последнему коду. Кажется, вы передаете массив массивов для ваших данных, поэтому я удивлен, что ваша таблица даже инициализируется, так как параметры data в этом случае недопустимы (как data может выбрать атрибут "name", если он не существует в вашем наборе результатов? Это должен быть индекс массива). После обновления опций данных до индекса массива таблица выполняет правильный поиск в вашей отрисованной таблице. При поиске «Incomplete» возвращается Джим / Сара, а при поиске «Inactive» - Сара.

$(document).ready(function() {
  var data = getDummyData();
  $('#example').dataTable({
    "data": data,
    "columns": [{
        "data": 0
      },
      {
        "data": 1
      },
      {
        "data": 2,
        "render": function(data, type, row, meta) {
          // row[2] returns an int of 0 or 1 from the db. inactive/active
          if (data == 0) {
            return `inactive`;
          }
          if (data == 1) {
            return `active`;
          }
        }
      },
      {
        "data": 3,
        "render": function(data, type, row, meta) {
          // row[2] returns an int of 0 or 1 from the db. incomplete/complete
          if (data == 0) {
            return `incomplete`;
          }
          if (data == 1) {
            return `complete`;
          }
        }
      },
    ]
  });
});

function getDummyData() {
  return [
    [
      "Joe",
      "me@example.com  ",
      "1",
      "1",
    ],
    [
      "Jim",
      "you@example.com  ",
      "1",
      "0",
    ],
    [
      "Sara",
      "him@example.com  ",
      "0",
      "0",
    ],
  ]
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>

<table id="example">
  <thead>
    <tr>
      <th>name</th>
      <th>email</th>
      <th>status</th>
      <th>complete</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...