mayoz/pagination
Laravel Pagination
Create beautiful and SEO friendly links for pagination.
Installation and Requirements
First, you'll need to add the package to the require attribute of your composer.json file:
{
"require": {
"mayoz/pagination": "dev-master"
},
}
Afterwards, run composer update from your command line.
And finaly, open config/app.php. Find 'Illuminate\Pagination\PaginationServiceProvider' and replace with 'Mayoz\Pagination\PaginationServiceProvider' in providers array.
Using
This is very easy. Consider the following examples. I accept to have your model. Create route, controller and view.
Route
Define route in app\Http\routes;
<?php
$router->get('articles/{page?}', [
'as' => 'articles',
'uses' => 'HomeController@articles'
]);
Controller
Cool. Don't write extra code!
<?php namespace App\Http\Controllers;
use App\Article;
class HomeController {
public function articles()
{
$articles = Article::paginate(5);
return view('articles', compact('articles'));
}
}
View
Core pagination class not changed. Can use all the features offered by Laravel.
<ul>
@foreach ($articles as $article)
<li>{{ $article->title }}<li>
@endforeach
</ul>
{!! $articles->links() !!}
You also use;
{!! $articles->appends([ 'sort' => 'vote' ])->links() !!}{!! $articles->links('pagination.special') !!}- or future methods...
Output examples
The following outputs are generated. I think that's enough examples. As possible, SEO friendly. Nevertheless, please check your url. Use canonical metadata if necessary.
Use such as {page?}, if page pattern at the end of the route.
<?php
$router->get('articles/{page?}', [
'as' => 'articles',
'uses' => 'HomeController@articles'
]);
Outputs:
- /articles
- /articles/2
- /articles/3
If {page} pattern in the middle of the route, no need to question mark.
<?php
$router->get('module/{page}/articles', [
'as' => 'module.articles',
'uses' => 'HomeController@articles'
]);
Outputs:
- /module/1/articles
- /module/2/articles
- /module/3/articles
Using special route
If you need to use another route instead of the current route, use the route() method. This method accepts the route name and route arguments.
NOTE: Second arg is optional. This arg for special routes parameters.
Routes
Routes is different but used same controller and view.
<?php
$router->get('articles', [
'as' => 'articles',
'uses' => 'HomeController@articles'
]);
$router->get('articles/{module}/{page?}', [
'as' => 'articles.paginate',
'uses' => 'HomeController@articles'
]);
Controller
The same as the previous definition. Added special route (its name article.paginate) for pagination url builder. This route required one parameter (module) except {page}.
NOTE: Set automatically route parameters on current route.
<?php namespace App\Http\Controllers;
use App\Article;
class HomeController {
public function articles()
{
$articles = Article::paginate(5);
$articles->route('articles.paginate', [ 'module' => 'photo' ]);
return view('articles', compact('articles'));
}
}
Outputs:
- /articles/photo
- /articles/photo/2
- /articles/photo/3
Contribute
Install and use this package. If find bug, fix and send a pull request on the develop branch.
Copyright and License
This package was written by Sercan Çakır. It released under the MIT License. See the LICENSE file for details.
Related Packages
Combines data from multiple models into a single unified query using SQL unions,...
Filtrado, ordenamiento y paginacion declarativa para modelos Eloquent. Auto-desc...