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 [[Help16:Extensions Extension Manager Update|Extension Manager's Update]] view with only a few clicks.

+

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

= Defining an update server =

= Defining an update server =

−

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 newer 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:

+

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! 2.5 and newer 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. This code should be added to the extension manifest file, within the root "extension" element. The update server is defined as follows for each type:

* '''client''' - The client name of the extension ("site" or "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 "site", but you will need to specify the client in an update or it will use "administrator". Note that the tag is "client" not "client_id".

+

* '''client''' (usually optional, required for J! 1.7.3 due to a regression; but highly encouraged regardless) - The client ID of the extension, which can be found by looking inside the #__extensions table. To date, use 0 for "site" and 1 for "administrator". Plugins and front-end modules are automatically installed with a client of 0 (site), but you will need to specify the client in an update or it will default to 1 (administrator) and then found update would not be shown because it would not match any extension. Components are automatically installed with a client of 1, which is currently the default.

+

** ''Warning'': The tag name is <'''client'''> for Joomla! 2.5 and <'''client_id'''> for 1.6 and 1.7. If you use <client_id> (rather than <client>) on a 2.5 site, it will be ignored.

* '''version''' - The version of the release (required)

* '''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)

* '''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)

Line 81:

Line 85:

** '''name''' - The name of the platform dependency; as of this writing, it should ONLY be "joomla"

** '''name''' - The name of the platform dependency; as of this writing, it should ONLY be "joomla"

** '''version''' - The version of Joomla! the extension supports

** '''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

+

** '''min_dev_level''' and '''max_dev_level''' - These attributes were added in 3.0.1 to allow you to select a target platform based on the developer level ("z" in x.y.z). They are optional. You can specifiy either one or both. If omitted, all developer levels are matched. For example, the following matches versions 4.0.0 and 4.0.1. <code><targetplatform name="joomla" version="4.0" min_dev_level="0" max_dev_level="1"/></code>

+

*** '''Note:''' If your extension is Joomla! 2.5 and/or 3.1 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.

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

+

+

The values of '''element''', '''type''', '''client_id''' and '''folder''' should match those in the table #__extensions.

+

+

'''Important for plugins:''' Plugins have to include <folder> and <client> elements to work properly

+

+

= Troubleshooting =

+

* '''SQL update script is not executed during update.'''

+

:If the SQL update script (for example, in the folder <code>sql/updates/mysql</code>) does not get executed during the update process, it could be because there is no version number in the <code>#__schemas</code> table for this extension ''prior to the update''. This value is determined by the last script name in the SQL updates folder. If this value is blank, no SQL scripts will be executed during that update cycle. To make sure this value is set correctly, make sure you have a SQL script in this folder with its name as the version number (for example, 1.2.3.sql if the version is 1.2.3). The file can be empty or just have a SQL comment line. This should be done in the old version -- the one before the update. Alternatively, you can add this value to the <code>#__schemas</code> using a SQL query.

= Supporting Tools =

= Supporting Tools =

Line 90:

Line 103:

= Contributors =

= Contributors =

*[[User:mbabker|Michael Babker]]

*[[User:mbabker|Michael Babker]]

+

[[Category:Development]]

Revision as of 17:05, 29 April 2013

Contents

This article is tagged because itNEEDS REVIEW. You can help the Joomla! Documentation Wiki by contributing to it.More pages that need help similar to this one are here.NOTE-If you feel the need is satistified, please remove this notice.

This tutorial is for all Joomla! version and newer

Introduction

This tutorial is designed to teach developers how to create an update server for integration with the update system introduced in Joomla! 2.5. 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

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! 2.5 and newer 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. This code should be added to the extension manifest file, within the root "extension" element. The update server is defined as follows for each type:

Server types

Collection

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:

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

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:

folder - Specific to plugins, this tag describes the type of plugin being updated (content, system, etc.) (required for plugins)

client (usually optional, required for J! 1.7.3 due to a regression; but highly encouraged regardless) - The client ID of the extension, which can be found by looking inside the #__extensions table. To date, use 0 for "site" and 1 for "administrator". Plugins and front-end modules are automatically installed with a client of 0 (site), but you will need to specify the client in an update or it will default to 1 (administrator) and then found update would not be shown because it would not match any extension. Components are automatically installed with a client of 1, which is currently the default.

Warning: The tag name is <client> for Joomla! 2.5 and <client_id> for 1.6 and 1.7. If you use <client_id> (rather than <client>) on a 2.5 site, it will be ignored.

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

min_dev_level and max_dev_level - These attributes were added in 3.0.1 to allow you to select a target platform based on the developer level ("z" in x.y.z). They are optional. You can specifiy either one or both. If omitted, all developer levels are matched. For example, the following matches versions 4.0.0 and 4.0.1. <targetplatform name="joomla" version="4.0" min_dev_level="0" max_dev_level="1"/>

Note: If your extension is Joomla! 2.5 and/or 3.1 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.

The values of element, type, client_id and folder should match those in the table #__extensions.

Important for plugins: Plugins have to include <folder> and <client> elements to work properly

Troubleshooting

SQL update script is not executed during update.

If the SQL update script (for example, in the folder sql/updates/mysql) does not get executed during the update process, it could be because there is no version number in the #__schemas table for this extension prior to the update. This value is determined by the last script name in the SQL updates folder. If this value is blank, no SQL scripts will be executed during that update cycle. To make sure this value is set correctly, make sure you have a SQL script in this folder with its name as the version number (for example, 1.2.3.sql if the version is 1.2.3). The file can be empty or just have a SQL comment line. This should be done in the old version -- the one before the update. Alternatively, you can add this value to the #__schemas using a SQL query.

Supporting Tools

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