Recreating a default Joomla 1.5 site using Drupal 6 (Part 1 of 2)

UPDATE (9th Sept 2009):

I've noticed some odd things happening on this server. So sorry the demo site had to be taken offline to due security reasons and i haven't the time to keep it updated.

However, you can download this package and play with it on your localhost. If you plan, on installing it as a live site, please make sure you update Drupal and modules used in this package to the latest versions.

-----------------------------

Over the weekend I was reminiscing over Joomla and why I had decided to go with Drupal. I still miss the wonderful vibrant Joomla community at times and how quick it was to build a website compare to Drupal. But I don’t miss the limitations of Joomla core system. However, Drupal does have it's own issues as well and that is, you tend to find quite often you'll need some kind of glue module (usually some custom code) to tie the pieces of modules together if something more specific is required. 

Anyway, I decided to try to recreate a default Joomla site with Drupal for fun and as an experiment of what Drupal can accomplish without hacking core. To me, hacking core not only makes it difficult for upgrade but it is also evident that a system is not flexible enough to accommodate your requirements. Since there tend to be a bit of an overlap between Joomla and Drupal, one thing for sure is that it couldn't be possible to do it the other way round (creating a Drupal default site using Joomla). Though this isn’t fair to say because Drupal doesn't have any sample data to load for a fresh install so there's nothing for a Joomla site to replicate. First of all, this is not a Drpual vs Joomla comparison article. If you are looking for a comparison article, doing a google search will reveal many.

This practical demo project was created on the fly (over a weekend) and for a bit of fun so expect some roughness around the edges. Most importantly, someone that is going through a transition period from Joomla to Drupal may find it useful as I'll try and outline the key differences in the terminology. At the end of the day, it's silly to try and replicate another CMS, you should really use that CMS instead of copying it's functionality and features. So do not take this article seriously, as i said, it was only for fun.

See screenshot below:

[jDrupal installation]jDrupal install

Once installation completes, you may need to clear the cache (sorry i should have done this before creating the profile install).

[Permission settings]jDrupal Permission

This is going to be a long article so I'm just going to split this into a two part series. Before you read this article, it is assumed that you already know a little about Drupal and Joomla. I also hope this will be helpful for those that are in the middle of switching to Drupal or the other way round.

PART ONE – Creating the site

First thing I was aware of is that it was not going to be possible to replicate some of the features from Joomla using only the Drupal core modules. So I had to plan what contrib. modules were available to accomplish my tasks. Secondly, I didn’t feel like creating a Joomla theme partly because I didn’t have the time as this project was only to be developed in 2 days so back to drupal site to do a quick search. Search results reveal that there was actually a Drupal project called http://www.glorilla.com/, which is a Drupal install profile for a Joomla site. Problem was, it was built for Drupal 5 but i wanted to use 6, and seems to be an abandoned project. Nevertheless, this should be a good starting point. But again problems, it didn’t install and complaint of missing modules. One of them was the remover module, oddly this module does not exist at all? So not wanting to waste any more time. I began to just take the theme (a port of the default Joomla theme) and updated this to work with Drupal 6. The theme was badly written so many things had to be fixed. There’s still styling issues but I was more concern at this point to get a working structure in place that reflect the joomla site structure. Joomla categorization system works as Section --> Categories Drupal categorization system (Taxonomy) works as Vocabulary --> Terms The only content type that exists in Joomla was 'Article' type. In Drupal the default is 'Story' and 'Page' so I changed the ‘Story’ content type to 'Article'. Each Vocabulary is assigned to 'Article' content-type to allow articles to be categorized under a term in the node add/edit content form. Once that was done, I added the content articles and proceeded to create the menu items. Joomla has several default menus already created and Drupal only has 2 menu blocks (Primary and Secondary menus). The following menus were:

Joomla menus:  
Title: Type:
Main Menu mainmenu
User Menu usermenu
Top Menu topmenu
Resources othermenu
Example Pages ExamplePages
Key Concepts keyconcepts
   
Drupal menus:  
Primary Links Primary Links
Secondary Links Secondary Links
Navigation This menu is the main admin menu

We can use Primary Links as the 'Main Menu' and Secondary Links as the ‘Top Menu’. Then created additional menu as follows in Drupal: topmenu, othermenu, ExamplePages, keyconcepts Now that the content is in place and the site navigation is there, I began linking the article to the corresponding menu items. Since Joomla depends heavily on the menu system, I’ve tried not to use Drupal taxonomy to structure the site. These newly created menu are blocks in Drupal and we can assign these blocks to a region to have them show up on the site. I also moved some menu items in the 'Navigation' menu in Drupal into the user menu (such as create content, my account and logout). Next was the Joomla components (Extensions). Components in Joomla extents the core to provided more features as such as photo gallery, ecommerce, blogs and so on. The default Joomla components were quite simple. It has Banner, Contacts, News feeds, Polls, Search, Web Links. Polls, Contacts and search already exist out of the box in Drupal but the contact module is more simplified. To overcome this, Webform module could have been used. Banners and Weblinks components can be created as a Content Type using CCK and Links. It was easy enough to create Weblinks using CCK though i never did create Banners but would have been possible too. See screenshot below:

[Content Construction Kit (CCK) Module]jDrupal CCK

Modules in Joomla are snippet of content that gets pull out from DB to be displayed on the site. Or some times it can be as simple as static content or some code generated to show images. Drupal also has modules but the term used varies greatly between the two CMS. In Drupal, modules can be seen as building blocks of functionality added to further extent the core systems. Some modules can work independently of each other while others depend on a subset of modules for a particular feature. Why, this differ greatly from Joomla is that Joomla usually provides a complete package (Extension) like a sub system that you just plug into core to add a feature and modules are used to display the extensions content as most times. There are also plugins in Joomla, these tend extend more of the internal workings of the system. Blocks in Drupal on the other hand is similar to what modules are in Joomla. So for me to create some of the Joomla modules in Drupal, they will need to be blocks so it can be displayed on the site's theme. Let's look at the difference between blocks and modules. Drupal blocks relies on regions so it can be positioned on the website theme. A theme (or web template) is the frontend of the website that site visitors sees in the web browser. Regions marks the layout of the site, think of it like an invisible wireframe to mark the sections of the layout (header, left sidebar, right sidebar, footer and so forth...). To show the block on specific pages it uses the site URL path. Joomla doesn't use regions but instead uses 'module positioning' and to show a module it needs to be assigned to a menu item. Now that we know the fundamental differences, how do we do this in Drupal. This is where Joomla makes it easy to show content because it has default modules to allow us to pull content out to display say a list of latest articles whereas Drupal doesn't so how can we do this? We can write some code embedded in a block to display content but this can become hard to maintain and you really need to know Drupal more in depth. The other method was to rely on a module called Views. This module is the essential must-have in all Drupal site, in fact i'm some times surprised why it's not included as part of core? Views is a query builder, it has a GUI to allow the site admin to pull out any content from the DB tables and fields and present that information to be styled and displayed on the frontend of the site. So now it's easy to replicate any of the Joomla modules it's functions by creating Views as block. Some pages where created using Views like the frontpage and adding Grid style to show the 4 block of contents below the leading story. It didn't work too well but perhaps using Panels may have resolved it in better ways. I also used views to create the category listings and table view. The table row numbering was achieve by adding a bit of custom code but later discovered that there was a module for this - Views custom field. The Weblinks page uses Views to present it. See screenshot below:

[Views 2 - Weblinks]WebLinks Views

At the stage, things were coming together and the Drupal site is beginning to look more like Joomla, until it came to the admin panel. Drupal and Joomla has a completely different approach to admin control panel. Joomla is very common to many other CMS in that it has a separation between frontend (the part of the site that is viewable by site visitors) and backend (projected control panel only accessible to users that have permission since this part of the site is where all the administration takes place). Drupal on the other hand does not have any distinction between frontend or backend. The only difference is that when a user logins with permission to administer all or parts of the site then some of the menu items for administration will be visible (though this depends on how a site is theme). It does to some degree offer a way to load an administration theme so that you can make it the admin part of the site look different. However, it only adds to more confusion as you browse around the site entering non-admin section and frontend section of the site. Because of the immense differences, it is almost impossible to replicate the same features for admin panel. There have been attempts at creating a separate admin panel. One of them is rootcandy but even this doesn't truly separate it. I did add this to the jDrupal install profile so you can try it out. Rootcandy is far from looking like Joomla admin panel but it's easy enough to style it up and add more icons to the dashboard. Joomla has a side block showing you latest articles and categories in the dashboard, this can easily be created using Views (with Accordion effect) as a block. Okay, failed badly on this part on creating an admin panel. I did end up using admin menu. Of course, nothing to do with trying to make it Joomla but it was a lot quicker to access certain admin sections, and less clutter as well as making Drupal a bit more usable. See screenshot below:

[Rootcandy Admin Theme]rootcandy

One thing to note, it would have been possible to create a Joomla content add/edit form using Interface module but unfortunately it was not available at this time. See screenshot below:

[Interface module]joomla-drupal-content

The trash manager in Joomla could have easily been created using the trash module. One thing i didn't do was the media manager. I have to admit this is quite poor in Drupal compare to Joomla or even Wordpress. I'm sure there maybe a few modules that you can cobbled together for media handling but it was going to take some time to explore so i left it at that. Drupal Modules used to build some of the features in Joomla had was not in Drupal are: Table of content privatemsg TinyMCE (wysiwyg editor) term_node_count (to show the count of articles in a category) Meta tags clean URLS and for defining your own path aliases. In the next final part of this article, i'll be exploring ways that the site could have been build to be a more flexible approach and kind of doing it more the drupal way. I'll also give my own opinions on where the two CMS are heading to add more goodness and to keep their community in joy. I don't claim to be an expert but just expressing my opinions and observations.

Part 2 of this article:

Recreating a default Joomla 1.5 site using Drupal 6 (Part 2 of 2)

UPDATE (9th Sept 2009):

I've noticed some odd things happening on this server. So sorry the demo site had to be taken offline to due security reasons and i haven't the time to keep it updated.

However, you can download this package and play with it on your localhost. If you plan, on installing it as a live site, please make sure you update Drupal and modules used in this package to the latest versions.