PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Wednesday, January 5, 2022

[FIXED] How to remove query string page from the first page of laravel pagination?

 January 05, 2022     laravel, laravel-5, laravel-5.4, pagination, php     No comments   

Issue

I'm using laravel-5.4 pagination like the following:

public function index()
    {
        $jobs = Job::paginate(5);
        return view('job.index', compact('jobs'));
    }

In the view:

{{ $jobs->links() }}

There is a problem of generating two typical pages: /job and /job?page=1 the two page has the same contents.

I want to do anything that removes the query string page from the first page of the pagination.

I have tried the following:

if ($jobs->onFirstPage()){
  $jobs->setPageName('');
} 

But this corrupt the pagination, i.e the links of pages does not load correctly and the query string value remains for all pages.


Solution

The effective solution for this issue that I have found is to edit the pagination template.

First publish the pagination template from the vendors using the following command from the root of the project:

php artisan vendor:publish --tag=laravel-pagination

Now a file at resources/views/vendor/pagination/default.blade.php should be found and it could be edited like the following using str_replace() for the urls of each page and back navigation button:

<li><a href="{{str_replace('?page=1','',$paginator->previousPageUrl())}}" title="{{__('Previous')}}" rel="prev">{{$foxPrev}}</a></li>

and

 <li><a href="{{str_replace('?page=1','',$url)}}">{{ $page }}</a></li>

Update:

A bug was found with ?page=10 so instead of using str_replace we should using preg_replace like the following:

<li><a href="{{preg_replace('/\?page=[1]$/','',$url)}}">{{ $page }}</a></li>

Update 2:

In case of using any customized name for the page number parameter other than page, we could use the paginator getter for the $pageName property like the following in the pagination template:

<li><a href="{{preg_replace('/\?'.$paginator->getPageName().'=[1]$/','',$url)}}">{{ $page }}</a></li>

To know more about how to use more than one pagination on the same page or how to customize the page number parameter $pageName from view, checkout this answer



Answered By - SaidbakR
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing