Drupal 9 was released on June 3rd and it's the greatest Drupal release ever and still the easiest to upgrade to if your site is up-to-date in the latest 8.x version.
Last week I attended Costa Rican Drupal community meetup and one of the sessions was about the speaker's journey with Drupal. This made me start thinking a lot about my own history with Drupal so I got motivated to put it down and write about it.
Last weekend global Drupal community celebrated Drupal 9 Porting Weekend to speed up contrib modules to get a Drupal 9 compatible release. The date was chosen in honour of the cancelled DrupalCon Minneapolis.
We usually don't want to break already existing functionality. We usually don't want to break already good-looking stuff. That's there where visual regression testing comes to the rescue: it allows you to compare 2 sets of screenshots and find the differences between them.
Breadcrumbs have become a service in Drupal 8; so, in order to customize the breadcrumbs programatically, you need to create a breadcrumb_builder service and define when your service class applies to create the breadcrumbs and actually build the breadcrumbs using the interfaces and functions provided by the API.
In this project we had a really short deadline and the need to have a totally flexible content editor experience; so, we had to combine those two things in order to make a really great project.
In order to do this in Drupal 7 we use the libraries module. For Drupal 8, this keeps being the right way to do it; however, this module is in a huge change process and it's not totally well documented, that's why making this the first time is a real challenge.
As a company that develops sites mainly in Drupal, we had long felt that it is our duty to encourage contributions to Open Source projects, since it's for Free Software that we exist as a web agency.
Drupal 8 comes with a concept named content blocks (also referred as custom blocks in the blocks library). These are block types that you can adjust to your needs and then create blocks based on those types. Every block is an entity.
Some time ago I had to implement a configuration form in Drupal to save multilingual variables and after some research I found that the best way to do it is using the variable module alongside i18n_variable (part of i18n).