Make the pagination for arrays or Collections
$ composer require amamarul/laravel-paginator
Amamarul\Paginator\PaginatorServiceProvider::class,
- Array
use Amamarul\Paginator\Paginator;
use Illuminate\Http\Request;
public function index(Request $request)
{
$currentPage = isset($request['page']) ? (int) $request['page'] : 1;
$perPage = 1;
$path = $request->path();
$items = array_map(function ($value) {
return [
'name' => 'User #' . $value,
'url' => '/user/' . $value,
];
}, range(1,1000));
$paginator = new Paginator($items);
$paginator = $paginator->paginate($currentPage,$perPage, $path);
return view('index')->with('paginator', $paginator);
}
- Collection
use App\User;
use Amamarul\Paginator\Paginator;
use Illuminate\Http\Request;
public function index(Request $request)
{
$currentPage = isset($request['page']) ? (int) $request['page'] : 1;
$perPage = 1;
$path = $request->path();
$items = User::with('profile')->get()->sortBy('profile.name');
$paginator = new Paginator($items);
$paginator = $paginator->paginate($currentPage,$perPage, $path);
return view('index')->with('paginator', $paginator);
}
@foreach ($paginator->items() as $element)
<a href="{!!$element['url']!!}"><h3>{!!$element['name']!!}</h3></a>
@endforeach
{!! $paginator->render() !!}
By default the url has page
name
http://127.0.0.1:8000/?page=3
If you´d like to change the page name yo must only add a fourth parameter with the name.
Like this
use App\User;
use Amamarul\Paginator\Paginator;
use Illuminate\Http\Request;
public function index(Request $request)
{
$currentPage = isset($request[$pageName]) ? (int) $request[$pageName] : 1;
$perPage = 1;
$path = $request->path();
$pageName = 'custom-name';
$items = User::with('profile')->get()->sortBy('profile.name');
$paginator = new Paginator($items);
$paginator = $paginator->paginate($currentPage,$perPage, $path, $pageName);
return view('index')->with('paginator', $paginator);
}
Created by Maru Amallo-amamarul