All Projects → spatie → Laravel Paginateroute

spatie / Laravel Paginateroute

Licence: mit
Laravel router extension to easily use Laravel's paginator without the query string

Projects that are alternatives of or similar to Laravel Paginateroute

Api Restful Con Laravel Guia Definitiva
Repositorio para el código base del curso "API RESTful con Laravel - Guía Definitiva"
Stars: ✭ 95 (-68.95%)
Mutual labels:  laravel, pagination
Lara Head
Easily setup SEO in your laravel project with lara-head ❤️ @code4mk
Stars: ✭ 169 (-44.77%)
Mutual labels:  laravel, seo
Laravel Seo Tools
Laravel Seo package for Content writer/admin/web master who do not know programming but want to edit/update SEO tags from dashboard
Stars: ✭ 99 (-67.65%)
Mutual labels:  laravel, seo
Cursor Pagination
Cursor pagination for your Laravel API
Stars: ✭ 47 (-84.64%)
Mutual labels:  laravel, pagination
Laravel Link Checker
Check all links in a Laravel application
Stars: ✭ 253 (-17.32%)
Mutual labels:  laravel, seo
Lashop
Simple shop based on Laravel 7.3
Stars: ✭ 60 (-80.39%)
Mutual labels:  laravel, seo
Laravel Seo
SEO package made for maximum customization and flexibility
Stars: ✭ 130 (-57.52%)
Mutual labels:  laravel, seo
Vue Datasource
A vue.js component to create dynamic tables
Stars: ✭ 420 (+37.25%)
Mutual labels:  laravel, pagination
Laravelmetatags
The most powerful and extendable tools for managing SEO Meta Tags in your Laravel project
Stars: ✭ 226 (-26.14%)
Mutual labels:  laravel, seo
Seo Manager
Seo Manager Package for Laravel ( with Localization )
Stars: ✭ 192 (-37.25%)
Mutual labels:  laravel, seo
Datagrid
Datagrid for Laravel v5
Stars: ✭ 44 (-85.62%)
Mutual labels:  laravel, pagination
Laravel Robots Middleware
Enable or disable the indexing of your app
Stars: ✭ 259 (-15.36%)
Mutual labels:  laravel, seo
Tables
Bulma themed, VueJS powered Datatable with server-side loading and JSON template setup
Stars: ✭ 575 (+87.91%)
Mutual labels:  laravel, pagination
Laravel Sitemap
Create and generate sitemaps with ease
Stars: ✭ 1,325 (+333.01%)
Mutual labels:  laravel, seo
Laravel Vue Pagination
A Vue.js pagination component for Laravel paginators that works with Bootstrap
Stars: ✭ 541 (+76.8%)
Mutual labels:  laravel, pagination
Open Graph
Library that assists in building Open Graph meta tags
Stars: ✭ 112 (-63.4%)
Mutual labels:  laravel, seo
Laravel Referer
Remember a visitor's original referer
Stars: ✭ 339 (+10.78%)
Mutual labels:  laravel, seo
Laravel Missing Page Redirector
Redirect missing pages in your Laravel application
Stars: ✭ 378 (+23.53%)
Mutual labels:  laravel, seo
Seotools
SEO Tools for Laravel
Stars: ✭ 2,406 (+686.27%)
Mutual labels:  laravel, seo
11r
America's favorite Eleventy blog template.
Stars: ✭ 135 (-55.88%)
Mutual labels:  pagination, seo

🚨 THIS PACKAGE HAS BEEN ABANDONED 🚨

We don't use this package anymore in our own projects and cannot justify the time needed to maintain it anymore. That's why we have chosen to abandon it. Feel free to fork our code and maintain your own copy.

Laravel Paginate Route

Latest Version on Packagist Software License Build Status Quality Score StyleCI Total Downloads

This package adds the paginate route method to support pagination via custom routes instead of query strings. This also allows for easily translatable pagination routes ex. /news/page/2, /nieuws/pagina/2.

Spatie is a webdesign agency in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.

Note: If you're upgrading to 2.0, check out the upgrade guide below.

Postcardware

You're free to use this package (it's MIT-licensed), but if it makes it to your production environment you are required to send us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.

The best postcards will get published on the open source page on our website.

Install

Via Composer

$ composer require spatie/laravel-paginateroute

First register the service provider and facade in your application.

// config/app.php

'providers' => [
    ...
    'Spatie\PaginateRoute\PaginateRouteServiceProvider',
];

'aliases' => [
    ...
    'PaginateRoute' => 'Spatie\PaginateRoute\PaginateRouteFacade',
];

Then register the macros in App\Providers\RouteServiceProvider::boot().

// app/Providers/RouteServiceProvider.php

use PaginateRoute;

// ...

public function boot()
{
    PaginateRoute::registerMacros();

    parent::boot();
}

Usage

The paginate route macro will register two routes for you.

// app/Http/routes.php

// Generates /users & /users/page/{page}
Route::paginate('users', '[email protected]');

In your route's action you can just use Laravel's regular pagination methods.

// app/Http/Controllers/UsersController.php

public function index()
{
    return view('users.index', ['users' => \App\User::simplePaginate(5)]);
}

If you want to customize or add translations for the "page" url segment, you can publish the language files.

$ php artisan vendor:publish --provider="Spatie\PaginateRoute\PaginateRouteServiceProvider"

Generating Url's

Since Laravel's paginator url's will still use a query string, PaginateRoute has it's own url generator and page helper functions.

{{-- $users is an instance of \Illuminate\Contracts\Pagination\Paginator --}}

@if(PaginateRoute::hasPreviousPage())
  <a href="{{ PaginateRoute::previousPageUrl() }}">Previous</a>
@endif

@if(PaginateRoute::hasNextPage($users))
  <a href="{{ PaginateRoute::nextPageUrl($users) }}">Next</a>
@endif

The nextPage functions require the paginator instance as a parameter, so they can determine whether there are any more records.

/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return int|null
 */
public function nextPage(Paginator $paginator)
/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return bool
 */
public function hasNextPage(Paginator $paginator)
/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return string|null
 */
public function nextPageUrl(Paginator $paginator)
/**
 * @return int|null
 */
public function previousPage()
/**
 * @return bool
 */
public function hasPreviousPage()
/**
 * @param  bool $full
 * @return string|null
 */
public function previousPageUrl($full = false)
/**
 * @param int  $page
 * @param bool $full
 * @return string
 */
public function pageUrl($page, $full = false)

If $full is true, the first page will be a fully qualified url. Ex. /users/page/1 instead if just /users (this is the default).

To retrieve the url of a specific page of a paginated route, that isn't the current route, there's the addPageQuery function.

/**
 * @param string $url
 * @param int $page
 * @param bool $full
 * @return string
 */
public function addPageQuery($url, $page, $full = false)

You can also retrieve an array with all available urls. These can be rendered as a plain html list with page numbers. Note that these functions require a LengthAwarePaginator.

/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @return array
 */
public function allUrls(LengthAwarePaginator $paginator, $full = false)
/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @param  string $class
 * @param  bool $additionalLinks
 * @return string
 */
public function renderPageList(LengthAwarePaginator $paginator, $full = false, $class = null, $additionalLinks = false)
<!-- Example output: -->
<ul class="pagination">
    <li><a href="http://example.com/news">1</a></li>
    <li><a href="http://example.com/news/page/2">2</a></li>
    <li class="active"><a href="http://example.com/news/page/3">3</a></li>
    <li><a href="http://example.com/news/page/4">4</a></li>
    <li><a href="http://example.com/news/page/4">&raquo;</a></li>
</ul>

You can render link tags to mark previous and next page for SEO. Note that these functions require a LengthAwarePaginator.

/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @return string
 */
public function renderRelLinks(LengthAwarePaginator $paginator, $full = false)
<!-- Example output: -->
<link rel="prev" href="http://example.com/news/page/2" />
<link rel="next" href="http://example.com/news/page/4" />

Tests

The package contains some integration/smoke tests, set up with Orchestra. The tests can be run via phpunit.

$ phpunit

Upgrading

1.x => 2.0

The 2.0 release changes the route macro to only register one route with the entire query in it, so providing a page parameter to the action link is no longer possible.

For example, action('[email protected]', ['page' => 3]) is no longer possible, and should be replaced by PaginateRoute::addPageQuery(action('[email protected]'), 3).

Changelog

Please see CHANGELOG for more information what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

About Spatie

Spatie is a webdesign agency in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].