Drupal 8

Build a Blog in Drupal 8: Custom Contact Forms

In the last tutorial, we added a few menus to flesh out the site navigation. Let’s now build on this by creating a few contact forms.

In Drupal 7, the Contact module is used to create basic contact forms. When a user fills them out, an email is sent to configured email addresses.

One limitation in Drupal 7 is you can’t modify the fields on the form. You can create different categories but the form stays the same.

In Drupal 8, things have changed. Instead of having a single form, you can now create different contact form types. Following in good old Drupal tradition, these contact form types are fieldable. This means you can add any custom field to them and this let’s you create proper, albeit basic forms.

So in this tutorial, we’ll create a custom contact form called “Drupal question”. This form will be similar to the standard contact form but we’ll add an extra field called “Drupal version”. This will let the user select a version of Drupal from a drop-down list.

Let’s jump right in.

Build a Blog in Drupal 8: Create and Manage Menus

A website’s navigation plays an important part in how easy a site is to use. It’s essential that you spend time fleshing out the overall IA (Information architecture) or you’ll end up with a site that’s hard to use and difficult to navigate through.

Previous versions of Drupal have always offered a simple interface for managing menus, and Drupal 8 is no exception.

In this tutorial, we’ll continue building our site by adding in some menus. We’ll create a custom menu which’ll be used to display links to popular categories, then create an “About us” page and add a menu link to the footer.

Build a Blog in Drupal 8: Managing Blocks

The Block system in Drupal allows you to add arbitrary content into regions within a theme. A block could be as simple as just text or list content using Views.

In Drupal 7, the Block system is pretty limiting. For instance, a single block can only be assigned to a single region. You also have very basic control of hiding and displaying blocks.

To handle these short comings in Drupal 7 you would use Panels for complex layouts and Bean so you can add fields to blocks.

In Drupal 8, the Block system has been revamped and it’s more flexible. The two big improvements: assign a single block to multiple regions and fieldable block types.

In this tutorial, we’ll continue work on our Drupal 8 blog site. We’ll add a static call-to-action which’ll only appear in the sidebar on the blog page. This call-to-action could be some promotional content or a newsletter sign-up form.

Then we’ll create a custom block type which we’ll use to create reusable promotional content that can be added to any blog post.

Build a Blog in Drupal 8: Using Views

Just when you thought Drupal 8 couldn’t get more powerful; I give to you Views in core. Yes, the most installed module in Drupal is now part of core.

No longer will you have to wait for Views to be upgraded to use the latest version of Drupal. Just install Drupal and start building your custom views page or block.

For people who don’t know, Views allows you to list Drupal content. That’s a simple explanation, but it doesn’t give the module the respect it deserves.

For instance, you could create a page (/latest-reviews) which displays all the latest content by content type and sorted by created date. Using the module, you can query the site’s content and display it in a block, table or page just to name a few.

Now that Views is part of core, it’s used throughout the administration section. Take for example the Content (admin/content) and People (admin/people) pages. All of these are powered by Views.

In this tutorial, we’ll continue building our blog site by adding in a few custom views. We’ll create a listing of blog posts for the homepage, a “Recent blog posts” block and we’ll enable Archive view which comes with Drupal but it’s disabled.

Build a Blog in Drupal 8: Adding Comments

If you want to communicate with readers on a blog, the best way to achieve this is by setting up comments. If you’re happy to deal with spam and the occasional troll, then comments are great for communicating with readers and fostering a community.

The functionality has changed a lot in Drupal 8. In Drupal 7, the comments system was fairly rigid. You could only use them on content types and only have a single comment type. If you needed to support multiple comment types like review or feedback, you were out of luck.

In Drupal 8, the comments system has been rebuilt. They can be attached to any entity type by adding a “Comments” field. You can also now have different comment types. This allows you to do all sorts of things like having public and private comments on a single content type.

In the last tutorial, we created a Blog content type and added fields to it. Let’s continue working on it by adding support for comments. We’ll configure the user permissions so that comments can be submitted anonymously, but will need to be approved before they’re published.

Build a Blog in Drupal 8: Content types and Fields

With Drupal 8 on the horizon, now is a good time to start using it. The best way to learn the new version is to build something with it.

Over the next few weeks, I’ll be publishing a series of tutorials teaching you how to create a blog in Drupal 8. The aim of the series is to help new comers, as well as experienced site builders, how to create a blog website using Drupal 8.

Throughout each tutorial, major changes between Drupal 7 and 8 will be highlighted. Even if you know Drupal 7, follow along and you’ll learn what’s new in Drupal 8.

In this first tutorial, you’ll learn how to create a Blog content type and how to add custom fields. You’ll also learn about the Taxonomy system by creating your own vocabulary to categorize blog posts.

How to Create a Custom Field Formatter in Drupal 8

In Drupal, field values are displayed to the end user via a field formatter. Formatters that come with fields are often pretty basic. If you want to change what a field displays, then the best way to do this is to write a custom formatter.

A field formatter in Drupal 7 can be created in a few ways: first with code or using the Custom Formatters module.

On the other hand, if you’re using Display Suite, then you can create a “Display Suite Field” which is similar to a formatter.

But now it’s time to learn how to create a field formatter in Drupal 8.

In this tutorial, we’ll create a custom formatter for the link field that’ll allow an editor to display an embedded YouTube video.

The link field will be used to store a YouTube URL and the formatter will be used to display the embedded video.

How to Create an Administration Form in Drupal 8

The majority of Drupal projects I’ve worked on always needed some type of custom administration form.

In the past, I’ve created a basic form where an editor was able to change a bit of content next to the logo. Instead of hard coding it in the template, the editor would simply change the content from within Drupal.

In Drupal 7, you can build a basic administration form by defining a form and passing it through the system_settings_form() function. And of course, creating a menu item, so the form is accessible.

In Drupal 8, however, things are slightly different.

In this tutorial, I’ll show you how to create a basic administration form in Drupal 8. I’ll create a form for the Code Snippets module that allows a user to select which element (pre or code) should wrap the code displayed by the module.

Upgrading Code Snippets Module to Drupal 8: Creating a Custom Field

With Drupal 8 on the horizon, I decided it was time to start upgrading a contributed module that I maintain called Code Snippets to Drupal 8.

The module in Drupal 7 allows you to store code examples/snippets in a field. It ships with a custom field called “Snippets field” and it renders three form elements, description, source code and syntax highlighting mode (what programming language).

But now it’s time to upgrade the module to Drupal 8.

In this tutorial, I’ll show you how I created a “basic” custom field in Drupal 8. I won’t go into detail about PSR-0, annotations or plugins or this tutorial will be huge.