syamsoul/laravel-datatable-ssp

Laravel 的 DataTable SSP。此包允许您在 Laravel 应用中从服务器端管理 DataTable。

安装次数: 22,330

依赖项: 1

建议者: 0

安全: 0

星标: 6

关注者: 2

分支: 6

开放问题: 0

类型:laravel-package

3.9.2 2024-08-25 14:09 UTC

README

Latest Version on Packagist

文档、安装和使用说明

有关详细安装和使用说明,请参阅文档

   

介绍

此包允许您在 Laravel 应用中从服务器端管理 DataTable(受 原始 DataTable SSP 启发)。

有关原始 DataTable SSP 的实现,您可以在此处参阅此处(点击此处)

 

   

要求

  • Laravel 9.0 及以上

   

安装

此包可以在 Laravel 9.0 或更高版本中使用。如果您正在使用 Laravel 的较旧版本,可能存在一些问题。如果出现问题,您可以创建新问题,我会尽快修复。

您可以通过 composer 安装此包

composer require syamsoul/laravel-datatable-ssp

  注意: 请参阅 变更日志 以获取有关最近更改的更多信息。

   

使用 & 参考

* 在您阅读本节之前,您可以查看下面的示例以下示例,以使其更易于理解。

 

如何使用它?

首先,您必须将此行添加到您的控制器中

use SoulDoit\DataTable\SSP;

 

然后,将 SSP 服务注入到控制器的方法中(或使用 PHP new 关键字创建实例)

use SoulDoit\DataTable\SSP;

class MyController extends Controller
{
    public function get(SSP $ssp)
    {
        // or using `new` keyword:
        // $ssp = new SSP();

        $ssp->setColumns($dt_cols_opt);

        $ssp->setQuery($dt_query);

        return $ssp->response()->json();
    }
}

这是

  • $dt_query 是一个返回 QueryBuilder/EloquentBuilder 或可调用的函数的查询构建器/Eloquent 构建器,例如

    $ssp->setQuery(function ($selected_columns) {
        return \App\Models\User::select($selected_columns);
    });
  • $dt_cols_opt 是您列的选项数组,例如

    $ssp->setColumns([
        ['label'=>'ID',         'db'=>'id',            'formatter' => function ($value, $model) {
            return str_pad($value, 5, '0', STR_PAD_LEFT); 
        }],
        ['label'=>'Username',   'db'=>'uname'],
        ['label'=>'Email',      'db'=>'email'],
    ]);

     

    可用的列选项如下

    [   
        'label'         => $dt_col_header,
        'db'            => $db_col_name,
        'class'         => $dt_class,
        'formatter'     => $dt_formatter,
    ],

    这是

    • $dt_col_header 是列的标题(在视图/blade 中的表格),例如
    $dt_col_header = 'Username';
    • $db_col_name 是基于数据库的列名,例如
    $db_col_name = 'uname';
    • $dt_class 是将添加到表格中的类/类名(在视图/blade 中),例如
    $dt_class = 'text-center';
    
    // or use array for multiple classes
    
    $dt_class = ['text-center', 'text-bold'];
    • $dt_formatter 类似于修饰符,可以修改从数据库到视图/blade 显示的数据,例如
    $dt_formatter = function ($value, $model) {
        return ucwords($value);
        // which is 'value' is the value of the column
    
        // or
        return $model->name;
        // which is 'model' is the model of the current row
    
        // or
        return $value . '(#' .$model->id. ')';
    };

   

示例

在 PHP(控制器)中

namespace App\Http\Controllers\AdminPanel;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use SoulDoit\DataTable\SSP;

class UsersController extends Controller
{
    private $ssp;
    
    public function __construct()
    {
        $ssp = new SSP();

        $ssp->enableSearch();
        $ssp->allowExportAllItemsInCsv();
        $ssp->setAllowedItemsPerPage([5, 10, 20, -1]);
        $ssp->frontend()->setFramework('datatablejs');

        $ssp->setColumns([
            ['label'=>'ID',         'db'=>'id',            'formatter' => function ($value, $model) {
                return str_pad($value, 5, '0', STR_PAD_LEFT); 
            }],
            ['label'=>'Email',      'db'=>'email',         ],
            ['label'=>'Username',   'db'=>'uname',         ],
            ['label'=>'Created At', 'db'=>'created_at',    ],
            ['label'=>'Action',     'db'=>'id',            'formatter' => function ($value, $model) {
                $btns = [
                    '<button onclick="edit(\''.$value.'\');">Edit</button>',
                    '<button onclick="delete(\''.$value.'\');">Delete</button>',
                ];
                return implode($btns, " ");
            }],
            ['db'=>'email_verified_at'],
        ]);

        $ssp->setQuery(function ($selected_columns) {
            return \App\Models\User::select($selected_columns)
            ->where('status', 'active')
            ->where(function ($query) {
                $query->where('id', '!=', 1);
                $query->orWhere('uname', '!=', 'superadmin');
            });
        });
        
        $this->ssp = $ssp;
    }
    
    public function page()
    {   
        return view('admin-panel.users-list', [
            'fe_settings' => $this->ssp->frontend()
                ->setInitialSorting('created_at', true) // this means `order created_at desc`
                ->setInitialItemsPerPage(10)
                ->setResponseDataUrl(route('users.get'))
                ->getSettings(true),
        ]);
    }

    public function get()
    {
        return $this->ssp->response()->json();
    }
}

 

在 Blade(视图)中

<html>
    <head>
        <title>Laravel DataTable SSP</title>
    </head>
    <body>
        <table id="datatable_1" class="table table-striped table-bordered" style="width:100%;"></table>
        <script>
        $(document).ready(function(){
            $('#datatable_1').DataTable({!! $fe_settings !!});
        });

        function edit (id) {
            alert(`edit for user with id ${id}`);
        }

        function delete (id) {
            alert(`delete user with id ${id}`);
        }
        </script>
    </body>
</html>

   

支持我

如果您发现此包对您有帮助,请通过向以下地址捐赠一些 BNB(BSC)来支持我。

0x364d8eA5E7a4ce97e89f7b2cb7198d6d5DFe0aCe

   

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件