LaraGrid 是一个强大且可定制的 Laravel 网格系统包。它提供了一种简单的方法来创建可排序、可过滤的表格并实现分页。该包设计得非常灵活,允许开发者轻松定义列、应用过滤和排序数据。

v1.2.7 2023-12-30 11:36 UTC

README

🚧 此包处于开发阶段,目前尚未准备好在生产环境中使用。 🚧

LaraGrid Logo

Latest Stable Version Total Downloads License

LaraGrid 是一个 Laravel 包,提供了一个强大且可定制的网格系统。它允许您轻松创建可排序、可过滤的表格并实现分页。

目录

需求

  • PHP 8.1 或更高版本
  • Laravel 10.0 或更高版本

安装

要安装 LaraGrid,您需要运行以下命令

composer require bored-programmers/laragrid

可发布

您可以使用以下命令发布包的配置、语言文件和视图

必需

php artisan vendor:publish --tag=laragrid-assets

可选

php artisan vendor:publish --tag=laragrid-config
php artisan vendor:publish --tag=laragrid-lang
php artisan vendor:publish --tag=laragrid-views

待办事项列表

  1. 为所有功能编写测试

基本用法

创建网格

要创建网格,您需要扩展 BaseLaraGrid 类并实现 getColumnsgetDataSource 方法。

use BoredProgrammers\LaraGrid\Components\ColumnComponents\Column;
use BoredProgrammers\LaraGrid\Livewire\BaseLaraGrid;
use Illuminate\Database\Eloquent\Builder;
use BoredProgrammers\LaraGrid\Filters\FilterResetButton;

class MyGrid extends BaseLaraGrid
{

    protected function getColumns(): array
    {
        return [
            Column::make('id', 'ID'),
            Column::make('name', 'Name'),
            // Add more columns as needed
        ];
    }

    protected function getDataSource(): Builder
    {
        return MyModel::query();
    }

}

getColumns 方法中,您定义将在网格中显示的列。`Column::make` 方法接受两个参数:模型字段和标签。

getDataSource 方法应返回您要在网格中显示的模型的 `Illuminate\Database\Eloquent\Builder` 实例。

显示网格

要在 Blade 视图中显示网格,您可以使用 @livewire 或 `` 指令

@livewire('my-grid')
<livewire:my-grid/>

'my-grid' 替换为您的 Livewire 组件的实际名称。

自定义主题

您可以通过扩展 BaseLaraGridTheme 类并设置所需的 CSS 来自定义网格的外观。

use BoredProgrammers\LaraGrid\Theme\BaseLaraGridTheme;
use BoredProgrammers\LaraGrid\Theme\FilterTheme;
use BoredProgrammers\LaraGrid\Theme\TBodyTheme;
use BoredProgrammers\LaraGrid\Theme\THeadTheme;

class MyTheme extends BaseLaraGridTheme
{

    public static function make(): static
    {
        $theme = new static();

        $theme->setTableClass('min-w-full table-auto');

        $theme->setTheadTheme(
            THeadTheme::make()
                ->setTheadClass('pb-4')
                ->setThClass('pb-3 px-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider whitespace-nowrap')
        );

        $theme->setTbodyTheme(
            TBodyTheme::make()
                ->setEmptyMessageClass('text-white')
                ->setTdClass('whitespace-nowrap p-3 text-sm text-gray-500')
                ->setGroupTdClass('whitespace-nowrap flex items-center p-3 text-sm text-gray-500')

                ->setRecordTrClass(fn($record) => $record->role === 'admin' ? 'bg-red-500' : 'bg-white'); // you can also set a closure for record tr class. Pass a closure that returns a string class.
                ->setRecordTrClass('bg-white odd:bg-gray-100'); // If you don't want to set a closure, you can just pass a string class.
        );

        $theme->setFilterTheme(
            FilterTheme::make()
                ->setFilterTextClass('bg-white w-full rounded-xl border border-gray-300')
                ->setFilterSelectClass('bg-white w-full rounded-xl border border-gray-300')
                ->setFilterDateClass('bg-white w-full rounded-xl border border-gray-300')
        );
        
        // those are not all methods, you can find all of them in BaseLaraGridTheme, THeadTheme, TBodyTheme and FilterTheme classes

        return $theme;
    }
    
}

然后,在您的网格类中,您需要覆盖 getTheme 方法并返回您的主题类实例。

    protected function getTheme(): BaseLaraGridTheme
    {
        return MyTheme::make();
    }

默认情况下,有一个名为 TailwindTheme 的主题。

在 URL 中显示过滤和排序

如果您想在 URL 中显示过滤和排序,您需要重写默认的 LaraGrid 属性。您可以这样做:

abstract class MyBaseGrid extends BaseLaraGrid
{

    #[Url]
    public array $filter = [];

    #[Url(except: 'id')]
    public string $sortColumn = 'id';

    #[Url]
    public string $sortDirection = 'desc';

    protected function getFilterResetButton(): FilterResetButton
    {
        return FilterResetButton::make();
    }

    protected function getTheme(): BaseLaraGridTheme
    {
        return MyTheme::make();
    }

}

这些 URL 参数是 livewire 的默认参数,因此您可以根据需要自定义它们,请参阅 livewire 文档

贡献指南

我们欢迎对 LaraGrid 的贡献。如果您想贡献,请分支存储库,进行更改,并提交拉取请求。我们对贡献有一些要求

  • 遵循 PSR-2 编码标准。
  • 为新功能和错误修复编写测试。
  • 仅使用拉取请求进行贡献。

变更日志

有关变更历史的详细信息,请参阅 GitHub 上的 发行版

许可

本项目采用 MIT 许可证。

联系方式

如果您有任何问题或疑虑,请随时在 GitHub 上创建一个 讨论

鸣谢

由来自Bored Programmers的Matěj Černý创建。

致谢

我们想感谢所有帮助使LaraGrid成为更好软件的贡献者。