返回按钮Datatable Server Side上的值


return value on button Datatable Server-Side

伙计们,我怎么能在我的专栏中放一个按钮呢

Protcolo 助理行动
001 lalalala打印

我使用数据表服务器端:

<table id="datatable_fixed_column" class="table table-striped table-bordered" width="100%">
<thead>
<tr>                                            
<th>Protocolo</th>
<th>Assunto</th>
<th>Action</th>                                                                                          
</tr>
</thead>                                    
</table>
<script type="text/javascript">
    $(document).ready(function() {
        var otable = $('#datatable_fixed_column').DataTable({
        "processing": true,
        "serverSide": true,
        "ajax": "server_processing/protocolos.php",
        "order": [[ 0, "asc" ]],
        "columnDefs": [
        { "width": "10%", "targets": 0 },
        { "width": "70%", "targets": 1 },
        { "width": "20%", "targets": 2 }
        ],
        columns: [
            { data: "protocolo" },
            { data: "assunto" },           
            {
                data: null,
                defaultContent: '<form method="post" action=""><input type="hidden" id="idcontrib" name="idcontrib" value="id_protocolo"><button type="submit" class="btn btn-warning btn-xs" name="edit_contrib">Editar</button> &nbsp;&nbsp; <button type="submit" class="btn btn-danger btn-xs" name="exc_contrib">Excluir</button></form>'
            }           
        ],
        "sDom": "<'dt-toolbar'<'col-xs-6'f><'col-xs-6'<'toolbar'>>r>"+
                "t"+
                "<'dt-toolbar-footer'<'col-xs-6'i><'col-xs-6'p>>"
        });
         $("div.toolbar").html('<div class="text-right"><img src="img/logo2.png" alt="SmartAdmin" style="width: 111px; margin-top: 3px; margin-right: 10px;"></div>');
    })
</script>

protocolos.php

<?php 
$table = 'tbl_protocolos_teste';
$primaryKey = 'id_protocolo';
$columns = array(
array( 'db' => 'protocolo', 'dt' => 0 ),
array( 'db' => 'assunto',  'dt' => 1 ),
array( 'db' => 'id_protocolo',  'dt' => 2 )
);
$sql_details = array(
'user' => 'root',
'pass' => '$#$#$#',
'db'   => 'bbbb',
'host' => 'localhost'
);
require( 'ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);

ssp.class.php

<?php
class SSP {
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;
}
static function limit ( $request, $columns )
{
$limit = '';
if ( isset($request['start']) && $request['length'] != -1 ) {
$limit = "LIMIT ".intval($request['start']).", ".intval($request['length']);
}
return $limit;
}
static function order ( $request, $columns )
{
$order = '';
if ( isset($request['order']) && count($request['order']) ) {
$orderBy = array();
$dtColumns = self::pluck( $columns, 'dt' );
for ( $i=0, $ien=count($request['order']) ; $i<$ien ; $i++ ) {
// Convert the column index into the column data property
$columnIdx = intval($request['order'][$i]['column']);
$requestColumn = $request['columns'][$columnIdx];
$columnIdx = array_search( $requestColumn['data'], $dtColumns );
$column = $columns[ $columnIdx ];
if ( $requestColumn['orderable'] == 'true' ) {
$dir = $request['order'][$i]['dir'] === 'asc' ?
'ASC' :
'DESC';
$orderBy[] = '`'.$column['db'].'` '.$dir;
}
}
$order = 'ORDER BY '.implode(', ', $orderBy);
}
return $order;
}
static function filter ( $request, $columns, &$bindings )
{
$globalSearch = array();
$columnSearch = array();
$dtColumns = self::pluck( $columns, 'dt' );
if ( isset($request['search']) && $request['search']['value'] != '' ) {
$str = $request['search']['value'];
for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {
$requestColumn = $request['columns'][$i];
$columnIdx = array_search( $requestColumn['data'], $dtColumns );
$column = $columns[ $columnIdx ];
if ( $requestColumn['searchable'] == 'true' ) {
$binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );
$globalSearch[] = "`".$column['db']."` LIKE ".$binding;
}
}
}
// Individual column filtering
for ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {
$requestColumn = $request['columns'][$i];
$columnIdx = array_search( $requestColumn['data'], $dtColumns );
$column = $columns[ $columnIdx ];
$str = $requestColumn['search']['value'];
if ( $requestColumn['searchable'] == 'true' &&
$str != '' ) {
$binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );
$columnSearch[] = "`".$column['db']."` LIKE ".$binding;
}
}
// Combine the filters into a single string
$where = '';
if ( count( $globalSearch ) ) {
$where = '('.implode(' OR ', $globalSearch).')';
}
if ( count( $columnSearch ) ) {
$where = $where === '' ?
implode(' AND ', $columnSearch) :
$where .' AND '. implode(' AND ', $columnSearch);
}
if ( $where !== '' ) {
$where = 'WHERE '.$where;
}
return $where;
}
static function simple ( $request, $sql_details, $table, $primaryKey, $columns )
{
$bindings = array();
$db = self::sql_connect( $sql_details );
// Build the SQL query string from the request
$limit = self::limit( $request, $columns );
$order = self::order( $request, $columns );
$where = self::filter( $request, $columns, $bindings );
// Main query to actually get the data
$data = self::sql_exec( $db, $bindings,
"SELECT SQL_CALC_FOUND_ROWS `".implode("`, `", self::pluck($columns, 'db'))."`
FROM `$table`
$where
$order
$limit"
);
// Data set length after filtering
$resFilterLength = self::sql_exec( $db,
"SELECT FOUND_ROWS()"
);
$recordsFiltered = $resFilterLength[0][0];
// Total data set length
$resTotalLength = self::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"            => self::data_output( $columns, $data )
);
}
static function sql_connect ( $sql_details )
{
try {
$db = @new PDO(
"mysql:host={$sql_details['host']};dbname={$sql_details['db']}",
$sql_details['user'],
$sql_details['pass'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
}
catch (PDOException $e) {
self::fatal(
"An error occurred while connecting to the database. ".
"The error reported by the server was: ".$e->getMessage()
);
}
return $db;
}
static function sql_exec ( $db, $bindings, $sql=null )
{
// Argument shifting
if ( $sql === null ) {
$sql = $bindings;
}
$stmt = $db->prepare( $sql );
//echo $sql;
// Bind parameters
if ( is_array( $bindings ) ) {
for ( $i=0, $ien=count($bindings) ; $i<$ien ; $i++ ) {
$binding = $bindings[$i];
$stmt->bindValue( $binding['key'], $binding['val'], $binding['type'] );
}
}
// Execute
try {
$stmt->execute();
}
catch (PDOException $e) {
self::fatal( "An SQL error occurred: ".$e->getMessage() );
}
// Return all
return $stmt->fetchAll();
}
static function fatal ( $msg )
{
echo json_encode( array( 
"error" => $msg
) );
exit(0);
}
static function bind ( &$a, $val, $type )
{
$key = ':binding_'.count( $a );
$a[] = array(
'key' => $key,
'val' => $val,
'type' => $type
);
return $key;
}
static function pluck ( $a, $prop )
{
$out = array();
for ( $i=0, $len=count($a) ; $i<$len ; $i++ ) {
$out[] = $a[$i][$prop];
}
return $out;
}
}

我的问题,
第一个
protocolo和assunto的值它们没有被加载

{ data: "protocolo" },
{ data: "assunto" },  

第二
如何在隐藏字段中加载id_procolo值

<input type="hidden" id="idcontrib" name="idcontrib" value="id_protocolo">

您使用的是jQuery"DataTables"插件。事实上,jQuery和服务器代码看起来都是基于文档(www.datatables.net)中的示例代码

我要检查的第一件事是,您的jQuery是否正在与您的服务器进行通信。它甚至看到了"server_production/procolos.php"吗?

做到这一点的最好方法是将代码缩减到最少的行数——只是为了测试连接是否正在发生。在文档中,他们有一些类似的JavaScript:

$(document).ready(function() { $('#example').dataTable( { "processing": true, "serverSide": true, "ajax": "scripts/server_processing.php" } ); } );

我会从这个开始,并尝试从服务器脚本中返回一个"你好世界"。在您知道任何类型的数据都将从服务器返回之前,很难判断代码中可能存在哪些内容。

已解决

脚本

$(document).ready(function() {
var otable = $('#datatable_fixed_column').DataTable({
"processing": true,
"serverSide": true,
"ajax": "server_processing/contribuintes.php",
"order": [[ 2, "asc" ]],
"columnDefs": [
    { "width": "5%", "targets": 0 },
    { "width": "10%", "targets": 1 },
    { "width": "15%", "targets": 2 },
    { "width": "20%", "targets": 3 },
    { "width": "10%", "targets": 4 },
    { "width": "20%", "targets": 5 },
    { "width": "5%", "targets": 6 },
    { "render": actionlinks,
      "data": null,         
      "targets": [7], "width": "15%", "targets": 7 },
],
});
function actionlinks(data, type, full) {
    return '<form method="post" action=""><input type="hidden" id="idcontrib" name="idcontrib" value="' + full[0] + '"><button type="submit" class="btn btn-warning btn-xs" name="edit_contrib">Editar</button>&nbsp;&nbsp;<button type="submit" class="btn btn-danger btn-xs" name="exc_contrib">Excluir</button>&nbsp;&nbsp;<button type="submit" class="btn btn-info btn-xs" name="ativa_contrib">Reativar</button></form> ';
}

<table id="datatable_fixed_column" class="table table-striped table-bordered" width="100%">
  <thead>
    <tr>
      <th>ID</th>
      <th>CPF</th>
      <th>Nome</th>
      <th>Sobrenome</th>
      <th>Celular</th>
      <th>email</th>
      <th>status</th>
      <th>Ação</th>                                                                                     
   </tr>
</thead>                                            
</table>

服务器端

$table = 'tbl_contribuintes';
$primaryKey = 'id_contrib';
$columns = array(
array( 'db' => 'id_contrib', 'dt' => 0 ),
array( 'db' => 'cpf', 'dt' => 1 ),
array( 'db' => 'fnome',  'dt' => 2 ),
array( 'db' => 'lnome',  'dt' => 3 ),   
array( 'db' => 'celular1',  'dt' => 4 ),
array( 'db' => 'email',  'dt' => 5 ),
array( 'db' => 'id_status',  'dt' => 6 ),
);
$sql_details = array(
'user' => 'root',
'pass' => 'XXX',
'db'   => 'XXX',
'host' => 'localhost'
);
require( 'ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);

tks Anderson Torres

http://andersontorres.com.br/