Tips & Tricks

10 Joomla Quirks I Learned the Hard Way

A decade of Joomla. A list of the small quirks that cost me hours when I first hit them. Document them so you don't.

On this page 11 sections
  1. 1 1. Module positions vary by template
  2. 2 2. Cached content lies to you
  3. 3 3. URL routing depends on which menu item is "default"
  4. 4 4. The article's "metadata" tab is not the same as the menu item's metadata
  5. 5 5. Custom HTML modules accept PHP only via a third-party extension
  6. 6 6. The "Featured Articles" view is its own thing
  7. 7 7. Image handling differs between articles, intro, and full-text
  8. 8 8. The "Read More" break is a tag, not a setting
  9. 9 9. Permissions cascade in surprising ways
  10. 10 10. Joomla updates can fail silently
  11. 11 The pattern

Ten years of Joomla has produced a list of quirks I've hit multiple times before they finally became second nature. Each one cost me real hours to diagnose the first time. Documenting so other people lose less time.

1. Module positions vary by template

The first time I switched a Joomla template, half my modules disappeared. I assumed the modules had broken. They hadn't — they were assigned to template positions that the new template didn't have. Different templates define different positions ("position-7" exists in some, doesn't in others).

The fix: check the new template's available positions before switching. Re-assign modules to equivalent positions in the new template. Lesson: Joomla's modular architecture is powerful but unforgiving about template differences.

2. Cached content lies to you

You make a change. You refresh the front-end. Nothing changed. You check the database. The change is there. You refresh again. Still nothing.

It's the cache. Joomla has multiple layers — the global cache, the template cache, the page cache. After significant changes, clear all caches: System → Maintenance → Clear Cache, AND System → Maintenance → Purge Expired Cache. The "I forgot to clear cache" mistake costs ten minutes the first ten times you make it.

3. URL routing depends on which menu item is "default"

Each menu item in Joomla has a different URL. The same article, accessed via two different menu items, has two different URLs. The "primary" URL is determined by which menu item is marked as the default for that content.

This is great for SEO when used deliberately, and a mess when used accidentally. Always know which menu item owns each piece of content.

4. The article's "metadata" tab is not the same as the menu item's metadata

SEO meta description on an article? That sets the meta description for the article. SEO meta description on the menu item? That sets the meta description for the URL.

When the URL is determined by a menu item (which is most of the time for articles), the menu item's metadata wins, not the article's. The hours I have spent setting article meta descriptions that never appeared anywhere — I will not get those hours back.

5. Custom HTML modules accept PHP only via a third-party extension

The "Custom HTML" module type does what its name suggests — HTML and inline JavaScript. It does not run PHP. To run PHP from a module, you need a "PHP Module" or "Sourcerer" extension installed.

This is a security feature, not a bug. But the first time you need PHP in a module, you'll spend twenty minutes wondering why your code isn't executing.

It's easy to assume "Featured Articles" is a filter on the regular article list. It isn't. It's a separate view with its own settings, its own template overrides, its own cache. Settings that apply to the regular Articles view do not always apply to Featured Articles.

The fix: when configuring the homepage (which often uses Featured Articles), check the menu item's parameters AND the Featured Articles parameters separately.

7. Image handling differs between articles, intro, and full-text

An article in Joomla can have an "Intro Image" and a "Full Article Image." These are separate fields. They're displayed in different views. The same image is uploaded twice if you want it consistent across both.

The K2 component handled this differently, which is one reason migrating from K2 to native articles is non-trivial. There's no perfect mapping; you pick which version of the image to keep.

8. The "Read More" break is a tag, not a setting

Where the article cuts off in list views is determined by an HTML tag inserted into the article body: <hr id="system-readmore" />. The button to insert this tag is in the editor toolbar but easy to miss.

If your article previews are showing too much or too little content in list views, this is usually the cause.

9. Permissions cascade in surprising ways

Joomla's ACL system is powerful and confusing. Permissions defined at the global level can be overridden at the component level, the category level, or the article level. A user can have access to "Articles" globally and still be denied access to a specific article through cascading rules.

When debugging permission issues, walk the hierarchy: Global → Component → Category → Article. The fix is usually in the level you don't expect.

10. Joomla updates can fail silently

The "Joomla! Update" component will tell you the update succeeded. It will not always tell you that the update succeeded but left some files unchanged because of permission issues, or that some database changes didn't apply.

Sanity check after every major update: visit a few pages, log in as a user, post a comment, submit a form. If anything is broken, the most likely cause is a partial update that needs to be re-run with proper permissions.

The pattern

Most Joomla quirks come from the same source: Joomla is more flexible than WordPress, and that flexibility means more places where a setting can override the obvious one. Once you learn to look in three places before assuming a setting is broken, the quirks become manageable.

If I could give one piece of advice to someone new to Joomla: when something doesn't behave the way you expect, check the menu item's parameters, the article's parameters, AND the global configuration. The answer is usually in one of those three.