The Joomla! Community Portal ™

Introduction to Joomla Multisite Support
Saturday, 23 May 2009 05:24

During the past few weeks I’ve been doing a lot of research and brainstorming to figure out the best approach to add Multi-site support to Joomla. I had many discussions with Marius (my wonderful mentor), after coming up with a few different ideas together, one stood out that maximized compatibility and flexibility (outlined below).

Since multi-site support is a very large undertaking with many subsets of the problem, I’ve decided to have this summer’s project focus on adding multisite support for a single codebase and single database. The approach will be to enhance a single Joomla installation to handle calls from multiple different domains. This has the advantage that data can very easily be shared between sites. The ability to restrict specific data access between sites will then be added. The project can be further expanded following the summer to add various combinations of multi-site support, examples include: one codebase w/multiple databases, multiple codebases w/shared database.

 

How it will work:

* A super administrator can create a new site in the multisite component and specify what URL and table prefix is associated with by a siteid

Which will trigger the following:

- During the creation of the multisite the super administrator will have options on which tables are to be shared if any (users, sessions, content, components etc..)

- The new site install will trigger a mysql query that will create the database structure using the table prefix defined. If tables are being shared this new table will point to that of the shared site.

- A configuration file similar to the main site will be assigned to a specific siteid, allowing super administrators to change options to their site

* Super administrators will be able to go to a section of the mult-isite component to choose if they would like to share specific components between the sites and keep others separate

* On the frontend JRoute will handle URL detection and use the appropriate configuration file to load the proper site.

 

Advantages:

* A simple interface to install multi-site configuration.

* One code base w/one database

* System is compatible will all existing modules/components/plugins

* Will enable more large organizations to adopt Joomla

* Share users, session, modules, components and content between sites

* Enables full control over Joomla URLs, grants ability to make your URLs shorter, user friendly and search engine friendly.  (Example: www.yourdomain.com/index.php?option=com_forum&itemid=54 to forum.yourdomain.com)

 

Disadvantages:

- MySQL5 required (views is not available in earlier versions)

 

Goals:

·         The code must be cross platform and browser compliant

             o   Should work in all major browsers

                  - Firefox

                  -  Google Chrome

                  -  Internet Explorer

                  -  Gecko based browsers

                  -  Opera

                  -  Safari

·         Ease of Installation

          o   The interface must make it easy to install and manage multiple sites

          o   Must interface with other modules and components

               ·         Ease of use

          o   Multi-site options in Joomla should be simple

          o   Provide an option to disable certain websites

          o   Provide more options for data sharing

                -  Allow users to select which modules/components to share between multiple sites

 

Outline of planned approach:

Step 1: Build component that can be used by super administrators to create/edit multi-sites

Step 2: Create installer to deploy separate multi-sites

Step 3: Create installer to deploy shared multi-sites

Step 4: Create configuration loading scheme for sites

Step 5: Add modifications to the core installer for multi-site

Site administrators will be able to create new sites and configure data sharing or limit data to specific sites. The project will be designed for use in Joomla 1.6. Changes to the core code will be kept to a minimum and attempt to be non-invasive.

Tentative Timeline:

I will try to stick to this timeline as close as possible; however, unfortunately roadbumps do come up.

(May 23rd – June 4th) – Implementation of step 1

(June 4th  – June 19th) – Implementation of step 2

(June 19th – July 3rd) – Implementation of step 3

(July 3rd – July 10th) – Implementation of step 4

(July 10th – July 17th) – Implementation of step 5

(July 17th – July 30th) – Testing and debugging

(July 30th – August 10th) – Extra Misc time … Catch up + Testing

 

I have also created a thread on the forums for this project, which can serve as a discussion ground:

http://forum.joomla.org/viewtopic.php?f=231&t=404118

 

I am looking forward to a great summer of code and I am always eager for your suggestions, feedback and help testing.

Keep checking back for updates I will be blogging my entire summer journey here, you can also follow me on twitter. Laughing