December 20, 2012
I love Joomla. I love the software, and I love the community. I started using Mambo (Joomla's predecessor) in 2003, and I was first attracted to it because it had the most intuitive user interface of all of the open source CMS's that I evaluated at the time. In the 9 years since I started using the system, not much has changed in the workflow of the Joomla administrator.
Sure, we've had updates to the admin template, and Joomla 3.0 represents a huge leap forward in the user interface (hat tip), but the underlying workflow is still pretty much the same as it has always been. Obviously I'm over simplifying and generalizing to prove a point, so please don't try to argue with me all the ways the UI has improved over the years. I get that, but I'm talking about workflow and not UI.
A common question I get from new Joomla users is "How do I add a page?" The answer may vary depending on your preferred strategies for working with Joomla, but here is the basic answer:
Tired yet? In order to add a single page of content to your site, you have to go to 3 (3!) separate managers: the article manager, menu item manager, and module manager. This makes perfect sense to me as someone who has used this system for 9 years, but it's confusing and difficult to remember all of these steps for a new user.
The way I see it, we are dealing with 3 issues:
Finally, we're getting down to a proposed solution! What I am proposing may seem pretty radical, especially in the Joomla community where "the way we've always done it" is dogma and "at least it's not as confusing as Drupal" is an excuse for keeping the status quo. I'm not making these suggestions for the 3.x family of Joomla. I don't think major changes like this need to happen in a .x version. These changes, if they ever occur, should come in 4.0.
First, I would change the administrator menu. Here is the proposed new structure:
Here's where the radical part comes in. Pages are simply menu items with a new name and a new UI for managing them. I want to separate the connection between what we now call "Menu Items" and the visible navigation elements (menus) on the website. The reason for this is that these items contain a ton of information about exactly what gets loaded onto a particular page, and sometimes we have to create them in what I call "Hidden" menus just so that they exist but are not displayed in any menus on the front end.
Within this proposed new struture, the typical answer to the question "How do I add a page?" will go something like this:
Done. That's all there is to it. It's all done in one interface rather than having to jump to 3 different interfaces, so a site administrator can quickly add new pages without having to remember to jump to the module manager or the menu manager. In the list of pages, there should be a link to the page on the frontend of the site in accordance with the SEF rules set in the global configuration. Now, notice that the page is accessible on the frontend without having to create a "menu item" to point to it. For all intents and purposes, it's the same thing, but calling it a "page" instead of a "menu item" makes a huge difference for preventing user confusion.
One potential issue with the term "pages" is that some pages are actually collections of other pages. Take blogs for example. A blog page is a list of articles that each technically have their own "page" on the front end. In this scenario, they would all still share the same page id they same way they currently share the same menu "itemid". I don't believe that needs to change for the sake of using the term "pages," but that does bring us to the third problem.
In Joomla, you live and die by the Itemid. If you've been around for a while, you know this instinctively. If you are new to Joomla, this doesn't make sense. All you want to do is link to an article, so why do you have to have a menu item and an Itemid in the URL?
The reason is because almost everything that goes on a page is controlled by that Itemid. If you want to add a module to a page, you choose that page by selecting the menu item associated with that page in the module manager. The problem with this concept is, pages are defined by much more than just the Itemid. A blog is a good example. The blog page that lists the articles is a page, and each article has its own page, but they all share the same Itemid so they all have the same modules applied to them (unless you are able to get creative with your template, but you shouldn't have to do that).
If we move to the pages concept, where modules can be added and managed within the page editor, we can add some flexibility in the rules that control when a module is loaded. Rather than relying on a single rule based on the Itemid, new rules can be put in place by each component for their particular views. In a blog, for example, you can set a module to display on a page only if the view is the category view. That way, the module wouldn't display for each article page, because the view is "article" on those pages. You could even go as far as to load a module only for a specific article based on that article's id. This concept could extend out to any component, and the available rules can be defined in the component's manifest xml file similar to how its configuration parameters are defined.
Ideally, the same new rules that are used to apply modules to pages can also be used to set which template is loaded on a given page or sub page. This would be particularly useful if you wanted a completely different layout on blog category views and article views.
Menus would no longer carry the weight that the currently have in Joomla. Menus would simply be lists of links that point to pages. When you create a menu item, all you have to do is select the page you want it to point to. You only create the menus and menu items you need for the visible navigation elements on the front end of your website. Menu items could even be created on-the-fly.
So what's next? That's a good question. Honestly, I don't know. The purpose of this post is to get people talking about Joomla's workflow and suggest ways to improve it. If the ideas here get any traction with the powers that be, I'd love to help implement them and make them a reality. Ideas don't go anywhere if we don't share them, so this is me sharing my ideas.
Feel free to post comments here: https://www.facebook.com/manoscrafted/posts/312996822142518