在jQuery DataTables中按名称引用列

时间:2015-03-31 17:38:11

标签: php jquery datatables jquery-datatables

我正在使用DataTables,我希望能够通过名称而不是列号来引用我的mData

目前我的请求如下:

"aoColumns": [
    { "mData": "0" },
    { "mData": "1" },
    { "mData": "4" },
    { "mData": "12" },
],

我希望能够以这种方式提出要求:

"aoColumns": [
        { "mData": "id" },
        { "mData": "name" },
        { "mData": "Amount" },
        { "mData": "Date" },
],

这是我在PHP代码中的专栏:

$aColumns = array( 'id','name','Amount','Date');

我的JSON看起来像这样:

[aaData] => Array
        (
            [0] => Array
                (
                    [0] => 12
                    [1] => Test Account
                    [2] => 38
                    [3] => 03/21/2015 )

谢谢,任何意见都表示赞赏。

2 个答案:

答案 0 :(得分:1)

这是你想要实现的目标吗?

"aoColumns": [
    <?php foreach($aColumns as $column):?>
        { "mData": "<?php echo $column;?>" },
    <?php endforeach;?>
],

答案 1 :(得分:1)

为了能够使用名称而不是数字来引用数据,您应该使用随标准DataTables下载提供的SSP.class.php库(使用当前下载,您可以在examples\server_side\scripts中看到它。这个库你需要在PHP中有一组关联数组。所以你的PHP代码会改变:

$aColumns = array( 'id','name','Amount','Date');

要:

$columns = array(
    array('db' => 'id', 'dt' => 'id'),
    array('db' => 'name', 'dt' => 'name'),
    array('db' => 'Amount', 'dt' => 'Amount'),
    array('db' => 'Date', 'dt' => 'Date')
);

db是数据库中表的名称,dt是DataTables中它的相应名称。这是一个映射。

添加您的详细信息和参数,如下所示:

$table = 'your_table_in_database';

$primaryKey = 'id';

$sql_details = array(
    'user' => 'your_db_username',
    'pass' => 'your_db_password',
    'db'   => 'name_of_your_db',
    'host' => 'localhost_or_your_host'
);

然后JSON使用DataTables提供的SSP类对其进行编码:

require( 'ssp.class.php' );

echo json_encode(SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns));

然后,您将在DataTables初始化中引用这些列,如下所示:

$(document).ready(function() {
    $('#example').dataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "your_directory/your_php_file.php",
        "columns": [
            { "data": "id" },
            { "data": "name" },
            { "data": "Amount" },
            { "data": "Date" }        
        ]
    } );
} );

如果您不想使用SSP并希望手动处理服务器端并使用JSON对象,那么您需要确保将其他属性作为JSON对象的一部分。

您将需要draw属性,这是绘图计数器,每次加载页面时都会递增。您还需要recordsTotal定义哪个是记录总数,最后您将需要recordsFiltered,这是应用过滤器后的记录数(根据定义,它将等于或小于{{ 1}})。

JSON结构的外观示例(来自DataTables示例):

recordsTotal

使用SSP类作为参考然后重新创建自己的代码(这是不需要的,因为SSP被DataTables自己的服务器端数据处理示例用作标准。正如下面提到的davidkonrad,不要重新发明轮子)。我将在这里提供SSP类作为参考,但您可以在我上面提到的目录中找到它。

ssp.class.php(看一下{ "draw": 16, "recordsTotal": 57, "recordsFiltered": 57, "data": [ ... ] } 方法让自己开始):

simple

此处的文档可能有所帮助:http://datatables.net/manual/server-side

您可以从DataTables网站复制的示例是:http://datatables.net/examples/server_side/object_data.html