Migrating from Joomla/Mambo
Drupal 7 will no longer be supported after January 5, 2025. Learn more and find resources for Drupal 7 sites
This guideline focuses on migration from Joomla! to Drupal. It also covers Mambo to some extent, a legacy CMS that was forked to become Joomla!.
It's also aiming to be useful for people who are used to Joomla! and want to learn how to use Drupal, and vice versa.
The term "Drupal 8+" is shorthand for "Drupal 8 and later" (i.e. Drupal 8, 9, 10, 11, and so on).
For migrating from Joomla! to Drupal 8+, you may want to read Skynet Technologies: The ultimate guide for migrating Joomla to Drupal.
Before you start a migration you must understand some differences between both to make sure your migration to be successful:
Joomla! vs Drupal
- Joomla! only supports one Section and one Category for each content, while you can assign Drupal contents to several Sections/Categories.
- Joomla! does not support multi-site setups, so the migration must be put into a certain site if you already setup a multi-site with Drupal.
- Comments on contents are not available in Joomla! by default, while Drupal by default supports comments for all content-types.
Joomla! vs. Drupal Terminology
There are some different terms between Joomla! and Drupal. Here is a list to give you a quick understanding:
Joomla! | Drupal |
---|---|
Template | Theme |
Component | Module. |
Module | Block. |
Plugin | Input filter. |
Menu-Horizontal | Primary Links |
Menu-Vertical | Navigation |
Dynamic Content Item | Story |
Static Content | Page |
Back-end | there is no explicit back-end in Drupal, but the Administration Menu provides a similar interface. |
SEF | Clean URLs (but some docs refer to SEF, too). |
Section | Taxonomy Vocabulary/Term |
Section Title | Taxonomy Term (master) |
Category | Taxonomy Term (child) |
Introtext | Teaser |
Maintext | Body (see explanation below) |
Pathway | Breadcrumb |
Other terms are the same, such as: forum discussion, editor, search, region, comment, subject/title, preview, html tag, view, edit, advertising/banner, log in/log out, profile, avatar, access control, logs, cache, site maintenance, RSS feed, parent-child and snippets.
Directories
Joomla | Drupal 7 | Drupal 8+ |
---|---|---|
plugins | sites/all/modules | modules |
templates | sites/all/themes | themes |
Migrating Joomla! Content/Items
First, you must transfer all Joomla-Sections to Drupal-Categories and transfer Joomla-Categories to Drupal-Term according to their parent. After that, you can transfer Joomla! content/item from jos_content table. Drupal tables for saving article are drupal.node and drupal.node_revisions!
Migrating Joomla! Introtext
Introtext vs Teaser, this is very important, you must know that Drupal can automatic turn the beginning of an article into an introtext. The introtext is called a teaser in Drupal. Now, how to convert Joomla! introtext to Drupal:
1. copy the Joomla! Introtext to drupal.node_revisions:teaser
2. copy the Joomla! Introtext+Maintext to drupal.node_revisions:body
Why does step #2 include the Introtext again? Because in Drupal, there is a possibility to set Teaser different from the First Paragraph of a body. In other words, the First Paragraph of Drupal does not always become a Teaser!
If you want to edit migrated contents later on in Drupal, you should actually copy
Introtext + "<!--break-->" + Maintext
in step #2.
Migrating Joomla! Forum
Here we assume you use Joomlaboard forum for Joomla. In Drupal, forum is built-in, then you only need enable it on administer-module then show it on certain front page section using administer-blocks. You must transfer Parent-Forum Category of Joomlaboard to Drupal-Forum Container and Child-Forum Category to Drupal-Forum Category. (Former version: Again, I am using SQLyog to transfer the entire forum contents, SQLyog is very easy because its GUI.)
Tips
You better not convert the Joomla! templates to Drupal Theme, but edit any existing Drupal theme to meet your requirement. Drupal expects you to use theme engines (PHPtemplate in Drupal 7, and twig in Drupal 8+) and let you use separate templates for various elements.
Conceptual differences between the two
Creating Content and Menu Structure
Joomla's content is stored in a hierachy with content categorisation being heavily intertwined with its menu structure. In Drupal all content is a flat Node where menus and taxonomy "sit on top" of the content. In Joomla!, a common structure for creating with content is this:
Choose where in the Menu article should go » Create Menu item » Define the type of content (e.g. Article) » Input Content
However in Drupal it is potentially simpler.
Create Content » Input Content » Change Settings including Menu placement, taxonomy, etc
However this can create a confusion to Joomla! users not used to the Drupal way. If you try and create a menu item before creating the content (or Node) then the Drupal Menu administration seems comparatively basic. The most complicated aspect of Drupal Menu system is that you have to manually type the path to the content, rather then selecting this from a list. This is not complicated if you create the content first and then change its menu settings whilst editing the content. But if you create the content without assigning menus it can only be found through the administrative menu.
Similarly to categorise content you do that on the actual edit content page. It requires you to have already have set up the Taxonomy for your website. This is powerful because the sorting of your content is not always tied into the Menus. But if you are used to Joomla's way of doing this, there is a Taxonomy Menu module to emulate the Joomla! way.
Helpful Modules
You may also want to check out the following modules:
Migrate - for everything, quite popular as of 2014
User Import - for users
Node Import - for content
Joomla - all-in-one migration, stalled at Drupal 7
Joomla2Drupal - another all-in-one migration, stalled at Drupal 6
Help improve this page
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion