Create a Simple Next/Previous Navigation in Drupal 8

Create a Simple Next/Previous Navigation in Drupal 8

FFW Blog - illustration
default avatar
Thought byMatt Korostoff
Senior Solutions Architect
November 19, 2014

In my last post we went over the new Drupal 8 plugin system as it concerns blocks. Today, we're going to take this idea a bit further and create a simple next/previous navigation.

First things first, you're going to want to create another new file at modules/YOURMODULE/src/Plugin/Block/YOURBLOCKNAME.php

Drupal 8 Next Previous Navigation

In my case, this file looks like this:

The Finished Product

(as always, this code is available on github.)

Once this file is in place, I simply navigated to admin/structure/block and placed my block in the main content region.

Changes from Drupal 7

  1. Object oriented code is mandatory
    The big change from Drupal 7 that you probably picked up on immediately is the fact that I had to declare a new class to create this block. Admittedly, I was a little intimidated by this idea at first, but I quickly found that this style was very liberating, and gave me an obvious simple strategy for organizing my code.
  2. EntityFieldQuery has been replaced by Drupal::entityQuery
    If you were using EntityFieldQuery to get entities out of the database in Drupal 7, this won't be much of a culture shock to you. All that's really changed here is the syntax; the core paradigm remains unchanged. So where in Drupal 7 we would have done:
    In Drupal 8 we do:
    All told, not such a big shift if you ask me.
  3. menu_get_object() has been replaced with \Drupal::request()
    You're probably used to using menu_get_object in Drupal 7 to access the node being viewed. That paradigm is gone and replaced with the infinitely more sensible \Drupal::request(). I know that's a little jarring, but try and think back on the first time you heard about menu_get_object(). "Menu? No I want a node, not a menu." This new strategy is way more intuitive.
    Further reading on this subject.
  4. $node->created has been replaced with $node->getCreatedTime()
    This is part of an overall effort to replace direct access to object properties with getter and setter methods. In fact all the properties of a node must now be accessed in this manner.
  5. The l() function has been replaced with \Drupal::l
    This one I'm not crazy about, but it's still pretty simple to do.
    A few things that tripped my up here:
    • Unlike its predecessor, \Drupal::l does not automatically return an aliased path. You first need to lookup your path alias with AliasManager::getAliasByPath
    • The second argument in \Drupal::l is no longer a string, but instead it is an instance of the new Url class.
    • The Url object you pass into \Drupal::l must be constructed Url::fromUri or Url::fromRoute.
drupal 8
Matt Korstoff

Read next:

Orange Google Analytics logo with arrow pointing to blue Google Tag Manager logo.

A why-to and how-to guide from FFW on getting the most out of the measurement tools that integrate with your website.

Nouveau site web pour FFW

Come see the new FFW look and platform

Image of accessibility icons on a blue screen

This Global Accessibility Awareness Day, learn how accessibility and inclusion can change your organization.

Teaser of Planning for Drupal 9 blog

It’s time to start planning for Drupal 9