DataTables: поиск по всем столбцам на стороне сервера - PullRequest
1 голос
/ 14 ноября 2011

Я использую IgnitedDatatables (библиотека CodeIgniter) для DataTables . Таблица генерируется без проблем, но если я ищу / фильтрую, она может фильтровать только один столбец за раз. Если я установлю «bServerSide» в false, это будет работать, но тогда я потеряю функциональность на стороне сервера.

В примерах этот работает: http://datatables.net/release-datatables/examples/ajax/custom_data_property.html

пока это не (на стороне сервера): http://datatables.net/release-datatables/examples/data_sources/server_side.html

Этого невозможно достичь при работе на стороне сервера?

Это мой ответ JSON (сокращенный и с замененными данными):

{"sEcho":0,"iTotalRecords":45438,"iTotalDisplayRecords":45438,"aaData":[["abc","12345","example@example.com","","","2010-01-27 22:31:10","Edit<\/a> Delete<\/a>"],["abc2"," test123","test@test.com","","","2008-06-15 22:09:33","Edit<\/a> Delete<\/a>"]],"sColumns":"fname,lname,email,phone,cellphone,created,edit"}

Код JavaScript:

$("#members").dataTable( {
    "bProcessing": true,
    "bServerSide": true,
    'sAjaxSource': '<?php echo base_url();?>members/listener',
    "fnServerData": function ( sSource, aoData, fnCallback ) {
        $.ajax( {
            "dataType": 'json',
            "type": 'POST',
            "url": sSource,
            "data": aoData,
            "success": fnCallback
        } );
    },
    "bLengthChange": false,
    "aaSorting": [[ 0, "asc" ]],
    "iDisplayLength": 15,
    "sPaginationType": "full_numbers",
    "bAutoWidth": false,
    "aoColumnDefs": [ 
        { "sName": "fname", "aTargets": [ 0 ] },
        { "sName": "lname", "aTargets": [ 1 ] },
        { "sName": "email", "aTargets": [ 2 ] },
        { "sName": "phone", "sWidth": "80px", "aTargets": [ 3 ] },
        { "sName": "cellphone", "sWidth": "100px", "aTargets": [ 4 ] },
        { "sName": "created", "sWidth": "120px", "aTargets": [ 5 ] },
        { "bSortable": false, "sName": "edit", "sWidth": "115px",   "aTargets": [ 6 ] }
    ]
});

Спасибо!

1 Ответ

1 голос
/ 15 ноября 2011

Что ж, проблема, если вы фильтруете на стороне сервера, заключается в том, что вы фильтруете запрос SQL, и это то, что написано в примере , который вы опубликовали;

  • Фильтрация
  • ПРИМЕЧАНИЕ: это не соответствует встроенной фильтрации DataTables, которая делает это
  • слово за словом на любом поле. Это можно сделать здесь, но обеспокоен эффективностью
  • для очень больших таблиц, и функциональность регулярных выражений MySQL очень ограничена

По сути, вы можете делать то, что хотите (регулярное выражение соответствует всем столбцам), но это убьет производительность сервера.

Что я обычно делаю, так это предоставляю фильтр для каждого столбца, мне нужно фильтровать.

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