Issue getting next post url


I have a blog page and children of this page which are posts of my blog feed.
On my blog page I manage to call and display all the posts.

When I’m on a specific post, I would like to get the next post url. But I don’t manage to display it so far.

Here’s the code I have in the end of my single post template :

{% set collection = page.collection() %}
{% if not collection.isFirst(page.path) %}
    <a class="nav nav-prev" href="{{ collection.nextSibling(page.path).url }}"> prev </a>
{% endif %}

{% if not collection.isLast(page.path) %}
    <a class="nav nav-next" href="{{ collection.prevSibling(page.path).url }}"> next </a>
{% endif %}

Thank you very much for your help

@Michael Did you have a look at the skeleton Blog Site? Always handy to have a working example at hand…

If you are on a single blog item, the collection of the page is empty… Therefor when I use your code, ‘previous’ and ‘next’ are always the current page.

Looking at the sourcecode of Page, the methods isFirst(), isLast(), nextSibling() and prevSibling() use $this->parent()->collection(), which is the collection of the main blog page.

This means you can fix the issue by using:

{% set collection = page.parent.collection() %}

Or use the code used by Quarks single page template blog-item.html.twig, which looks simpler if you would ask me:

{% if not page.isLast %}
   <a class="btn" href="{{ page.prevSibling.url }}"><i class="fa fa-angle-left"></i> {{ 'BLOG.ITEM.PREV_POST'|t }}</a>
{% endif %}

{% if not page.isFirst %}
   <a class="btn" href="{{ page.nextSibling.url }}">{{ 'BLOG.ITEM.NEXT_POST'|t }} <i class="fa fa-angle-right"></i></a>
{% endif %}
1 Like

Thank you for your answer.

I was missing something important : my single page template didn’t call the blog-item.html.twig part. As soon as I added it, I was able to get urls of next and previous posts.

The order of my posts wasn’t good so I went to the back office > blog and changed the “order by” value from “time” to “folder”.

Since my projects are not real posts, I wanted to display the url of the first project when I’m on the last one of the list. To do this I used the code you provide me :

{% set collection = page.parent.collection() %}

And get the first url doing this :

{% if page.isLast %}
    <a href="{{ collection.first.url }}">next project</a>
{% endif %}

Thank you for your help, this works perfectly !