The Joomla! Community Portal ™

Building Websites with Joomla! 1.5.x
Written by Graham Stoney   
Tuesday, 17 March 2009 21:17
Article Index
Building Websites with Joomla! 1.5.x
Building The Site
Essential Extensions
Other Extensions
Conclusion
All Pages

Introduction

When I decided to publish my Engineering wisdom on the internet, and later to set up a website for my Personal Development business, I knew that I would need a Content Management System (CMS) to do the job properly. Although I was an experienced Embedded Systems Engineer in a past life, I hadn't ever done any serious web publishing before so I had no idea where to start and expected there would be quite a learning curve. I ended up using Joomla!, which has done the job quite nicely. This article describes what I learned along the way, including some tips to save you time setting up a website of your own.

My Requirements

I started off as all good Engineers do, by defining my requirements. And while I was doing that, I started playing around with some different CMS's to see which ones had the best chance of meeting them. The requirements for the CMS were all based on the features that I wanted the site to support, which were as follows:

  • Publish an existing base of content involving mostly text, with some pictures.

  • Allow addition of new content items in the future as inspiration to write them hit.

  • Good Search Engine Optimisation (SEO) with Search Engine Friendly (SEF) URLs.

  • Ability to hyperlink between content items easily.

  • An automatic newsletter containing new content.

  • A random content choice on the home page, so it's always “fresh”.

  • The site should be automated and look after itself when I'm not around.

  • The CMS should be free (or at least cheap) and preferably open-source.

Picking A CMS

Surveying the CMS scene, I first came across Mambo, which I played with for a while. It looked up to the job, but while investigating it I learned that there had been a schism in the Mambo development team which had led to the creation of Joomla! from the same codebase. I concluded that Mambo was a dead-end and started looking at Joomla! instead. I'd also heard that Wordpress was popular but more blog-oriented; and I wanted to create an information base rather than a blog.

I spent several weeks exploring Joomla! to work out exactly how to get it to do what I wanted. Things were looking pretty good, but I also heard good things on the 'net about Drupal, and I decided I should at least look at it as well. Drupal looked cool, but I concluded that Joomla! was more popular. I was pretty much convinced that either one could do the job, but by then I had grown tired of evaluating and actually wanted to begin implementing something, so I never really learned enough about Drupal to offer a fair comparison. It's only when you actually build a complex site with a CMS that you get to learn about the more subtle nuances that get glossed over in comparison tables, yet can make a big difference to how hard or easy it is to implement the features that you want.

Version 1.0 or 1.5?

There are currently two supported branches of Joomla!: 1.0, and 1.5. Version 1.0 is still supported because it is very widely used. Version 1.5 hasn't been around as long, but I took a punt on it being stable enough for a production site, and that punt paid off. The drawback with setting up a new site on version 1.0 is that migrating to 1.5 later will be painful, while the drawback with setting up a site on 1.5 is that releases due to undiscovered security problems are more frequent so it involves slightly more maintenance. Also, not all extensions are available for 1.5 yet. It is possible to use extensions from 1.0 with 1.5 via the legacy plugin, but the word on the streets seemed to be that this should be avoided if at all possible. I was able to find extensions which worked natively with 1.5 for all the functionality I required.

There was a security issue with 1.5.5 which caused some sites to get hacked, and led to a rapid release of 1.5.6. A month later, 1.5.7 came along. Another couple of months later, another security issue led to 1.5.8. And two months later, yet another security issue led to 1.5.9. There's probably a later one by the time you read this. I'm hoping the need for security releases is just a blip on the radar. Nevertheless, if you're setting up a new site and want to stay current, I reckon you'd be crazy to use 1.0.X. Go with the latest 1.5.X version.

Strengths of Joomla!

For my requirements, Joomla!s pros outweighed the cons. I wouldn't expect a much shorter learning curve with anything else given the same requirements, and I didn't know of any off-the-shelf solution would require some customisation to meet my needs.

Joomla! strengths as far as I was concerned were as follows:

  • It met my requirements. This was obviously hugely important.

  • It is actively maintained.

  • Huge user-base with active support forums.

  • Well supported by hosting providers.

  • I could worry about look-and-feel later, just by switching templates.

  • It has an extensive extensions library which is actively maintained.

Core Functionality

On the down side, the core functionality of Joomla! just isn't enough to build a practical modern-day website. For instance, its Search-Engine-Friendliness isn't sufficient if you want your site to rank well; and in my opinion, there's little point to having a site, if you don't. Fortunately the extensions library includes a vast array of additional functionality. Conventional wisdom is that you should utilize the core functionality before diving into the extensions library, but there are some extensions I consider essential functionality for any web site which I believe would be better as part of the core.

Extension functionality tends to lead core functionality over time. I suspect Joomla! may be a victim of its own success in this respect; mass acceptance means the developers must be very careful about things like backwards compatibility. Integrating significant functionality from even the most popular extensions into the core could break some people's sites when they upgrade. Some extensions are better written than others; some fit nicely into the Joomla! architecture, while others are a hack. It's easy for an extension author to publish an update, whereas a core release is a team effort requiring lots of regression testing, translations, and a certain amount of administrative overhead. So it's understandable that the functionality in the extensions is ahead of where the core is at.

Some core features just don't work the way I would expect them to; but perhaps that's just me. For instance, the default home page layout is a blog style where articles appear ordered left-to-right; while the style for blog displays of articles grouped by section or category is ordered top-to-bottom. Other people complain about this on the forum with workarounds available and it's logged as a bug, but the core still handles it inconsistently. Putting workarounds in place for inconsistencies like this wastes time that could otherwise be spent developing your site content.

The Section/Category/Content Model

Joomla! enforces a strict two-level content hierarchy. You can structure your menus any way you want, but the content database is partitioned into Sections, which contain Categories, which contain your content like this:

Section

Category

Articles

I found that my content fit nicely into a two-level hierarchy, with only the occasional exception. But it's the exceptions which are hard to deal with. If my site was significantly more complex such that a three-level hierarchy was necessary, I have no idea how I could have done this with Joomla!

I believe this is the single biggest differentiating factor between Joomla! and Drupal. There are many little ways in which they work differently, but this restriction is built deep into the architecture of Joomla!, while in Drupal, everything is a node in a tree with whatever structure you like. This wasn't a big enough deal for my site to motivate me to learn the intricacies of Drupal once I'd already spent 2 months learning how to get Joomla! to do what I needed though.

Another drawback of the article categorization model in Joomla! is that each article can only occur in a single Section+Category pair. I could not easily, for example, publish a single article on Requirements Tracking in both my System-Engineering/Requirements and Software-Engineering/Requirements categories without duplicating the content or having one of the articles be just a pointer to the other. Neither of these solutions are particularly Search-Engine-Friendly.

Templates

The look and feel of a Joomla! site is dictated by the use of a template. One of the benefits of Joomla!'s popularity is the vast number of templates available on the internet, either for free or relatively cheaply on a pay-per-download basis. Switching templates to change the way your site looks is relatively trivial, although not all templates are of equal quality and they don't all support exactly the same module positions. So sometimes you need to adjust your modules or elements of your site may disappear.

There are two main classes of templates: fixed width or variable width. A variable width template allows the user to resize their browser window and have the elements on the site adjust themselves elastically to optimise the use of screen real-estate. The text in your content reflows to fit automatically. A fixed width template, on the other hand, is designed for a specific window size and works optimally only on a specific screen resolution. Not everyone has the same screen resolution and browser size, so a fixed width template forces some users to scroll to get access to information that they might otherwise be able to see if the content filled the available window. Whether you prefer fixed width or variable width templates is ultimately a matter of personal preference. Designers prefer fixed width because it gives them more control. But visitors like me prefer variable width because they can set their window size to suit whatever else is on their screens.

Call me choosy, but despite the vast array of templates available for Joomla!, I had trouble finding one that I liked. Part of the problem was that most templates are fixed-width, whereas I wanted a variable-width one. Many of the templates had too much screen real-estate devoted to funky graphics of the template itself, and too little devoted to the actual content. My site was intended to be content-rich, so I wanted the template to focus the visitor's attention on the content, not on the pretty graphics of the template. I tried starting from scratch developing a text-only template of my own, but this proved an enormously difficult task given that I had to learn PHP, CSS and the Joomla! template design rules all at the same time. Time I spent doing this was time I wasn't using to develop the content of my site, which was what I was wanting to focus on. I ended up giving up and found a variable-width template that I liked sufficiently to start hacking it into what I really wanted. But it was heavy going for a CSS novice like me, and I was always bothered by a large to-do list of things about it I wasn't really happy with.

I slowly came to realise why designers prefer fixed-width templates. The more complex my site became the more I felt like switching to a fixed-width template just so I could avoid all the unexpected gotchas that I encountered when resizing the browser window. Fixed-width templates are so much easier implement and test, because you only have to worry about one window size. Having everything adjust elastically in the face of multiple module elements with varying content is hard. My site ended up with several module elements on each page, and getting them all to co-operate in window size changes was much more difficult than I expected. Often I would make a change and things would look great, then I'd resize and find modules overlapping each other, or content jumping down the page, or embedded diagrams no longer in the right place. The idea that CSS gives the flexibility to allow objects to float and for text to flow around them sounds great in theory. But in practice when the XHTML for different page elements is coming from different modules which don't know about each other or about the structure of the template, getting this to work for different browser sizes is hard work.

There's no easy way to determine the quality of a template unless you're familiar with the template design rules and know what to look for. The important thing is that it works correctly with all the modules and extensions that you want to use. The more obscure the layout you want on your site, the more likely you are to need to tweak the template.

Search Engine Optimisation

I wanted my site to rank well on search engines, without me having to pay for advertisements. The main things I wanted were for the URLs on my site to include keywords such as the Section, Category, and Title of the article. Keyword-stuffing has rendered keyword meta-data of little use, but some search engines will still find keywords if they're actually in the URL itself. Unfortunately this makes my URLs rather long. I doubt that any serious search engine really still baulks at URLs containing database queries, but I wanted my URLs to be human-readable so they are better for other sites to reference and bookmark. Sadly, Joomla!s search engine optimisation isn't great out-of-the-box, which is why I recommend the sh404SEF extension below.

The other important thing was to set the description metadata for each article, because this is what search engines like Google display in their search results as the summary of your article. An article in Google's webmaster help elaborates on how this makes your site look more worth visiting when the user sees it in the search results. Each of my articles begins with a two-or-three-line summary before the Read More marker, and ultimately I found the easiest way to set the description metadata was to copy this summary from the article. Ideally, I'd love Joomla! (or an extension) to do this automatically for any article without an explicit metadata description.

A shortcoming of description metadata handling in Joomla! is that while articles can have descriptions, Section and Category tables cannot. The sh404SEF extension allows arbitrary metadata which works around this problem, but the trouble then is keeping the sh404SEF metadata up to date as new Sections and Categories are added. I'd love to see this deficiency addressed in the Joomla! core. Google has a tool to warn about missing or inadequate descriptions in their webmaster tools, which is definitely worth checking out, as is the Missing Metadata extension described below.


Building The Site

Being new to web content management systems, I was surprised to find that by default, building a Joomla! site involved working live on the site itself. You install the software, create the database, and then start adding content to the database via the Joomla! backend. Once the structure is set up, you can add articles via the front end too, right there on the site.

I'm used to software development using version control systems like Perforce and Subversion which allow a developer to submit a change to a bunch of files in one atomic commit; but they just don't seem to have a place in this model. If you want to modify two Joomla! articles which reference each other at the same time, you either have to do them one at a time leaving a window of inconsistency, take the site offline, or use a replicating tool. Major atomic changes to the structure of the site or multiple articles while the site is live just aren't possible. Rolling back changes is difficult or impossible. Perhaps this is just an artefact of the database model that all content management systems share. If the database gets corrupted, I've got a hunch I'm screwed. I can't just go revert to the previous changelist that I know worked sensibly. So I resort to backups using JoomlaPack and keep my fingers crossed.

I was surprised to find that Google had found my site and started indexing it before I even submitted it. I couldn't test some things, like navigating the site while not logged in, unless the site was live. I ended up with entries in Google's index before I had finalised the format of the SEF URL's I wanted to use, meaning I had to go and remove these entries manually or face visitors from Google getting 404 errors. Given the effort I was going to to get the site into Google's index, I was reluctant to remove anything; but I wanted links to my site to work.

XAMPP

Version: 1.6.8

The trouble with building on the live site is that it looks like construction zone, and that appears unprofessional to visitors who may happen on it. The solution to this problem is to use a local hosting package like XAMPP to build and install a working Joomla! Installation on your local machine, then use a solution like JoomlaPack to migrate it to the live site in one step.

When I built my second site for my new Personal Development/Life Coaching business, I used XAMPP on my Windows XP machine and it worked well with only a couple of minor issues: Configuring the Mercury Mail Transport Agent to support the PHP Mail function proved difficult, so I couldn't test site functions like the contact panel and Vemod News Mailer. I had trouble getting these things working on my live site, so it would be nice to be able to test them locally first. I haven't found an easy solution to this yet. I also found that the Spell Checker in JCE didn't work locally. And when logging into the administrator back end, XAMPP allowed me to log in using an upper-case Administrator which appeared to work at first, but caused the main administration menu to stop working. It took me quite a while to work out what was wrong, so make sure you use a lower-case administrator in the URL..

.htaccess

The htaccess file in the top-level Joomla! Directory provides configuration information to the web server, which on most hosting providers is usually some version of Apache. The file supplied with Joomla! will work unmodified, but it needs to be renamed from htaccess.txt to .htaccess after you run the installation in your web browser. It's also worth making a minor change to it to rewrite references to your site so that search engines index it consistently either with or without the www. prefix. It doesn't really matter which you choose and your site will still be accessible both ways, but if you don't force a preference by rewriting the less preferred option in your .htaccess file, search engines may end up indexing it both ways and dividing your page ranking in the process. Look for the line:

# RewriteBase /

And add these two lines if you want your site referred to as domain.com:

# Rule for duplicate content removal : www.domain.com vs domain.com
RewriteCond %{HTTP_HOST} ^www.\domain\.com [NC]
RewriteRule (.*) http://domain.com/$1 [R=301,L,NC]

Or, if you want your site referred to as www.domain.com, add these lines:

# Rule for duplicate content removal : domain.com vs www.domain.com
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule (.*) http://domain.com/$1 [R=301,L,NC]

Keeping Current

Making minor upgrades (from 1.5.X to 1.5.Y) to Joomla! is easy, since the developers release patch packages which you simply extract in the directory where you have it installed on your site. If your hosting provider gives you cPanel access, use it to extract the .tar.gz upgrade package. Don't use the .zip upgrade package with cPanel 11, because it can't overwrite existing files when extracting a .zip.

Beware that if your hosting provider installs Joomla! via Fantastico, you're likely to need to install a patch package to bring it up to the latest version. Fantastico can do this for you if you wait long enough, but the extra time lag involved means that you'll always be out-of-date and your site vulnerable to hacking if you use Fantastico to do the upgrade. Believe it or not, as soon as a security vulnerability is announced in a package like Joomla!, a bunch of hackers develop an exploit for it and their script kiddy buddies start taking out sites that haven't upgraded yet. If only they could use their powers for good instead of evil. The price of security is eternal vigilance, and that means staying up-to-date; which is why the Drupal people explicitly warn against Fantastico.


Essential Extensions

I consider the following extensions essential functionality for any Joomla! website, regardless of your site features. Other extensions I'll describe later depend on what features you want. They are all excellent and I'm very grateful to their authors for providing them; for free and everything! In many cases I evaluated multiple extensions to get the functionality I needed, and the ones I settled on here are the best I could find.

I will cite the version of the extension that my comments pertain to below, but there's a good chance that they may have been updated by the time you read this. Always use the latest version available in the extensions library at the time you go to install. The links in the headings will take you straight to the latest version of each extension in the library.

sh404SEF

Version: 15_1.0.16_Beta_build_222

The main feature I wanted from this extension was URLs that were more Search Engine Friendly than the core. I highly recommend it. If you don't use some form of SEO extension, your site will not rank as well in search engines. The alternative commercial Joomla! SEO solutions seem redundant when this one is so good. It's principal drawback is simply that it's needed at all; this functionality should be built into the Joomla! core. The author has had to play some tricks to get this extension to work, like rewriting meta-tag and other information on-the-fly as a page is generated.

There are places where sh404SEF's integration with Joomla! is lacking, because it needs core functionality that just isn't there yet. One example is setting description meta tags on Section and Category tables that I mentioned earlier. Sh404SEF provides a way of setting meta tags on any arbitrary URL, but it would be better if the meta information was entered alongside the Section or Category description, like you can with content items.

I found it easy to get URL-rewriting with .htaccess working by following the instructions in the sh404SEF documentation. Using the htaccess.txt file supplied with the Joomla! core unmodified works fine, but it took me a while to work out how to set the appropriate Rewriting Mode the sh404SEF Configuration. It's on the Advanced tab, which only appears if you have the Extended Display active on the sh404SEF dashboard before selecting sh404SEF Configuration. There are a zillion settings in sh404SEF, which is a bit bamboozling at first. The author has tried to make it easy for novice users who aren't up to getting .htaccess to work, but hiding this tab really confused me.

Another tip is to activate the option to re-write content item titles as H1 elements under Meta/SEO in sh404SEF Configuration. Ideally this should be on by default, but it's not because most templates will require CSS tweaks to apply the appropriate H1 style information; otherwise the headings will look like headings to search engines, but not to humans.

sh404SEF generates SEF URLs on-the-fly and any time you change your sh404SEF Configuration settings, it will suggest that you purge your cache. This will make every page on your site generate 404 “Not Found” errors for offsite visitors coming from search engines or bookmarks, until you force sh404SEF to regenerate the SEF URLs for all your pages. The easiest way to do this is to view your own Sitemap; and if you forget, once Google has seen your Sitemap they will view it for you every day or so. See Xmap below on how to do this.

The author of sh404SEF is very active in the forums on his site, which is the best place to go for support, and also on the Joomla! SEO forum. He often releases new test versions on his website before they are available via the extensions directory.

In my ideal universe, the Joomla! core team would integrate sh404SEF functionality into the core nice and cleanly, choosing the defaults I need so there aren't so many things to play or get confused with. When I think about the lengths that the authors of SEF extensions to Joomla! have had to go, like developing plugin interfaces for other extensions to rewrite their URL's, and the number of permutations and combinations to consider, my mind boggles with: “Why isn't this core functionality?”

JCE

Version: Administration Component 1.5.0, Editor Plugin 1.5.1

I needed the Joomla Content Editor (JCE) extension in order to make it practical to insert hyperlinks between my content items. It's so good that I wish it was the default Joomla! editor. It just works. My only wish is that it could automatically execute the Spelling Checker when opening a content item.

Remember to install both the Component and the Plugin file for JCE to work. I sometimes had trouble uninstalling it, getting error messages saying “It was not possible to delete the selected file.: 'en-GB.com_jce.ini'”, and a few others. Removing the Component also removes the Plugin entry in the Extension Manager, leaving stuff behind that will give you an error message if you go to reinstall. If you want to remove JCE, remove the Plugin first, then the Component.

Xmap

Version: 1.2

You need a Sitemap on your site, for three reasons. Firstly, it's nice for your visitors to get a big-picture view. Secondly, search engines like Google like being able to find everything on your site in one hit. Thirdly, it forces sh404SEF to regenerate SEF URLs for every page on your site.

Google has a nice friendly Sitemap submission tool in their Webmaster tools, you should also put a reference to it in your robots.txt file, where every Sitemap-enabled search engine will find it. The line in robots.txt should look like:

Sitemap: http://GrahamStoney.com/index.php?option=com_xmap&sitemap=1&view=xml&no_html=1

The link should be whatever Xmap shows as the XML Sitemap in Component Xmap, Sitemaps, Options, Preferences. Note that Google recommend that you still submit the Sitemap to them manually, so they can give you feedback on it.

I wasn't happy with the CSS supplied with Xmap, so I recommend replacing it with this:

.sitemap ul {
	display		: block;
	margin		: 0;
	padding		: 0;
}
.sitemap ul li {
	margin		: 0;
	padding		: 0;
	white-space	: nowrap;
	background	: transparent;
}
.sitemap a img {
	border		: none;
}
.sitemap ul.level_0 li {
	margin		: 0 0 1em 2em;
}
.sitemap ul.level_1 li {
	margin		: 0 0 0.5em 4em;
}
.sitemap ul.level_2 li {
	margin		: 0 0 0 4em;
}
.sitemap .active {
	font-style	: italic;
}

Check that the CSS classname in Xmap's Options, Preferences is set to match the class name in Xmap's CSS window, for example sitemap if you want to use the styles listed above.

I couldn't get Xmap's built-in template editor to save my changes to its .css file. It says it saved the changes, but when I opened it again, the old file was still there. I had to use the cPanel editor to edit the file.

By default, Xmap generates a Powered By line with a link back to the author's site, which is probably not what you want. But you can disable this via Components, Xmap, Sitemaps, Options, Preferences and uncheck Include link to author in Display Options.

JoomlaPack

Version: 2.0.1

Once you've built your site on your local machine using XAMPP, you need a way to transfer it to your hosting provider. And once it's in operation, you need a way to back it up in case your hosting provider crashes or your site gets hacked. JoomlaPack is the answer to your prayers in both these respects. My hosting provider charges for the privilege of restoring my data and script kiddies get a thrill out of finding the latest exploits and taking sites down, so I want to know my data is safe. This extension builds a .ZIP file containing everything on your site including the Joomla! installation, your content database, and an installer to set it all up. It's gold.

One quirk with JoomlaPack is that depending on the configuration of your hosting provider, the .ZIP files it generates may not always have correct CRCs and so you may get warnings if you go to open them with your usual .ZIP extraction tools. The data is safely stored though, and this is thoroughly explained in the extensive PDF documentation and on the developers' website.

I had trouble restoring my JoomlaPack archive on one hosting provider due to PHP security settings, which led to warning messages saying: “Warning: ini_set() has been disabled for security reasons...” and ultimately a fatal error. The workaround was to:

  • Create a "php.ini" file in the public_html directory with:

disabled_functions = 
  • Open .htaccess and include this line, with “username” replaced with your username:

suPHP_ConfigPath /home/username/public_html

Another snag I hit was that my hosting provider only ran MySQL 4, whereas XAMPP comes with MySQL 5. In order to migrate my site to go live, I needed to set the JoomlaPack Configuration, Advanced, Database Export Style to “Force MySQL 4 Compatible”. Otherwise I got fatal errors during the database restore on my live site. The JoomlaPack crew run an excellent support forum where I found answers to questions like this.

Missing Metadata

Version: 1.0

In case you haven't worked it out by now, metadata is important to get a good search engine ranking. This extension provides a list right on your backend dashboard of all content items which currently have no metadata. It's indispensable. After installation, you must manually activate the extension under the Extensions, Module Manager, Administrator Modules pane and set the position to CPanel for the information to appear.


Other Extensions

In addition to the essential extensions listed above, I also found the following ones useful for my site. Whether you need them too will depend on whether your requirements are similar to mine or not.

Google Adsense

Version: 3.0 Clicksafe

I wanted some advertisements on my site, to help pay my bills. If I was giving my wisdom away for free, I wanted some kind of payback beyond just feeling like a good guy helping other people get their work done more efficiently. The most common program for doing this is Google's Adsense. The way it works is that Google looks at your site content, matches your content against keywords that advertisers have bid on, and generates advertisements on your site dynamically. When a visitor clicks on one of these advertisements, you get paid the amount that the advertiser bid for their ad, minus Google's cut.

There are several extensions for adding Google Ads to your site. I ended up using the JoomlaSpan one, because it seemed easiest to configure. It also has a funky clicksafe feature allowing you to register IP addresses to avoid serving live ads to yourself so you can't click them by accident, and to help deal with click-bombing; either of which can get you banned from the Adsense program. Being on an ISP with a dynamic IP address is a bit of a problem though.

To help Google target the ads for each page on your site more accurately, you should add google_ad_section_start/end markers into your template to say where the real content of the page starts and ends. You'll need to hack the index.php file of your template to do this, and put the markers around the <jdoc:include type="component" /> statement so it looks like this:

<!-- google_ad_section_start -->
<jdoc:include type="component" />
<!-- google_ad_section_end >

Ideally I wanted an Adsense module that switched Google Publisher Id's based on the author of the article in question, so that advertising revenue would automatically be forwarded to the author of the article which generated it. This would help encourage new contributors to join my site and contribute quality content, but as yet I haven't found an extension which does so.

Vemod News Mailer

Version: 1.2.12

The advantage of Vemod over other free Newsletter extensions is that it generates news automatically by compiling new content items from your site. All you do is set it up, then go about publishing content items. It does the rest. I felt like I had to fight with it a bit to get it to work, but I still recommend it. The author was very responsive with problems, and I bought him the requisite Latte Macchiato required to allow me to remove his Copyright message from my site legally. I reckon you should, too. A really nice thing about Vemod is that it can also include content in the newsletter from any module including other non-core extensions.

Vemod can be triggered either by a cron script, or by modifying your site template to add a hook through which it sends the newsletter. The former is trickier to set up, while with the latter there will be no newsletter sent if nobody visits your site, even if you've posted new content since the last newsletter.

I came across a problem with the combination of Vemod, sh404SEF and mod_login. Publishing the Login panel on the Vemod page with sh404SEF caused logins to break. Disabling SEF URLs for the Vemod module in sh404SEF worked around the problem.

I found it difficult to generate a test newsletter on-demand, and there is a discussion about this on the author's forum. To do so, you have to log in as admin to the Joomla! front end and go to the newsletter page, where a preview button will appear. Either that, or set the compilation interval very short and submit content items to the site in order to test that the newsletter mail was being generated and sent correctly. That's not something I really want to do on a live site.

Before upgrading the Vemod extension, make sure to use Vemod's database backup feature or you will lose all your newsletter settings.

Ultimate Social Bookmarking Plugin

Version: 1.0.3

Not having friends in high places at sites with good page ranking, I needed some way to generate quality links to my site. One method is by providing easy social bookmarking on your content pages. This allows users to bookmark your content easily with sites like Digg and Del.icio.us, giving you links back to your site. The more popular your articles, the better the ranking of these back links. I only found out about social bookmarking after GreatEngineering.net was launched, and one of the advantages of a CMS is that all I had to do was install and configure this plugin in order to generate the required links and icons for every page of content, without having to edit any of the content itself.

This plugin is the perfect solution for allowing users to social bookmark your site. Dropping a Digg Submit badge right there on your articles automatically is really cool. My only feature-wish is that it would be nice if the social bookmarking buttons didn't appear on the Print version of the page by default, although this can be achieved by editing the site template.

yvComment

Version: 1.19.3

This extension allows for users to comment on your articles. This in such a common feature of websites these days that I was surprised this functionality isn't in the core. The author has done a remarkable job of integrating it; this seems like one of the better integrated extensions. If you want to avoid being spammed, you'll also need to install the Bigo Captcha extension, which you need to enable explicitly both in the yvComment plugin settings and in the Bigo Captcha plugin settings.

I recommend you create a specific Section and Category for comments, and select Use Content Table, so that yvComment treats comments like regular articles. This allows you to have comments on comments, and also to manage comments in the Joomla! content manager. Note that both your Section and Category must be reserved for use by yvComment; don't share the Section with other non-comment content items.

The extension generates a link back to the author's home site which you may want to remove. Donate to the project first, and then edit components/com_yvcomment/views/comment/tmpl/default.php, search for PoweredBy and delete that line.

Sourcerer

Version 1.0.0

Having a complex CMS system with a WYSIWYG editor like JCE can actually make some simple things harder than you might expect. Like how do you paste raw HTML from places like the Amazon Affiliate program into your content? The answer is to install the Sourcerer plug-in, and wrap the raw HTML in Joomla! plugin tags {source} and {/source}. You also need to disable Joomla!s default content filtering rules in Content, Article Manager, Parameters, Filtering Rules, or your custom HTML will disappear.

Mini Front Page

Version: 1.2.4

This is the only extension I could find which could generate a random content item from any Section; not just a reference to the content, but the content itself. It can actually do a whole lot more than this, but I just use it on my front page and in my newsletter, to keep things fresh.


Conclusion

Setting up my first two serious websites involved a big learning curve which took quite a while to ride, and I had a lot of little teething problems to resolve. Joomla! core functionality lacks some important features you need to build a serious website which makes it feel a little toy-ish and I had to play around an awful lot to get everything working optimally. But I got there by adding extensions and it was much quicker on my second site once I already knew what to do. Perhaps this is the inevitable result of the complexity and rapid rate of progress on the web. I really can't say whether any other CMS is better since I've never actually built a real website with anything else. Now that my sites are running though, I can say that Joomla! works, and I'm very happy with it.

Credits

I want to thank the following people for their feedback and assistance with various sections of this article: Thomas Allin, Ryan Demmer, Yannick Gaultier, David from JoomlaSpan, Nikhil Parachure, Andy Sikumbang, P.J. Swesey, Yuri Volkov.

Biography

Graham Stoney is an ex-Computer/Embedded Systems/Biomedical Engineer who decided there had to be more to life and gave it all up to work in the Personal Development industry. He is now a Life Coach, teaching people how to have a great life by changing their mindset and challenging their self-limiting beliefs. He still sets up his own websites, and can be reached via GrahamStoney.com.