DataTables Фильтрация отдельных столбцов на стороне сервера - PullRequest
4 голосов
/ 20 декабря 2010

Я надеялся, что кто-нибудь может мне помочь с этим.Я схожу с ума от этого.

У меня есть ситуация, когда я загружаю сетку DataTables (кстати, потрясающая штука!), И все замечательно.Затем я иду на поиски и сталкиваюсь с проблемами.Данные, заполняемые в сетке, поступают из двух разных таблиц базы данных (что хорошо), но когда кто-то выполняет поиск, у меня нет возможности узнать, куда идти и получать данные.Мне нужно знать, по каким критериям выполняется поиск (например, заголовок или контакт).Я вижу, что, когда поиск вызывается с сервера через окно поиска по умолчанию, появляются переменные, такие как "sSearch_0", которые все не установлены, как их установить?

Вот код инициализации для таблицы:

oTable = $('#example').dataTable({
"bJQueryUI": true,
"bFilter": true,
"sPaginationType": "full_numbers",
"bPaginate " : true,
"bServerSide" : true,
"sAjaxSource" : "php/tabledata.php",
"aoColumnDefs": [
     { "bSortable": false, "aTargets": [ 0,6,8 ] },
 { "sClass": "tdCenter", "aTargets": [ 0,1,2,3,4,5,6,7,8 ] }
     ],
"fnServerData": function ( sSource, aoData, fnCallback ) {
aoData.push( { "name": "userid", "value": userid } );
$.getJSON( sSource, aoData, function (json) { 
fnCallback(json)
});
}           

});

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

Может ли кто-нибудь помочь мне здесь и указать мне направильное направление?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

Если вы получаете данные с сервера для плагина DataTables, вы должны установить для bServerSide значение true, установить для sAjaxSource соответствующий URL-адрес и в идеальном случае настроить fnServerData, если вам необходимо выполнить какие-либо обратные вызовы.

Если вы используете обработку на стороне сервера, вся сортировка, фильтрация и подкачка страниц должны обрабатываться вами на сервере. Если вы правильно настроите DataTables, он будет запрашивать данные с сервера каждый раз, когда происходит событие подкачки, фильтрации или сортировки.

Документация API на стороне сервера DataTables

Пример PHP-обработки на стороне сервера

1 голос
/ 21 февраля 2014

Для удобства всех, кто задает этот вопрос, вот что я реализовал.

Клиентская часть (JavaScript)

Выполните fnFilter после нажатия клавиши Enter.

$(tableId + " thead input").keypress( function () {
  if (event.which == 13) {
    event.preventDefault();
    oTable.fnFilter( this.value, $("thead input").index(this) );
  }
} );

Сторона сервера (Ruby)

Найдите хэш параметра sSearch_ (int) и извлеките индекс столбца из ключа.Получить имена столбцов из массива и построить строку поиска.

def column_search
  search_string = []
  params.keys.map {|x| x if params[x].present? and x.include? "sSearch_"}.compact.each do |search|
    index = search.split("_").last.to_i
    search_string << "#{columns[index]} ilike '%#{params[search]}%'"
  end
  search_string.join(' and ')
end
...