mayoz/pagination

Beautiful urls for Laravel pagination

dev-master 2015-11-06 21:12 UTC

This package is auto-updated.

Last update: 2024-10-27 23:01:05 UTC


README

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.