list-sorter / list-sorter
Lists Sorting Handler in Laravel
v1.0.9
2018-02-09 23:31 UTC
Requires
- php: >=7
Requires (Dev)
- illuminate/http: ^5.5
- phpunit/phpunit: 6.4.*
This package is auto-updated.
Last update: 2024-04-10 06:28:04 UTC
README
List Sorting Handler in Laravel
Usage
Add the sorter to your composer:
composer require list-sorter/list-sorter
In the controller:
$listSorter = new ListSorter($request, [
new SortableItem('name'),
new SortableItem('created_at'),
]);
$listSorter->setDefaultSortBy('created_at');
$listSorter->setDefaultSortDir('desc');
// sort by e.g. name or created_at
$sortBy = $listSorter->getSortBy();
// sort direction e.g. asc or desc
$sortDir = $listSorter->getSortDir();
$items = User::orderBy($sortBy, $sortDir)->paginate(10);
return view('index', [
'items' => $items,
'listSorter' => $listSorter,
]);
Or the shorter version (column and title are determined based on the key):
$listSorter = new ListSorter(
$request,
[
'title',
'created_at',
]
);
$listSorter->setDefaultSortBy('created_at');
$listSorter->setDefaultSortDir('desc');
In the view and the table header:
<thead>
<tr>
@foreach($listSorter->getSortableItems() as $sortableItem)
@if ($sortableItem->isHidden === true)
@continue
@endif
<th>
<a href="{{ request()->fullUrlWithQuery([$listSorter->getSortByKey() => $sortableItem->getKey(), $listSorter->getSortDirKey() => $sortableItem->getNewSortDir(), 'page' => $currentPage]) }}">
{{ $sortableItem->getTitle() }}
@if ($sortableItem->isSelected() === true)
@if (in_array($sortableItem->getSortDir(), ['asc', 'desc']))
<i class="fa fa-sort-{{ $sortableItem->getSortDir() }}" aria-hidden="true"></i>
@else
<i class="fa fa-sort-{{ $listSorter->getSortDir() }}" aria-hidden="true"></i>
@endif
@else
<i class="fa fa-sort" aria-hidden="true"></i>
@endif
</a>
</th>
@endforeach
</tr>
</thead>