The Open Source CMS, Drupal, is approaching its 20th birthday and has evolved significantly over the years.
When Drupal 8 was introduced in 2015, the migration process wasn't easy. Upgrading was as complex as building a site from scratch, and migrating content added another layer of complexity. These challenges raised concerns for developers and businesses about the launch of Drupal 9.
Fortunately, managing upgrades will be easier in the future. This means that migrating from Drupal 7 to Drupal 9 will be similar in effort to migrating from Drupal 7 to Drupal 8. This shift promises a more stable update process and manageable development. But what's the hype around Drupal 9, and why should you consider upgrading?
Let’s find out!
What Is Drupal 9?
Drupal 9 is essentially Drupal 8.9 with deprecated code removed. It remains familiar to everyone, including editors, site builders, and developers. Drupal 8.8.0 was the last release to deprecate code for Drupal 9. Developed with an API-first approach, Drupal 9 offers structural tools to define editorial workflows.
Why Was The Code Deprecated?
Deprecating code during Drupal 8's development allowed issues to be worked out even before Drupal 9's release. It avoided the need for extensive refactoring, simplifying the migration process. However, migrating from Drupal 7 to Drupal 9 can still be a significant task for sites running different versions of Drupal.
Why Upgrade To Drupal 9?
The big questions are whether it's time to consider Drupal again and how urgent this migration is.
Drupal 8.9, the final version of Drupal 8, will receive bug fixes and security coverage only until November 2021. Drupal 9's development and security updates will continue beyond that timeline.
This means you can stick with Drupal 8.9 until the end of 2021.
However, it's important to note that Drupal 9 is ideal for sites looking for forward compatibility with later releases.
While not all Drupal 8 code is compatible with Drupal 9, it offers an excellent opportunity for businesses considering a migration from other CMSs to leverage Drupal 9's features.
How To Prepare For Drupal 9 Upgrade?
Primarily, check the status of your favorite contributed modules if they are Drupal 9 compatible or not because eventually, you would want your site to be migrated to Drupal 9.
For more, below is the checklist to begin with the upgrade process.
Drupal 9 Update Checklist
Before diving into the migration process, it's essential to ensure that your favorite contributed modules are Drupal 9 compatible. Here's a checklist to help you get started:
Ensure your site is up to the latest minor version, Drupal 8.9. Upgrades aren't supported beyond Drupal 8.8.
- Upgrade to the newest PHP requirements, PHP 7.3+.
- Deprecate code on your site and fix it if necessary with the help of the Upgrade Status module.
Determine whether your site is based on Composer or tarballs, as this affects the upgrade process.
Tools & Modules For Upgrading
To assist you in the upgrade process, consider using the following tools and modules:
- Core Migrate Module Suite: For migrating your content and site configuration.
- Upgrade Status Module: Provides information about the availability of contributed projects.
- Upgrade Rector: Automates module updates for Drupal 8 sites with common deprecated code to the latest Drupal 9-compatible code.
- Drupal Module Upgrader: Scans and converts outdated code on your Drupal 7 site.
Drupal 7 To Drupal 9 Migration - The Big Leap
In one of our earlier blogs Picking The Right Drupal Migration Strategy, we discussed what are the different migration approaches and how this is a good chance to refactor the content structure.
In this blog, we will see practical examples of the above steps in a way that would not be overwhelming for all the stakeholders.
Handling The Content types, Taxonomy And Modules First
Considered as the building block in structured authoring in Drupal, a content type primarily consists of two important elements.
- Content type base configuration
- Content type fields
In a content type, the base configuration defines the default behavior and properties of the content type while they permit the creation of a set of fields that are associated together in a meaningful way.
Taxonomy in Drupal: It is a powerful core module that allows one to connect, relate and classify the website’s content.
Thus, the practice of classifying content i.e. Taxonomy can be used in workflow which will further customize a particular or defined sections of the website with various themes.
We have highlighted the importance of handling the content when doing a migration in our earlier blogs Performing Drupal 9 Content Migration
To understand the content on our site better, it helps to look at the content with a fresh perspective. One of the ways in which it can be done is by categorizing the available content types. Some of the options are mentioned below.
- Rely on the body field as a primary source of information
- Rich in fields with different data types
Categorization such as above can help us optimize the target site. For example:
- Merging content types that rely on body field into a basic page with a mapping field to Drupal 7 content type
- We also need to decide which content types are not used and avoid them
Each content type can be documented through the following
- Field level requirements
- Content Retention policy (what to migrate and what not?)
- What are the aggregate pages for the content type and type of filtering required?
- What does the content view page look like and what should be displayed?
- Migration considerations specific to content type and assumptions made
A migration like this is also a good time to revisit the taxonomies, number of users, and roles used in the site and add/remove items as needed.
This is the area where we need to be careful not to assume that everything is needed in the new site. During a Drupal Development site, it is natural for a lot of modules to be added but not used.
We recommend classifying the modules based on MoSCoW rules of prioritization.
Required Modules (Must-Haves and Should-Haves)
The ones that fall under this category are mentioned below.
- Core modules in Drupal 7 and contributed modules in Drupal 7 which are now in Drupal 9 core
- Contributed modules in Drupal 7 which are actively used by administrators and editors. Examples include performance modules like memcache, basic utility modules like admin menu, XML sitemap, etc.
Optional Modules (Could-Haves)
Modules that are used in Drupal 7 but are not needed in the initial phases of the site and can be included only if needed (like Features, Rules, and Panels), fall in this category. It is because a lot can be achieved with Drupal 9 which was only possible via a contributed module in Drupal 7.
It is important to validate the need for each module (contributed and custom). Besides this, try to have only the minimal modules in Drupal 9 as it eases the maintenance of the site during the longer run.
Bringing the Roles and Content Workflow to work together
As far as roles are concerned, below are the recommended steps.
- Validate existing roles and redefine them based on actions done by the user
- Use combinations of roles for a user to achieve the actions they did on the Drupal 7 site
- If access to site content needs to be based on their categorization, the Permissions by Term module might be helpful
- Remove permissions that are duplicate or no more required
- If the control of the site needs to be decentralized, then the Group module is recommended
- Check for active users and only migrate them
- If the number of users is less, then it is better to do the new role mapping manually, as achieving them via migration scripts would be time-consuming considering the mapping process is a one-time migration activity
For the content workflow,
- Define clear content moderation states which each role can perform
- For sites with a simple workflow Drupal core’s Content moderation module is recommended
- For sites that used the Workflow module in Drupal 7 using the same in Drupal 9 would make the migration easy as there is an upgrade path
- If the site needs a workflow dashboard, email notifications Workbench suite with Workbench, Workbench Moderation, and Workbench Email serve well
How are we going to manage the media?
The need for media depends on the following:
- Is the media in the Drupal 7 site restricted to a specific type like only images and video or is it diverse enough like Files, Audio scripts, and any other custom media types which are specific to the site?
- What is the future scope of media in the site in Drupal 9 ? Are we expecting the site to be media-rich with lots of metadata?
- Do we need the same field to store different types of files?
Based on the above, we can decide if we need to have simple image and video fields to store the media. Another option can be leveraging the media module in a core that allows us to store different types of files in the same field. Custom media types can also be created with metadata.
It’s worth noting that the community has often thought of moving to media as part of the default Drupal install. That being said, it is extremely unlikely that simple file fields will disappear from the core in the foreseeable future. But if you are planning to pick media, you’re in good company.
Check references for more detailed approaches for migrating media
Based on the path we choose, we have some supporting modules.
- Simple Image/Video/File field path - File Entity Browser to browse files
- Media field in Drupal core - organize media with Media Directories module, Bulk Upload to upload a lot of files in one go
NOTE: Media Directories module provides only virtual directories and is not physical mapping to actual directories in the file system. Work in progress for the same. There is also work going on to support drag and drop for the media library.
How Does This Affect My Site?
Like the above list indicates, the migration for Drupal 7 and Drupal 8 versions will be different. Therefore, the next big aspect is how distinguished will it be? What will it mean for sites at different versions of Drupal? Let’s decode it individually:
If Your Site Is In Drupal 8
Drupal 8 to 9 migration is more like upgrading the minor versions of Drupal 8. You can give it a pause and skip all the upgrade hassle for now if your site is at Drupal 8.9 version.
There are a few permissions and modules marked as not supported for Drupal 8.9 and they require Drupal 9 upgrade.
Therefore, it is for you to check if your favorite contributed modules and features are supported or not.
To know more about upgrading your Drupal 8 site with details, check out this video!
If Your Site Is In Drupal 7
In case you are a long term owner of a Drupal 7 site, migration can be a daunting thought. But here’s a sign of relief: community support for Drupal 7 will be available till November 2023.
For a simple site, the Migrate Drupal module could help, but moving the "theme" over will require custom development. You can check here for details.
Moreover, you can hinge on Drupal 7 Long Term Support (it is a short term and less secured fix, and we don’t recommend it).
The migration journey from Drupal 7 to Drupal 9 will be discrete for each site. It might not be a simple one if you own a more complex site, and this is where we can help. Even for site owners looking for a new CMS, Drupal 9 can be your considerate choice.
Regardless of being on D7 or D8, you can start preparing to upgrade your Drupal site as soon as possible.
Drupal 7 was launched nine years ago, and this is the perfect time for some reassessment of the needs of content editors and site users. It is also important to evaluate business continuity aspects of maintaining the software and updating your systems.
These questions might help you address how the migration can serve today's audience in a better way:
- How relevant and secure are your existing features and modules?
- What’s the scope of migration for you, how much time and budget can you assign, and what developer skillset at hand do you possess?
- What will be the impact of design and architecture after the upgrade on the content on the existing site?
With these questions to answer and a migration journey to undertake, you might need experts in your corner and partners who can extend a helping hand.
A good time to do some field re-engineering
The goal to achieve from field re-engineering is to look at the data types of each field and validate if we are doing justice to them.
Below are some incorrect examples of field types commonly found in Drupal 7.
- Plain text is used where it should have been Date field
- CkEditor is being used where it should have been plain text
We can either do the following at the destination site
- change the field types and move the data (we might need to check if the data type between source and destination is compatible in this case )
- move them to the same type and then migrate from old to new field type on a case by case basis
This will immensely improve the editorial experience.
Other than the above aspects, it is important to also consider the different integrations available in the current site and how we are going to achieve them in the migrated site.
If these are custom integrations you have written, then you would have to rewrite these modules to be compatible with Drupal 9. That is a much larger topic and beyond the scope of this article.
Expected Drupal 9.1 Features
While Drupal 9 recently launched, the process of updating dependencies and removing deprecated code will continue in the coming months. No major updates are expected until the release of Drupal 9.1. The community is working on introducing a new default frontend theme, Olivero, which is expected to become an experimental theme in the upcoming update.
Drupal 9.1.0 is slated for release by the end of 2020 and will introduce new deprecations and features, setting the stage for Drupal 10's development within Drupal 9.
Interesting Final Notes
- The end-of-life date for Drupal 7 has been postponed to November 2023, providing more time for users to transition. Drupal 8, however, will reach its end-of-life on November 2, 2021, due to Symfony 3's end-of-life. Migrating directly from Drupal 7 to Drupal 9 is now supported with the core Migrate module.
- Regardless of your current Drupal version, preparing to upgrade your site is a proactive move. This is an opportunity to not only meet today's audience needs but also to evaluate business continuity and system maintenance.
Want to learn more? Schedule a call with our experts.
In short, unlike Drupal 7 and D8, Drupal 9 can seamlessly use modules, customizations, and data created in Drupal 8. The Drupal community emphasizes breaking code rather than data to maintain Drupal's speed, simplicity, up-to-dateness, and cleanliness. For a more in-depth comparison between Drupal 7 and Drupal 9, please read our blog.
Migrating views from Drupal 7 to Drupal 9 (or Drupal 10) involves a series of steps. To get a step-by-step guide on configuring your Drupal 6 or Drupal 7 database in Drupal upgrade, and executing the migration, please consult our blog for detailed instructions.
Drupal 7's official End of Life has been extended to 5 January 2025. However, it's essential to understand the implications of this transition. To learn more about the options and considerations for migrating from Drupal 7, please explore our comprehensive blog on Drupal 7 End of Life.
Kalaiselvan Swamy, Drupal Staff Engineer
A spiritual at heart, Kalai never forgets that life is a gift. Also a hollywood movie buff and an ambivert, when not at work, you will find him spending time with his son.