Deploying an Update Server

From Joomla! Documentation

Revision as of 06:17, 30 January 2012 by Mbabker (talk | contribs) (Change opening sentence for simpler compatibility statement)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This tutorial is for all Joomla! versions newer than Joomla 1.6

Introduction[edit]

This tutorial is designed to teach developers how to create an update server for integration with the update system introduced in Joomla! 1.6. By adding an update server listing to your extension's manifest, developers enable users to update their extensions via the Extension Manager's Update view with only a few clicks.

Defining an update server[edit]

In order to use this feature, an update server must be defined in your extension's manifest. This definition can be used in all Joomla! 1.6 and 1.7 compatible extensions but is not available for templates. You can use two options for your server type; collection or extension. These will be explained in detail shortly. The update server is defined as follows for each type:

<updateservers>
   <server type="collection">http://example.com/list.xml</server>
   <server type="extension" priority="2" name="My Extension's Updates">http://example.com/extension.xml</server>
</updateservers>

Multiple servers can be defined within the <updateservers> tag.

Server types[edit]

Collection[edit]

The collection server type allows developers to define an extension's manifest to pull updates from a collection. This type of server can be used if the developer wants to define all of their extension's updates in a single file (not recommended) or if their extension has multiple sub-extensions which are not distributed or updated at the same time (such as a package extension type). The below example is the collection definition used by the updater when processing core Joomla! updates:

<extensionset name="Joomla Core" description="Joomla! Core">
   <extension name="Joomla" element="joomla" type="file" version="1.7.0" detailsurl="http://update.joomla.org/core/extension.xml"/>
</extensionset>

All definitions must be defined between <extensionset> tags in your collection manifest. The <extensionset> tag has two optional parameters; name and description. For each extension that this collection references, a separate <extension> tag is required. The <extension> tag has the following parameters, all of which are required for updates to properly process:

  • name - The name of the extension
  • element - The untranslated extension name i.e. mod_custom
  • type - The extension type (component, module, plugin, etc.)
  • version - The latest version of the extension
  • detailsurl - The URL of the XML file which contains that extension's individual update definitions

Extension[edit]

The extension server type allows developers to define an extension's manifest to pull updates from a single extension's manifest. All collection manifests eventually point to this XML file. All updates in this file must be defined after an <updates> tag at the beginning of the file. The below example is the update definition for the Joomla! 1.7.0 release:

<update>
   <name>Joomla! 1.7</name>
   <description>Joomla! 1.7 CMS</description>
   <element>joomla</element>
   <type>file</type>
   <version>1.7.0</version>
   <infourl title="Joomla!">http://www.joomla.org/</infourl>
   <downloads>
       <downloadurl type="full" format="zip">http://joomlacode.org/gf/download/frsrelease/15279/66552/Joomla_1.6.5_to_1.7.0_Package.zip</downloadurl>
   </downloads>
   <tags>
       <tag>stable</tag>
   </tags>
   <maintainer>Sam Moffatt</maintainer>
   <maintainerurl>http://sammoffatt.com.au</maintainerurl>
   
   <targetplatform name="joomla" version="1.6"/>
</update>

The following section describes the elements of a single update entity.

  • name - The name of the extension, this name will appear in the Name column of the Extension Manager's Update view (required)
  • description - A short description of the extension (optional) -- if you choose to use <![CDATA[]]>, double-quotes will break the HTML formatting. Use single quotes with your HTML entities.
  • element - The installed name of the extension (required)
  • type - The type of extension (component, module, plugin, etc.) (required)
  • folder - Specific to plugins, this tag describes the type of plugin being updated (content, system, etc.) (required for plugins)
  • client - The client_id of the extension; 0 for site and 1 for administrator (usually optional, required for J! 1.7.3 due to a regression; but highly encouraged regardless). Plugins are automatically installed with a client of 0, but you will need to specify the client in an update or it will use 1. Note that the tag is "client" not "client_id".
  • version - The version of the release (required)
  • infourl - A URL to point users to containing information about the update (optional) (In CMS 2.5, if set, this URL will be displayed in the update view)
  • downloads - The section which lists all download locations
    • downloadurl - The URL to download the extension from; the <downloadurl> tag has two required parameters:
      • type - The type of package (full or upgrade)
      • format - The format of the package (zip, tar, etc.)
  • tags - Optional (unknown use)
  • maintainer - The name of the extension maintainer (similar to the <author> tag in a manifest) (optional)
  • maintainerurl - The website of the extension maintainer (similar to the <authorUrl> tag in a manifest) (optional)
  • section - Optional (unknown use)
  • targetplatform - A tag to define platform requirements, requires the following elements
    • name - The name of the platform dependency; as of this writing, it should ONLY be "joomla"
    • version - The version of Joomla! the extension supports
      • Note: If your extension is Joomla! 1.6, 1.7, and/or 2.5 compatible, you will be required to have separate <update> definitions for each version due to the manner in which the updater checks the version

A separate <update> definition will be required for each version of your extension you release.

Supporting Tools[edit]

Maintaining your update server files can be difficult depending on the manner in which you set up your files. An extension which can help you to maintain this is the Akeeba Release System, available free of charge from https://www.akeebabackup.com

Contributors[edit]