Structuring Your Drupal Website
Drupal has always been a strong content management platform. The number one reason we use Drupal is because it so easily adapts to our clients’ content models. It enables us to easily map and structure many different types of complex content.
Let’s look at how we go about structuring that content in Drupal, and how we use terminology to define, group and link different types of content.
In Drupal 8, every piece of content is an entity. To structure a site, you want to define different types of entities that will store different types of content.
Let’s take a publishing website as an example. We’re going to create entities for: books, authors, editions, interviews, reviews, book collections, book categories, and so on. You can start by drawing a map of all these nouns. I like mapping out content on a whiteboard because it’s easy to erase and change your mind and it’s bigger than a piece of paper.
Once you’ve mapped all the different types of content that will exist on your site, identify the connections between them. Simply draw arrows arrows between the content types that are related to one another.
A book has an author (or multiple authors): draw an arrow from book to author
A book can have editions: draw an arrow from book to edition
A book can have reviews, interviews: connect these
A book collection has books: group books by collection
A book has categories: associate books with topics and categories
Entity Terminology: Bundles, Nodes, Taxonomy, Paragraphs, Blocks
Nodes, taxonomy terms, custom blocks, and paragraphs are all different types of entities. Each entity type has unique properties that make it better suited for different use cases and content types.
Here’s a breakdown of the most important Drupal terminology you need to know to structure your content:
- Node: A page of content is a node, accessible via its own URL
- Taxonomy terms: Used to categorize other content, taxonomy terms live in a hierarchy. They can be used to filter content and create unique landing pages.
- Paragraphs: Content that lives within other content and doesn’t need a dedicated URL is a paragraph.
- Custom Block: Any content that will be reused throughout the site becomes a custom block. You can also embed a block in a node.
- Bundle: An entity sub-type is a bundle. Usually, bundles can have unique fields and settings.
- Field: A field is a component of the content, i.e. an ISBN, author’s name, or book title
Applying this Model to our Example Project
Here’s how we would decide which entity type to use for each content type:
Books and authors become nodes
Book categories become taxonomy terms
Interviews, reviews and editions could be paragraphs
Books and authors would be node bundles (aka content types)
A book category is a taxonomy bundle (aka vocabulary)
A book collection is a block bundle (block type)
Reviews and interviews are paragraph bundles (aka paragraph types)
A book collection that needs to be displayed on several pages becomes a block
Focusing on Each Entity to Create Fields
Once you’re looking at a book, you can start to think about what defines a book.
What information should it have?
Which information needs to be displayed?
How will we filter and order this content?
Will there be a single value for the field or multiple values?
List the various components of the content: title, author, ISBN, covers, genres, editions, reviews, interviews. Each of these will be a field.
Fields in Drupal can be single value (for example, each book has a single ISBN number) or multi-value (a book can have multiple reviews or authors). There are many other fields types that can store the content in a certain way that will affect how it can be displayed or used later (text, date, number, email, link, etc). A field that links one entity to another is a ‘reference’ field.
So far we’ve talked about structuring your content using entities and bundles. But how do users actually access your content? When you’re building out your site map, you’ll probably picture top-level pages. These may link to dynamic lists of content, or they may have sub-pages that are added beneath them.
Linking to Content
In Drupal, we have three main ways to link to content: menus, views, and fields. In general, this is how we use them:
Menus are for static content: Menus are a static hierarchy of content. If you’re creating permanent content on the site that will be relevant for a long time, you’ll probably link to it through a menu.
Views are for dynamic content: Content that is ‘dynamic’ that will be added to frequently and is too abundant to add to a menu will probably be listed and linked to via views (the Drupal term for ‘list of content’).
Entity reference fields or link fields: You can also explicitly add a link from one content item to another using an entity reference field or a link field. For example, if you have a book and you want to have it link to three other hand-selected ‘related books’, you could create a ‘Content’ reference field for this.
You can go through your site map and figure out which pages are static (linked to by the menu) and dynamic content (linked via views). Landing pages tend to be connection pages. For example, a landing page might live in the menu, list a bunch of dynamic pages and also include explicit links to other pages via ‘calls to action’.
Applying Menus and Views to Our Example
Using our example, you may have a static page for ‘About Us’, ‘Contact Information’, or ‘History of Publishing’. These would be created as pages and linked to via the menu.
You may also have a page that lists all the books and another that lists all the authors. Because your lists of books and authors are likely to change often, these lists should be created using views. When you add a new book or a new author, it automatically appears in the list.
Taxonomies make creating lists more interesting because we can create lists of content that are filtered by a particular taxonomy term. For example, if ‘prize winning’ is a book category, a taxonomy allows us to create a list of all the books that are ‘prize-winning’.
Finally, you might have a landing page for an upcoming book tour that includes details about the tour, a link to the book being promoted, and also links to other books by the author.
There are many more things to know to build a site with Drupal. But when you’re planning out your content, you simply need to be able to draw out the structure and communicate this with your team. Knowing the basic Drupal concepts will help you communicate clearly and think about the site’s architecture at a high level.
To read about a real-life project in which we built out book content in Drupal 8, read about our project for Princeton University Press.