rogercbe / table-sorter
一个包,可以轻松地将排序功能添加到您的任何模型中,并提供创建排序链接的辅助工具。
Requires
- php: >=5.6.4
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)。请参阅 许可文件 以获取更多信息。