net - jquery datatable custom search
Cómo implementar YADCF en un servidor DataTable (1)
Consulte YADCF - Ejemplo de fuente del lado del servidor . Cada filtro de columna envía el valor ingresado como columns[X][search][value]
, donde X
es un índice de columna basado en cero.
Por lo tanto, en su ejemplo con tres columnas en el script del lado del servidor, tendrá filtros de columna en las siguientes variables:
-
$requestData[''columns''][0][''search''][''value'']
-
$requestData[''columns''][1][''search''][''value'']
-
$requestData[''columns''][2][''search''][''value'']
Debería ajustar su PHP para incluir en la cuenta estos filtros si su contenido no es una cadena vacía.
Estoy intentando agregar filtros de columna a una solicitud DataTables.js del lado del servidor (la base de datos que está usando es enorme). Cuando agrego las líneas de YADCF, no tengo ninguna funcionalidad de los cuadros de texto. ¿Cuál es la forma correcta de agregar filtros de columna a mi archivo php? Actualmente tengo: index.php
<head>
<link rel="stylesheet" type="text/css" href="css/jquery.dataTables.css">
<script type="text/javascript" language="javascript" src="js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="js/jquery.dataTables.yadcf.js"></script>
<script type="text/javascript" language="javascript" src="js/jquery.dataTables.js"></script>
<script type="text/javascript" language="javascript" >
$(document).ready(function() {
''use strict'';
var dataTable = $(''#employee-grid'').DataTable( {
"processing": false,
"serverSide": true,
"ajax":{
url :"employee-grid-data.php", // json datasource
type: "post", // method , by default get
error: function(){ // error handling
$(".employee-grid-error").html("");
$("#employee-grid").append(''<tbody class="employee-grid-error"><tr><th colspan="3">No data found in the server</th></tr></tbody>'');
$("#employee-grid_processing").css("display","none");
}
}
} );
} );
</script>
<style>
div.container {
margin: 0 auto;
max-width:760px;
}
div.header {
margin: 100px auto;
line-height:30px;
max-width:760px;
}
body {
background: #f7f7f7;
color: #333;
font: 90%/1.45em "Helvetica Neue",HelveticaNeue,Verdana,Arial,Helvetica,sans-serif;
}
</style>
</head>
<body>
<div class="header"></h1></div>
<div class="container">
<table id="employee-grid" cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
<thead>
<tr>
<th>Employee name</th>
<th>Salary</th>
<th>Age</th>
</tr>
</thead> </table> </div></body></html>
y mi archivo de solicitud sql: employee-grid-data.php
<?php
/* Database connection start */
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "";
$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());
/* Database connection end */
// storing request (ie, get/post) global array to a variable
$requestData= $_REQUEST;
$columns = array(
// datatable column index => database column name
0 =>''employee_name'',
1 => ''employee_salary'',
2=> ''employee_age''
);
// getting total number records without any search
$sql = "SELECT employee_name, employee_salary, employee_age ";
$sql.=" FROM employee";
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$totalData = mysqli_num_rows($query);
$totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows.
$sql = "SELECT employee_name, employee_salary, employee_age ";
$sql.=" FROM employee WHERE 1=1";
if( !empty($requestData[''search''][''value'']) ) { // if there is a search parameter, $requestData[''search''][''value''] contains search parameter
$sql.=" AND ( employee_name LIKE ''".$requestData[''search''][''value'']."%'' ";
$sql.=" OR employee_salary LIKE ''".$requestData[''search''][''value'']."%'' ";
$sql.=" OR employee_age LIKE ''".$requestData[''search''][''value'']."%'' )";
}
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result.
$sql.=" ORDER BY ". $columns[$requestData[''order''][0][''column'']]." ".$requestData[''order''][0][''dir'']." LIMIT ".$requestData[''start'']." ,".$requestData[''length'']." ";
/* $requestData[''order''][0][''column''] contains colmun index, $requestData[''order''][0][''dir''] contains order such as asc/desc */
$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees");
$data = array();
while( $row=mysqli_fetch_array($query) ) { // preparing an array
$nestedData=array();
$nestedData[] = $row["employee_name"];
$nestedData[] = $row["employee_salary"];
$nestedData[] = $row["employee_age"];
$data[] = $nestedData;
}
$json_data = array(
"draw" => intval( $requestData[''draw''] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw.
"recordsTotal" => intval( $totalData ), // total number of records
"recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData
"data" => $data // total data array
);
echo json_encode($json_data); // send data as json format
?>
Traté de combinar mi función de tabla de datos con la función YADCF que se encuentra en; http://yadcf-showcase.appspot.com/DOM_Ajax_Multiple_1.10.html . Sin embargo, no pude hacer que los filtros de columna funcionen. ¿Cuál es la sintaxis adecuada para una solicitud del lado del servidor de YADCF? ¿O hay cambios en jquery.datatables.js o jquery.datatables.yadcf.js que debo hacer?
Traté de crear la variable oTable pero todavía no podía hacerlo yadcf.init (oTable) para hacer que los cuadros de texto funcionen. ¿Qué me estoy perdiendo?
Gracias por la ayuda.