mirror of
https://github.com/DataTables/DataTables.git
synced 2025-01-30 23:52:11 +01:00
Examples: Server-side processing - updates to the SSP class to have a
simple() static method which makes it very easy to make a server-side processing request. - In the examples the SQL statements are all basically the same, so having this method to wrap them into a single function cal absolutely makes sense. - Also added a `formatter` option to the columns array which will format the data as needed using a closure function.
This commit is contained in:
parent
c6d8545319
commit
9e3a51200a
@ -1 +1 @@
|
|||||||
fe33c27d062b6ed1764a30011309e7e5abd39404
|
7a858298d236cecde52b7633b827c03d2a4872c6
|
||||||
|
@ -34,8 +34,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 1 ),
|
array( 'db' => 'last_name', 'dt' => 1 ),
|
||||||
array( 'db' => 'position', 'dt' => 2 ),
|
array( 'db' => 'position', 'dt' => 2 ),
|
||||||
array( 'db' => 'office', 'dt' => 3 ),
|
array( 'db' => 'office', 'dt' => 3 ),
|
||||||
array( 'db' => 'start_date', 'dt' => 4 ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 5 )
|
'db' => 'start_date',
|
||||||
|
'dt' => 4,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 5,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// SQL server connection information
|
// SQL server connection information
|
||||||
@ -61,71 +73,8 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
echo json_encode(
|
||||||
$limit = SSP::limit( $_GET, $columns );
|
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_GET, $columns );
|
|
||||||
$where = SSP::filter( $_GET, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_GET['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode( $output );
|
|
||||||
|
|
||||||
|
@ -34,8 +34,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
||||||
array( 'db' => 'position', 'dt' => 'position' ),
|
array( 'db' => 'position', 'dt' => 'position' ),
|
||||||
array( 'db' => 'office', 'dt' => 'office' ),
|
array( 'db' => 'office', 'dt' => 'office' ),
|
||||||
array( 'db' => 'start_date', 'dt' => 'start_date' ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 'salary' )
|
'db' => 'start_date',
|
||||||
|
'dt' => 'start_date',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 'salary',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$sql_details = array(
|
$sql_details = array(
|
||||||
@ -60,71 +72,8 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Build the SQL query string from the request
|
echo json_encode(
|
||||||
$limit = SSP::limit( $_GET, $columns );
|
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_GET, $columns );
|
|
||||||
$where = SSP::filter( $_GET, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_GET['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode( $output );
|
|
||||||
|
|
||||||
|
@ -33,8 +33,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 1 ),
|
array( 'db' => 'last_name', 'dt' => 1 ),
|
||||||
array( 'db' => 'position', 'dt' => 2 ),
|
array( 'db' => 'position', 'dt' => 2 ),
|
||||||
array( 'db' => 'office', 'dt' => 3 ),
|
array( 'db' => 'office', 'dt' => 3 ),
|
||||||
array( 'db' => 'start_date', 'dt' => 4 ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 5 )
|
'db' => 'start_date',
|
||||||
|
'dt' => 4,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 5,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$sql_details = array(
|
$sql_details = array(
|
||||||
@ -59,71 +71,8 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Build the SQL query string from the request
|
echo $_GET['callback'].'('.json_encode(
|
||||||
$limit = SSP::limit( $_GET, $columns );
|
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_GET, $columns );
|
).');';
|
||||||
$where = SSP::filter( $_GET, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_GET['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo $_GET['callback'].'('.json_encode( $output ).');';
|
|
||||||
|
|
||||||
|
@ -19,8 +19,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
||||||
array( 'db' => 'position', 'dt' => 'position' ),
|
array( 'db' => 'position', 'dt' => 'position' ),
|
||||||
array( 'db' => 'office', 'dt' => 'office' ),
|
array( 'db' => 'office', 'dt' => 'office' ),
|
||||||
array( 'db' => 'start_date', 'dt' => 'start_date' ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 'salary' )
|
'db' => 'start_date',
|
||||||
|
'dt' => 'start_date',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 'salary',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// SQL server connection information
|
// SQL server connection information
|
||||||
@ -46,71 +58,8 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Build the SQL query string from the request
|
echo json_encode(
|
||||||
$limit = SSP::limit( $_GET, $columns );
|
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_GET, $columns );
|
|
||||||
$where = SSP::filter( $_GET, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_GET['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode( $output );
|
|
||||||
|
|
||||||
|
@ -33,8 +33,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
array( 'db' => 'last_name', 'dt' => 'last_name' ),
|
||||||
array( 'db' => 'position', 'dt' => 'position' ),
|
array( 'db' => 'position', 'dt' => 'position' ),
|
||||||
array( 'db' => 'office', 'dt' => 'office' ),
|
array( 'db' => 'office', 'dt' => 'office' ),
|
||||||
array( 'db' => 'start_date', 'dt' => 'start_date' ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 'salary' )
|
'db' => 'start_date',
|
||||||
|
'dt' => 'start_date',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 'salary',
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// SQL server connection information
|
// SQL server connection information
|
||||||
@ -60,71 +72,8 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Build the SQL query string from the request
|
echo json_encode(
|
||||||
$limit = SSP::limit( $_POST, $columns );
|
SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_POST, $columns );
|
|
||||||
$where = SSP::filter( $_POST, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_POST['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode( $output );
|
|
||||||
|
|
||||||
|
@ -33,8 +33,20 @@ $columns = array(
|
|||||||
array( 'db' => 'last_name', 'dt' => 1 ),
|
array( 'db' => 'last_name', 'dt' => 1 ),
|
||||||
array( 'db' => 'position', 'dt' => 2 ),
|
array( 'db' => 'position', 'dt' => 2 ),
|
||||||
array( 'db' => 'office', 'dt' => 3 ),
|
array( 'db' => 'office', 'dt' => 3 ),
|
||||||
array( 'db' => 'start_date', 'dt' => 4 ),
|
array(
|
||||||
array( 'db' => 'salary', 'dt' => 5 )
|
'db' => 'start_date',
|
||||||
|
'dt' => 4,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return date( 'jS M y', strtotime($d));
|
||||||
|
}
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'db' => 'salary',
|
||||||
|
'dt' => 5,
|
||||||
|
'formatter' => function( $d, $row ) {
|
||||||
|
return '$'.number_format($d);
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// SQL server connection information
|
// SQL server connection information
|
||||||
@ -60,71 +72,9 @@ if ( is_file( $file ) ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
require( 'ssp.class.php' );
|
require( 'ssp.class.php' );
|
||||||
$bindings = array();
|
|
||||||
$db = SSP::sql_connect( $sql_details );
|
|
||||||
|
|
||||||
// Build the SQL query string from the request
|
echo json_encode(
|
||||||
$limit = SSP::limit( $_GET, $columns );
|
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
|
||||||
$order = SSP::order( $_GET, $columns );
|
|
||||||
$where = SSP::filter( $_GET, $columns, $bindings );
|
|
||||||
|
|
||||||
// Main query to actually get the data
|
|
||||||
$data = SSP::sql_exec( $db, $bindings,
|
|
||||||
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
|
||||||
FROM `$table`
|
|
||||||
$where
|
|
||||||
$order
|
|
||||||
$limit"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Data set length after filtering
|
|
||||||
$resFilterLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT FOUND_ROWS()"
|
|
||||||
);
|
|
||||||
$recordsFiltered = $resFilterLength[0][0];
|
|
||||||
|
|
||||||
// Total data set length
|
|
||||||
$resTotalLength = SSP::sql_exec( $db,
|
|
||||||
"SELECT COUNT(`{$primaryKey}`)
|
|
||||||
FROM `$table`"
|
|
||||||
);
|
|
||||||
$recordsTotal = $resTotalLength[0][0];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Output
|
|
||||||
*/
|
|
||||||
$output = array(
|
|
||||||
"draw" => intval( $_GET['draw'] ),
|
|
||||||
"recordsTotal" => intval( $recordsTotal ),
|
|
||||||
"recordsFiltered" => intval( $recordsFiltered ),
|
|
||||||
"data" => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
|
||||||
$row = array();
|
|
||||||
|
|
||||||
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
|
||||||
$column = $columns[$j];
|
|
||||||
|
|
||||||
// Formatting of data for specific columns
|
|
||||||
switch ( $columns[$j]['db'] ) {
|
|
||||||
case 'salary':
|
|
||||||
$row[ $column['dt'] ] = '$'.number_format($data[$i]['salary']);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'start_date':
|
|
||||||
$row[ $column['dt'] ] = date( 'jS M y', strtotime($data[$i]['start_date']));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$output['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode( $output );
|
|
||||||
|
|
||||||
|
@ -17,6 +17,39 @@
|
|||||||
|
|
||||||
|
|
||||||
class SSP {
|
class SSP {
|
||||||
|
/**
|
||||||
|
* Create the data output array for the DataTables rows
|
||||||
|
*
|
||||||
|
* @param array $columns Column information array
|
||||||
|
* @param array $data Data from the SQL get
|
||||||
|
* @return array Formatted data in a row based format
|
||||||
|
*/
|
||||||
|
static function data_output ( $columns, $data )
|
||||||
|
{
|
||||||
|
$out = array();
|
||||||
|
|
||||||
|
for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
|
||||||
|
$row = array();
|
||||||
|
|
||||||
|
for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {
|
||||||
|
$column = $columns[$j];
|
||||||
|
|
||||||
|
// Is there a formatter?
|
||||||
|
if ( isset( $column['formatter'] ) ) {
|
||||||
|
$row[ $column['dt'] ] = $column['formatter']( $data[$i][ $column['db'] ], $data[$i] );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$out[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Paging
|
* Paging
|
||||||
*
|
*
|
||||||
@ -151,6 +184,65 @@ class SSP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform the SQL queries needed for an server-side processing requested,
|
||||||
|
* utilising the helper functions of this class, limit(), order() and
|
||||||
|
* filter() among others. The returned array is ready to be encoded as JSON
|
||||||
|
* in response to an SSP request, or can be modified if needed before
|
||||||
|
* sending back to the client.
|
||||||
|
*
|
||||||
|
* @param array $request Data sent to server by DataTables
|
||||||
|
* @param array $sql_details SQL connection details - see sql_connect()
|
||||||
|
* @param string $table SQL table to query
|
||||||
|
* @param string $primaryKey Primary key of the table
|
||||||
|
* @param array $columns Column information array
|
||||||
|
* @return array Server-side processing response array
|
||||||
|
*/
|
||||||
|
static function simple ( $request, $sql_details, $table, $primaryKey, $columns )
|
||||||
|
{
|
||||||
|
$bindings = array();
|
||||||
|
$db = SSP::sql_connect( $sql_details );
|
||||||
|
|
||||||
|
// Build the SQL query string from the request
|
||||||
|
$limit = SSP::limit( $request, $columns );
|
||||||
|
$order = SSP::order( $request, $columns );
|
||||||
|
$where = SSP::filter( $request, $columns, $bindings );
|
||||||
|
|
||||||
|
// Main query to actually get the data
|
||||||
|
$data = SSP::sql_exec( $db, $bindings,
|
||||||
|
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", SSP::pluck($columns, 'db'))."`
|
||||||
|
FROM `$table`
|
||||||
|
$where
|
||||||
|
$order
|
||||||
|
$limit"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Data set length after filtering
|
||||||
|
$resFilterLength = SSP::sql_exec( $db,
|
||||||
|
"SELECT FOUND_ROWS()"
|
||||||
|
);
|
||||||
|
$recordsFiltered = $resFilterLength[0][0];
|
||||||
|
|
||||||
|
// Total data set length
|
||||||
|
$resTotalLength = SSP::sql_exec( $db,
|
||||||
|
"SELECT COUNT(`{$primaryKey}`)
|
||||||
|
FROM `$table`"
|
||||||
|
);
|
||||||
|
$recordsTotal = $resTotalLength[0][0];
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Output
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
"draw" => intval( $request['draw'] ),
|
||||||
|
"recordsTotal" => intval( $recordsTotal ),
|
||||||
|
"recordsFiltered" => intval( $recordsFiltered ),
|
||||||
|
"data" => SSP::data_output( $columns, $data )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect to the database
|
* Connect to the database
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user