Search icon
Arrow left icon
All Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletters
Free Learning
Arrow right icon
Modernizing Drupal 10 Theme Development

You're reading from  Modernizing Drupal 10 Theme Development

Product type Book
Published in Aug 2023
Publisher Packt
ISBN-13 9781803238098
Pages 360 pages
Edition 1st Edition
Languages
Concepts
Author (1):
Luca Lusso Luca Lusso
Profile icon Luca Lusso

Table of Contents (21) Chapters

Preface 1. Part 1 – Styling Drupal
2. Chapter 1: Setting up a Local Environment 3. Chapter 2: Setting a New Theme and Build Process 4. Chapter 3: How Drupal Renders an HTML Page 5. Chapter 4: Mapping the Design to Drupal Components 6. Chapter 5: Styling the Header and the Footer 7. Chapter 6: Styling the Content 8. Chapter 7: Styling Forms 9. Chapter 8: Styling Views 10. Chapter 9: Styling Blocks 11. Chapter 10: Styling the Maintenance, Taxonomy, Search Results, and 403/404 Pages 12. Part 2 – Advanced Topics
13. Chapter 11: Single Directory Components 14. Chapter 12: Creating Custom Twig Functions and Filters 15. Chapter 13: Making a Theme Configurable 16. Chapter 14: Improving Performance and Accessibility 17. Part 3 – Decoupled Architectures
18. Chapter 15: Building a Decoupled Frontend 19. Index 20. Other Books You May Enjoy

Styling Blocks

In this chapter, we’ll go deeper with Drupal blocks. Blocks are the other element that is needed to build a page, along with controller actions.

You will learn about editorial blocks: how to provide a specific template for them and how to extract raw field values from them. We’ll explore some different ways to retrieve data from an entity field.

You will learn how to style blocks that are defined in code by custom or contributed modules.

Finally, we’ll look at a couple of useful details when rendering blocks provided by Drupal core, such as the page title and breadcrumb.

The topics in this chapter are as follows:

  • Editorial (also known as content) blocks
  • Programmatic blocks
  • Titles and breadcrumbs

Technical requirements

To run the examples in this chapter, make sure to follow the instruction explained in Chapter 1, Setting Up a Local Environment.

You can find the code for this chapter in the GitHub repository: https://github.com/PacktPublishing/Modernizing-Drupal-10-Theme-Development.

Editorial blocks

We saw in previous chapters how to style blocks that contain a menu, a view, or are provided by some internal modules.

But one of the most useful features of the block system is that it provides editorial blocks that an administrator can place on theme regions based on some visibility rules.

Editorial blocks work more or less like nodes. They have block types (bundles), fields, and revisions. The main differences are that a block doesn’t have a URL and it’s rendered on one or more routes based on some visibility rules.

Note:

The Drupal core module that provides editorial blocks has block_content as the machine name, but Custom Block as the human-readable name. Block types are called custom block types.

The demo website has one custom block type defined, called banner, which can be used to provide advertising banners (you can find the list of custom block types here: http://packt.ddev.site/admin/structure/block-content). The banner custom...

Programmatic blocks

The demo website has two blocks defined by modules: one that renders a random quote and one that renders the weather forecast of the next hour for the origin location of a trip.

Blocks are defined as plugins and must follow a set of rules to be available on the frontend, but in the end, a block will return a render array exactly as a controller does.

Both blocks are already available in the alps_quote and alps_weather modules. The weather forecast one, for example, returns this render array:

$build['content'] = [
  '#theme' => 'alps_weather_forecast_single',
  '#forecast' => $forecast['list'][0],
  '#city' => $city,
  '#units' => $this->config
    ->get('alps_weather.settings')->get('units'),
  '#cache' => [
    'max-age' => 10800...

Titles and breadcrumbs

In the component library, we have an atom both for the title and for the breadcrumbs, so we can simply include them. There are just a couple of details to be aware of.

Title

The title template receives a couple of variables that may not seem useful because, in Drupal core, they’re always empty: title_prefix and title_suffix. Those two variables can be filled by a custom or contributed module; if we forget to print them, this may lead to some unexpected behavior.

Our version for the page-title.html.twig template should be like this:

{{ title_prefix }}
{{ include('@atoms/title.html.twig', {
  'title': title,
}) }}
{{ title_suffix }}

Put this code in a file with the same name, in the templates/content folder of the alps_trips theme.

Breadcrumb

Styling a breadcrumb is easy; the template receives only one variable, and our component in Storybook takes care of rendering it in the correct way. Just don’...

lock icon The rest of the chapter is locked
You have been reading a chapter from
Modernizing Drupal 10 Theme Development
Published in: Aug 2023 Publisher: Packt ISBN-13: 9781803238098
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $15.99/month. Cancel anytime}