Using Laravel's Pagination to create infinite scroll

Infinite scroll is awesome. I use it here in my article feed, where you'll start by seeing the latest few articles, and if you keep scrolling more articles appear. You can see it here: Article feed.

But how do you implement it? In Laravel you do it with pagination.

What is pagination?

Pagination refers to dividing a single document into several discrete pages. With regards to my article feed, this means that instead of showing all my articles at once, they are divided into smaller clumps that are loaded as needed.

This is rather clever, because instead of loading everything at once, the website can “lazy load” articles as needed. Furthermore, the feed becomes more manageable for the user.

How to use pagination in Laravel

The implementation of pagination is Laravel is actually pretty simple, because it is integrated into the query builder and the Eloquent ORM. All you have to do is call the paginate function, like shown below.

Article controller showing how to fetch articles with pagination.

In this example I state that I want to show 5 articles “per page”. This means that 5 articles will be displayed at the beginning, and another 5 will be loaded each time it is triggered. That is all it takes to implement infinite scroll in the controller. Now let's take a look at the view.

Before implementing the lazy loading, I had the following code in the view to display articles:

The article index view before using pagination.

To get the pagination to work with that, you need to wrap it into a <div class="infinite-scroll">, like shown here:

The article index view when using pagination.

Another important thing to note here is the $articles->links(). This shows page number links. I will, however, hide them with jQuery and use an auto trigger to simply append the pages. The jQuery script to do that can be seen here:

jQuery script used to automatically append the next pages.

The script hides the page links that Laravel renders with the links-method, and it enables JScroll on the infinite scroll div. However, to get this script running, what you have to do is to add jQuery (version 1.8.0 or newer) and JScroll. This can be achieved with the following HTML:

Including jQuery and JScroll in the HTML.

And now you're set.

Conclusion

Quite simple, wasn't it?

To sum up, all you had to do was: A live preview of this can be seen here: Article feed. The example I have used throughout the code here was an article feed, however you could implement any type of list with infinite scroll. This could for example be an album, a list of employees, etc. It is really versatile.

I hope you enjoyed this guide, see you in the next one!

Kommentarer

Der er ingen kommentarer.

Tilføj kommentar