ServerSide Processing no Datatable Jquery
Bom, como este assunto é uma "mesclagem" de PHP + Jquery, resolvi postar na área de PHP.
Tenho um jquery Datatable que faz o processamento Server Side da forma abaixo:
$('.listagem_dinamica').dataTable({ "bJQueryUI": true, "bProcessing": true, "bServerSide": true, "sAjaxSource": "../srvprocess_datatable.php" });
Na minha página srvprocess_datatable.php, ele realiza toda a consulta e retorna um JSON, segue a pagina:
<?php/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Easy set variables*/ /* Array of database columns which should be read and sent back to DataTables. Use a space where* you want to insert a non-database field (for example a counter or static image)*/$aColumns = array( 'cod_os', 'dthora_final', 'dthr_entrada', 'dthora_inicio'); /* Indexed column (used for fast and accurate table cardinality) */$sIndexColumn = "cod_os"; /* DB table to use */$sTable = "os"; /* Database connection information */$gaSql['user'] = "root";$gaSql['password'] = "123456";$gaSql['db'] = "sicoti_db";$gaSql['server'] = "localhost"; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** If you just want to use the basic configuration for DataTables with PHP server-side, there is* no need to edit below this line*/ /* * MySQL connection*/$gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) ordie( 'Could not open connection to server' ); mysql_select_db( $gaSql['db'], $gaSql['link'] ) or die( 'Could not select database '. $gaSql['db'] ); /* * Paging*/$sLimit = "";if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ){$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".intval( $_GET['iDisplayLength'] );} /** Ordering*/$sOrder = "";if ( isset( $_GET['iSortCol_0'] ) ){$sOrder = "ORDER BY ";for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ){if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ){$sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." ".($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";}} $sOrder = substr_replace( $sOrder, "", -2 );if ( $sOrder == "ORDER BY" ){$sOrder = "";}} /* * Filtering* NOTE this does not match the built-in DataTables filtering which does it* word by word on any field. It's possible to do here, but concerned about efficiency* on very large tables, and MySQL's regex functionality is very limited*/$sWhere = "";if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ){$sWhere = "WHERE (";for ( $i=0 ; $i<count($aColumns) ; $i++ ){$sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";}$sWhere = substr_replace( $sWhere, "", -3 );$sWhere .= ')';} /* Individual column filtering */for ( $i=0 ; $i<count($aColumns) ; $i++ ){if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ){if ( $sWhere == "" ){$sWhere = "WHERE ";}else{$sWhere .= " AND ";}$sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";}} /** SQL queries* Get data to display*/$sQuery = "SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."FROM $sTable$sWhere$sOrder$sLimit";$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); /* Data set length after filtering */$sQuery = "SELECT FOUND_ROWS()";$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);$iFilteredTotal = $aResultFilterTotal[0]; /* Total data set length */$sQuery = "SELECT COUNT(".$sIndexColumn.")FROM $sTable";$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());$aResultTotal = mysql_fetch_array($rResultTotal);$iTotal = $aResultTotal[0]; /** Output*/$output = array("sEcho" => intval($_GET['sEcho']),"iTotalRecords" => $iTotal,"iTotalDisplayRecords" => $iFilteredTotal,"aaData" => array()); while ( $aRow = mysql_fetch_array( $rResult ) ){$row = array();for ( $i=0 ; $i<count($aColumns) ; $i++ ){if ( $aColumns[$i] == "version" ){/* Special output formatting for 'version' column */$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];}else if ( $aColumns[$i] != ' ' ){/* General output */$row[] = $aRow[ $aColumns[$i] ];}}$output['aaData'][] = $row;} echo json_encode( $output );?>
Ele funciona perfeitamente, retorna os dados e popula a tabela na página home.php, segue a pagina:
<table class="listagem_dinamica"> <thead> <tr> <th>OS</th> <th>Fim</th> <th>Entrada</th> <th>Inicio</th> </tr> </thead> <tbody> </tbody> </table>
O problema é o seguinte: Quando o carregamento era feito normal, sem ser ServerSide eu colocava ainda uma última Coluna com os botões de "Editar e Excluir" a linha, estes botões eram links para um outra página responsável por realizar essas ações. Agora que o processamento é ServerSide como eu posso adicionar uma última coluna só com as ações de Editar e Excluir ?
Alguém ?
Discussão (1)
Carregando comentários...