It often annoys me (slightly) that many (most) sites don't provide any hint to the user if a link is set to open in a new window/tab or the same one.

I'm aware that there is a class of purists who believe that the end user should be always king and they should decide whether or not a link should open in the same tab or a fresh one.

There are two problems with this.

Finally I have discovered how to do this satisfactorily.

My requirement is to be able to create some tags - for example when installing xbCulture Components or when converting xbRefs Text References to Tag References in xbRefMan. These tags need to have a description and parent set as well as just a title so the simple function in TagsHelper::createTagsFromField(array()) does not cut the mustard. It only lets you create simple tags with just a title, and has a weird syntax whereby the title string has to be prefixed with #new# 


I was confused of exactly what order various functions of the install/unintsall script run with a package.

This is what my tests show (Joomla 3.10)

Assuming a package with a number of elements (plugins in this case)

On install the following order of functions:

  1. Package preflight()
  2. plugin1 preflight()
  3. plugin1 install()
  4. plugin1 postflight()
  5. plugin2 preflight()
  6. plugin2 install()
  7. plugin2 postflight()
  8. ... and so on for any other extensions in the order that they appear in the package xml
  9. Package install()
  10. Package postflight()

So the package install() and postflight() are run after all the extensions have installed

The extensions can generate messages $app->enqueueMessage() which will display, but any html output echo'd in their functions will not be shown (unless passed to the message queue

For a given message type the messages will appear in one block in the order in which they are generated.


For uninstall the following order applies

  1. Package uninstall()
  2. plugin1 preflight()
  3. plugin1 uninstall()
  4. plugin2 preflight()
  5. plugin2 uninstall()

Note that Package preflight() does not run, but the extension preflight()s do.

None of the postflights() run

The extension order is again as found in the package xml file

With two components it goes like this


  1. pkg preflight install
  2. people preflight install
  3. people install
  4. people postflight install
  5. book preflight install
  6. book install
  7. book postflight install
  8. pkg install
  9. pkg postflight install
  1. pkg preflight update
  2. people preflight update
  3. people update
  4. people postflight update
  5. book preflight update
  6. book update
  7. book postflight update
  8. pkg update
  9. pkg postflight update
  1. pkg uninstall
  2. people uninstall
  3. book uninstall
In this case no preflights run at all, and again postflight doesn't run

Joomla Form Field items have a useful attribute "showon" which allows you to automatically only display the field if certain other field conditions you specify are met. This can greatly reduce clutter in the form as irrelevant elements remain hidden until they need to be set.

For a simple example you might have enable categories for a component, and also want to set a default category if categories are enabled.