rogercbe/table-sorter

一个包,可以轻松地将排序功能添加到您的任何模型中,并提供创建排序链接的辅助工具。

v1.1.2 2018-01-15 12:47 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:42:49 UTC


README

此包可以轻松地将排序功能添加到您的任何模型中,并提供创建排序链接的辅助工具。

目录

安装

通过Composer获取此包。

composer require rogercbe/table-sorter

安装后,将ServiceProvider添加到您的config/app.php文件中的providers数组中

Rogercbe\TableSorter\TableSorterServiceProvider::class,

最后,要发布表格标题视图,请使用

php artisan vendor:publish

这将在您的resources/views/vendor目录下创建一个名为table-sorter的文件夹,其中包含表格标题视图。

用法

要开始使用此包,您只需要在希望允许排序的模型上使用Sortable特质。此特质允许您使用sortable,它将监听GET请求参数并执行排序记录所需的查询。

use Rogercbe\TableSorter\Sortable;

class User extends Authenticatable
{
	...
	use Sortable;
	...
}

在控制器作用域中,使用sortable方法监听排序

use App\User;

class UsersController extends Controller
{
	public function index()
    {
    	...
        $users = User::sortable()->get()
        ...
    }
}

此方法将响应以下格式的URL:your-site.dev/?sort={COLUMN-TO-SORT}&direction={asc/desc}要构建URL,您必须指定要排序的列名和方向,方向参数是可选的,默认方向为升序。

your-site.dev/?sort={COLUMN}&direction={asc|desc}

排序模型属性

为了按模型属性排序,必须在sort请求变量中指定要排序的列名。

your-site.dev/?sort=name&direction=asc

排序模型关系

为了按模型关系排序,必须在sort变量中使用以下约定relation.column_name

your-site.dev/?sort=company.name&direction=asc

嵌套关系的级别没有限制,它将执行必要的连接查询,以便能够按所选属性排序。

排序模型计数关系

为了按计数关系排序,必须在调用sortable之前执行withCount('relation'),以便Laravel可以预加载包含计数关系的查询并将它附加到模型上。这样,您将在模型上获得可用的relation_count变量,并且我们可以按它排序,这在计数需要约束的情况下特别有用。

your-site.dev/?sort=posts_count&direction=asc
$users = User::withCount('posts')->sortable()->paginate();

排序链接辅助工具

如果您希望生成分页和表格标题链接,此包允许在您的模型上定义表格标题及其选项并渲染它们。

use Rogercbe\TableSorter\Sortable;

class User extends Authenticatable
{
    use Sortable;
    ...
    protected $tableHeaders = [
        'name' => [
        	'title' => 'User Name'
        ],
        'email' => [
        	'class' => ['my-class', 'another-class']
        ],
        'created_at' => [
			'sortable' => 'false',
			'class' => 'one-class'
        ]
    ];
    ...
}

默认情况下,所有标题都是可排序的,因此您不需要在标题配置中指定这一点,只需指定应禁用的标题。标题可以省略,默认情况下将大写列名。如果您希望向标题选择器添加某些类,可以传递一个字符串或一个字符串数组,其中包含应添加的类,如下例所示。

您需要调用sortPaginate()sortSimplePaginate()方法,而不是Laravel的paginate()simplePaginate(),以使用辅助函数渲染分页器和表格标题,要渲染这些链接,您只需在视图中调用sortLinks()方法。

在您的控制器中

...
	public function index()
    {
    	...
        $users = User::sortable()
            ->sortPaginate();
        ...
    }
...

然后在您的视图中

<table>
    <thead>
        {{ $users->sortLinks() }}
    </thead>
    <tbody>
        @foreach($users as $user)
            <tr>
                <td>{{ $user->company->name }}</td>
                <td>{{ $user->name }}</td>
            </tr>
        @endforeach
    </tbody>
<table>
{{ $users->pagination() }}
...

方法 sortLinks() 是一个辅助函数,用于以基本功能渲染您指定的表格标题,创建用于升序或降序排序的链接,并插入箭头来显示方向。默认视图可以发布以进行编辑,或者您可以通过在模型上创建 sortLinksView 属性来指定自己的视图。它接受一个视图的路径作为参数。

方法 pagination() 将责任委托给 links() 方法,由 Laravel 分页器添加,以便对数据进行排序。您可以使用其中任何一个,并自行添加值,它只是一个辅助工具。

贡献

欢迎您通过提交 Pull Request 来为这个软件包做出贡献。

许可证

MIT 许可协议 (MIT)。请参阅 许可文件 以获取更多信息。