Дошли руки до datatables.net
Наконец дошли руки до освоения плагина databales.net для работы с таблицами. До этого всё использовал jqgrid. Вот типичный шаблон c выгрузкой в excel, загрузкой данных из json, добавления в POST своих данных, получения id выделенной строки.
HTML:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <table id="clientsgrid" class="display" style="width:100%">         <thead>             <tr>                 <th>#</th>                 <th></th>                 <th>Телефон</th>                 <th>ФИО</th>                 <th>Email</th>                 <th>Дата</th>             </tr>         </thead>     </table> | 
Javascript:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |  function ClientsGridList(){     table=$('#clientsgrid').DataTable( {         dom: 'Bfrtip',         destroy: true,         select: true,         buttons: [             'excel','print'         ],                  paging: true,          keys: true,         //scrollY:        200,         //scrollCollapse: true,         //scroller:       true,                  "processing": true,         "serverSide": true,         "ajax": {             "url": "/server/clients/ClientsGrid",             "type": "POST",             "data": {                 "owner":owner_select.value,                 "segment":users_groups_array_select.value             }         },     "language": {              url: '/js/i18n/datatable.json'         },             "columns": [             { "data": "id"},             { "data": "deleted" },             { "data": "phone"},             { "data": "name" },             { "data": "email" },             { "data": "dt"}                     ]             } );     $('#clientsgrid').unbind();     $('#clientsgrid').on('dblclick', 'tbody td', function () {          tr = $(this).closest('tr');          //console.log(tr);          row = table.row( tr );          data=row.data();          user_id=data.id;                   DrawCartUser(user_id);     });     // table.ajax.reload();   };     | 
PHP:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $owner= _POST("owner"); // владелец (если суперадмин - выводим всех) $segment= _POST("segment"); // какой сегмент (если -1, выводим всех) $draw= _POST("draw"); // какая страница $start= _POST("start"); // с какой записи по счету $length= _POST("length"); // записей на страницу $order= _POST("order")[0]["column"]; // по какой колонке сортируем $order= _POST("columns")[$order]["data"]; $sidx= _POST("order")[0]["dir"]; // способ сортировки $search_value=_POST("search")["value"]; // что ищем $search_regex=_POST("search")["regex"]; // регулярка $res=$Users->GetClientsGrid($Users,$owner,$segment,$start,$length,$order,$sidx,$search_value);     if ($res->error):         echo '{"error": "'.$res->errortext.'" }';         die();    else:         $res->result->draw=$draw;         jsonExit($res->result); endif; | 
Ну и получается что то вроде:

