<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Goldenmean</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Goldenmean"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Goldenmean"/>
	<updated>2026-06-26T21:54:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Retrieving_request_data_using_JInput&amp;diff=83620</id>
		<title>Retrieving request data using JInput</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Retrieving_request_data_using_JInput&amp;diff=83620"/>
		<updated>2013-03-25T05:09:42Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: /* Getting Values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.0|platform=11.1,12.1}}&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
To be able to use JInput as described here, you must be using Joomla 2.5.0 or above.&lt;br /&gt;
&lt;br /&gt;
Please note there are known issues with JInput and Magic Quotes (Deprecated in PHP 5.3.0 and removed in PHP 5.4.0). Most servers have these turned off - however it is important to bear this in mind whilst developing a component. For this reason all core components in Joomla 2.5.x still use JRequest. As of Joomla 3.0+ magic quotes is required to be disabled and thus this is no longer an issue.&lt;br /&gt;
&lt;br /&gt;
==Using JInput==&lt;br /&gt;
To use JInput you must first create the object by using this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$jinput = JFactory::getApplication()-&amp;gt;input;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting Values===&lt;br /&gt;
To get a value from JInput, you can use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$foo = $jinput-&amp;gt;get(&#039;varname&#039;, &#039;default_value&#039;, &#039;filter&#039;);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The filter defaults to &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Available filters are:&lt;br /&gt;
&lt;br /&gt;
*INT&lt;br /&gt;
*INTEGER&lt;br /&gt;
*UINT&lt;br /&gt;
*FLOAT&lt;br /&gt;
*DOUBLE&lt;br /&gt;
*BOOL&lt;br /&gt;
*BOOLEAN&lt;br /&gt;
*WORD&lt;br /&gt;
*ALNUM&lt;br /&gt;
*CMD&lt;br /&gt;
*BASE64&lt;br /&gt;
*STRING&lt;br /&gt;
*HTML&lt;br /&gt;
*SAFE_HTML&lt;br /&gt;
*ARRAY&lt;br /&gt;
*PATH&lt;br /&gt;
*RAW&lt;br /&gt;
*USERNAME&lt;br /&gt;
&lt;br /&gt;
===Getting Multiple Values===&lt;br /&gt;
&lt;br /&gt;
To retrieve a number of values you can use the &amp;lt;code&amp;gt;getArray()&amp;lt;/code&amp;gt; method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fooValues = $jinput-&amp;gt;getArray(array(&#039;var1&#039; =&amp;gt; &#039;&#039;, &#039;var2&#039; =&amp;gt; &#039;&#039;, &#039;var3&#039; =&amp;gt; &#039;&#039;));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, if you want to determine the data to get step by step:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fooArray = array();&lt;br /&gt;
$fooArray[&#039;var1&#039;] = &#039;&#039;;&lt;br /&gt;
$fooArray[&#039;var2&#039;] = &#039;&#039;;&lt;br /&gt;
$fooArray[&#039;var3&#039;] = &#039;&#039;;&lt;br /&gt;
$fooValues = $jinput-&amp;gt;getArray($fooArray);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;$fooValues&amp;lt;/code&amp;gt; will be an array that consists of the same keys as used in &amp;lt;code&amp;gt;$fooArray&amp;lt;/code&amp;gt;, but with values attached.&lt;br /&gt;
&lt;br /&gt;
You can also specify different filters for each of the inputs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;gt;&lt;br /&gt;
$fooValues = $jinput-&amp;gt;getArray(array(&lt;br /&gt;
    &#039;var1&#039; =&amp;gt; &#039;int&#039;,&lt;br /&gt;
    &#039;var2&#039; =&amp;gt; &#039;float&#039;,&lt;br /&gt;
    &#039;var3&#039; =&amp;gt; &#039;word&#039;&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also nest arrays to get more complicated hierarchies of values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fooValues = $jinput-&amp;gt;getArray(array(&lt;br /&gt;
    &#039;jform&#039; =&amp;gt; array(&lt;br /&gt;
        &#039;title&#039; =&amp;gt; &#039;string&#039;,&lt;br /&gt;
        &#039;quantity&#039; =&amp;gt; &#039;int&#039;,&lt;br /&gt;
        &#039;state&#039; =&amp;gt; &#039;int&#039;&lt;br /&gt;
    )&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Getting Values from a Specific Super Global===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$foo = $jinput-&amp;gt;get-&amp;gt;get(&#039;varname&#039;, &#039;default_value&#039;, &#039;filter&#039;);&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$foo = $jinput-&amp;gt;post-&amp;gt;get(&#039;varname&#039;, &#039;default_value&#039;, &#039;filter&#039;);&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$foo = $jinput-&amp;gt;server-&amp;gt;get(&#039;varname&#039;, &#039;default_value&#039;, &#039;filter&#039;);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To retrieve an entire object, you can use:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$foo = $jinput-&amp;gt;get(&#039;varname&#039;, null, null);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting Values===&lt;br /&gt;
&lt;br /&gt;
To set a value via JInput, you can use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$jinput-&amp;gt;set(&#039;varname&#039;, $foo);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Retrieving File Data===&lt;br /&gt;
&lt;br /&gt;
The format that PHP returns file data in for arrays can at times be awkward, especially when dealing with arrays of files. JInputFiles provides a convenient interface for making life a little easier, grouping the data by file.&lt;br /&gt;
&lt;br /&gt;
Suppose you have a form like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;lt;?php echo JRoute::_(&#039;index.php?option=com_example&amp;amp;task=file.submit&#039;); ?&amp;gt;&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;jform1[test][]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;jform1[test][]&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normally, PHP would put these in an array called &amp;lt;code&amp;gt;$_FILES&amp;lt;/code&amp;gt; that looked like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [jform1] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [name] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [test] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; youtube_icon.png&lt;br /&gt;
                            [1] =&amp;gt; Younger_Son_2.jpg&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            [type] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [test] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; image/png&lt;br /&gt;
                            [1] =&amp;gt; image/jpeg&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            [tmp_name] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [test] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; /tmp/phpXoIpSD&lt;br /&gt;
                            [1] =&amp;gt; /tmp/phpWDE7ye&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            [error] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [test] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; 0&lt;br /&gt;
                            [1] =&amp;gt; 0&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            [size] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [test] =&amp;gt; Array&lt;br /&gt;
                        (&lt;br /&gt;
                            [0] =&amp;gt; 34409&lt;br /&gt;
                            [1] =&amp;gt; 99529&lt;br /&gt;
                        )&lt;br /&gt;
&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JInputFiles produces a result that is cleaner and easier to work with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$files = $input-&amp;gt;files-&amp;gt;get(&#039;jform1&#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$files&amp;lt;/code&amp;gt; then becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [test] =&amp;gt; Array&lt;br /&gt;
        (&lt;br /&gt;
            [0] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [name] =&amp;gt; youtube_icon.png&lt;br /&gt;
                    [type] =&amp;gt; image/png&lt;br /&gt;
                    [tmp_name] =&amp;gt; /tmp/phpXoIpSD&lt;br /&gt;
                    [error] =&amp;gt; 0&lt;br /&gt;
                    [size] =&amp;gt; 34409&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
            [1] =&amp;gt; Array&lt;br /&gt;
                (&lt;br /&gt;
                    [name] =&amp;gt; Younger_Son_2.jpg&lt;br /&gt;
                    [type] =&amp;gt; image/jpeg&lt;br /&gt;
                    [tmp_name] =&amp;gt; /tmp/phpWDE7ye&lt;br /&gt;
                    [error] =&amp;gt; 0&lt;br /&gt;
                    [size] =&amp;gt; 99529&lt;br /&gt;
                )&lt;br /&gt;
&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this way, the data from each file element is consolidated into a single array and can be indexed in a more straightforward manner.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
This is based on an email discussion: [https://groups.google.com/d/msg/joomla-dev-framework/LbALkK1ifMo/5waSiIlb21gJ Framework List 23 July 2011]&lt;br /&gt;
&lt;br /&gt;
The idea behind JInput is to abstract out the input source to allow code to be reused in different applications and in different contexts.  What I mean by this is that you could have a controller that grabs data from an input source.  Instead of always getting it from the request (i.e. get and post variables), you get it from JInput.  So say for instance you have a MVC triad in your component that is meant to get data from the browser as a client (a typical web application).  Now suppose you want to reuse that same code but interface with it using JSON.  Instead of rewriting your triad, you just extend JInput and have it grab it data from a parsed json object and perform any translation that you need to perform.&lt;br /&gt;
&lt;br /&gt;
The plan is to have JApplication instantiate JInput in its constructor.  Then in your code you get the input object from the application and get your input from there.  It will be a public property in Japplication so that it can be swapped out of that is appropriate.&lt;br /&gt;
&lt;br /&gt;
We get the added benefit that we get rid of the static JRequest which makes a whole bunch the code a whole lot easier to test because you can inject mock inputs directly instead of trying to fudge with hackish dependencies.&lt;br /&gt;
&lt;br /&gt;
The end result will be that your code will get the input object from the application (we will probably add something to JController at some point to make it more convenient to use there as well).&lt;br /&gt;
&lt;br /&gt;
Once you have your JInput object, you use it fairly in a fairly similar manner to how JRequest is used:&lt;br /&gt;
$input-&amp;gt;get(&#039;varname&#039;, &#039;default_value&#039;, &#039;filter&#039;);&lt;br /&gt;
&lt;br /&gt;
Where filter is a filter that is supported by JFilterInput.  JInput::clean proxies to JFilter.  We&#039;ll have to tweak JFilter a little bit so that it is more extensible.  It defaults to cmd so that developers have to be intentional about things if they want to have more lenient filtering.&lt;br /&gt;
&lt;br /&gt;
There is also a getArray method that allows you to specify an array of key and filter pairs so that you can get a whole array of filtered input.&lt;br /&gt;
&lt;br /&gt;
If you want to get data from a specific super global array, you can do $input-&amp;gt;get-&amp;gt;get(...) or $input-&amp;gt;post-&amp;gt;get(...).&lt;br /&gt;
&lt;br /&gt;
So that&#039;s the basic idea.  Feel free to post more questions if you have any.&lt;br /&gt;
&lt;br /&gt;
We&#039;ll be adding input as a public property to JApplication in the near future.  It might be an idea if the CMS folks so chose to release a 1.7.1 that included this so developers can use it now.  Otherwise, at this point in time, it is best to still use JRequest.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Deploying_an_Update_Server&amp;diff=79783</id>
		<title>Deploying an Update Server</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Deploying_an_Update_Server&amp;diff=79783"/>
		<updated>2013-01-07T15:25:45Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is for all Joomla! versions newer than {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
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&#039;s manifest, developers enable users to update their extensions via the [[Help16:Extensions Extension Manager Update|Extension Manager&#039;s Update]] view with only a few clicks.&lt;br /&gt;
&lt;br /&gt;
= Defining an update server =&lt;br /&gt;
In order to use this feature, an update server must be defined in your extension&#039;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.  This code should be added to the extension manifest file, within the root &amp;quot;extension&amp;quot; element. The update server is defined as follows for each type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;extension&amp;gt;&lt;br /&gt;
 &amp;lt;...&amp;gt;&lt;br /&gt;
 &amp;lt;updateservers&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;collection&amp;quot;&amp;gt;http://example.com/list.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;2&amp;quot; name=&amp;quot;My Extension&#039;s Updates&amp;quot;&amp;gt;http://example.com/extension.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
 &amp;lt;/updateservers&amp;gt;&lt;br /&gt;
 &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Multiple servers can be defined within the &amp;lt;updateservers&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
= Server types =&lt;br /&gt;
== Collection ==&lt;br /&gt;
The collection server type allows developers to define an extension&#039;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&#039;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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;extensionset name=&amp;quot;Joomla Core&amp;quot; description=&amp;quot;Joomla! Core&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;extension name=&amp;quot;Joomla&amp;quot; element=&amp;quot;joomla&amp;quot; type=&amp;quot;file&amp;quot; version=&amp;quot;1.7.0&amp;quot; detailsurl=&amp;quot;http://update.joomla.org/core/extension.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/extensionset&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All definitions must be defined between &amp;lt;extensionset&amp;gt; tags in your collection manifest.  The &amp;lt;extensionset&amp;gt; tag has two optional parameters; name and description.  For each extension that this collection references, a separate &amp;lt;extension&amp;gt; tag is required.  The &amp;lt;extension&amp;gt; tag has the following parameters, all of which are required for updates to properly process:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the extension&lt;br /&gt;
* &#039;&#039;&#039;element&#039;&#039;&#039; - The untranslated extension name i.e. mod_custom&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; - The extension type (component, module, plugin, etc.)&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - The latest version of the extension&lt;br /&gt;
* &#039;&#039;&#039;detailsurl&#039;&#039;&#039; - The URL of the XML file which contains that extension&#039;s individual update definitions&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
The extension server type allows developers to define an extension&#039;s manifest to pull updates from a single extension&#039;s manifest.  All collection manifests eventually point to this XML file.  All updates in this file must be defined after an &amp;lt;updates&amp;gt; tag at the beginning of the file.  The below example is the update definition for the Joomla! 1.7.0 release:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;update&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;Joomla! 1.7&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Joomla! 1.7 CMS&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;element&amp;gt;joomla&amp;lt;/element&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;1.7.0&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;infourl title=&amp;quot;Joomla!&amp;quot;&amp;gt;http://www.joomla.org/&amp;lt;/infourl&amp;gt;&lt;br /&gt;
    &amp;lt;downloads&amp;gt;&lt;br /&gt;
        &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://joomlacode.org/gf/download/frsrelease/15279/66552/Joomla_1.6.5_to_1.7.0_Package.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
    &amp;lt;/downloads&amp;gt;&lt;br /&gt;
    &amp;lt;tags&amp;gt;&lt;br /&gt;
        &amp;lt;tag&amp;gt;stable&amp;lt;/tag&amp;gt;&lt;br /&gt;
    &amp;lt;/tags&amp;gt;&lt;br /&gt;
    &amp;lt;maintainer&amp;gt;Sam Moffatt&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
    &amp;lt;maintainerurl&amp;gt;http://sammoffatt.com.au&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
    &amp;lt;section&amp;gt;Testing&amp;lt;/section&amp;gt;&lt;br /&gt;
    &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following section describes the elements of a single update entity.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the extension, this name will appear in the Name column of the Extension Manager&#039;s Update view (required)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; - A short description of the extension (optional) -- if you choose to use &amp;lt;![CDATA[]]&amp;gt;, double-quotes will break the HTML formatting.  Use single quotes with your HTML entities.&lt;br /&gt;
* &#039;&#039;&#039;element&#039;&#039;&#039; - The installed name of the extension (required)&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; - The type of extension (component, module, plugin, etc.) (required)&lt;br /&gt;
* &#039;&#039;&#039;folder&#039;&#039;&#039; - Specific to plugins, this tag describes the type of plugin being updated (content, system, etc.) (required for plugins)&lt;br /&gt;
* &#039;&#039;&#039;client&#039;&#039;&#039; (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 &amp;quot;site&amp;quot; and 1 for &amp;quot;administrator&amp;quot;. 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.&lt;br /&gt;
** &#039;&#039;Warning&#039;&#039;: The tag name is &amp;lt;&#039;&#039;&#039;client&#039;&#039;&#039;&amp;gt; for Joomla! 2.5 and &amp;lt;&#039;&#039;&#039;client_id&#039;&#039;&#039;&amp;gt; for 1.6 and 1.7. If you use &amp;lt;client_id&amp;gt; (rather than &amp;lt;client&amp;gt;) on a 2.5 site, it will be ignored.&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - The version of the release (required)&lt;br /&gt;
* &#039;&#039;&#039;infourl&#039;&#039;&#039; - 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)&lt;br /&gt;
* &#039;&#039;&#039;downloads&#039;&#039;&#039; - The section which lists all download locations&lt;br /&gt;
** &#039;&#039;&#039;downloadurl&#039;&#039;&#039; - The URL to download the extension from; the &amp;lt;downloadurl&amp;gt; tag has two required parameters:&lt;br /&gt;
*** &#039;&#039;&#039;type&#039;&#039;&#039; - The type of package (full or upgrade)&lt;br /&gt;
*** &#039;&#039;&#039;format&#039;&#039;&#039; - The format of the package (zip, tar, etc.)&lt;br /&gt;
* &#039;&#039;&#039;tags&#039;&#039;&#039; - Optional (unknown use)&lt;br /&gt;
* &#039;&#039;&#039;maintainer&#039;&#039;&#039; - The name of the extension maintainer (similar to the &amp;lt;author&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* &#039;&#039;&#039;maintainerurl&#039;&#039;&#039; - The website of the extension maintainer (similar to the &amp;lt;authorUrl&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* &#039;&#039;&#039;section&#039;&#039;&#039; - Optional (unknown use)&lt;br /&gt;
* &#039;&#039;&#039;targetplatform&#039;&#039;&#039; - A tag to define platform requirements, requires the following elements&lt;br /&gt;
** &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the platform dependency; as of this writing, it should ONLY be &amp;quot;joomla&amp;quot;&lt;br /&gt;
** &#039;&#039;&#039;version&#039;&#039;&#039; - The version of Joomla! the extension supports&lt;br /&gt;
** &#039;&#039;&#039;min_dev_level&#039;&#039;&#039; and &#039;&#039;&#039;max_dev_level&#039;&#039;&#039; - These attributes were added in 3.0.1 to allow you to select a target platform based on the developer level (&amp;quot;z&amp;quot; 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. &amp;lt;code&amp;gt;&amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;4.0&amp;quot; min_dev_level=&amp;quot;0&amp;quot; max_dev_level=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &#039;&#039;&#039;Note:&#039;&#039;&#039; If your extension is Joomla! 1.6, 1.7, and/or 2.5 compatible, you will be required to have separate &amp;lt;update&amp;gt; definitions for each version due to the manner in which the updater checks the version&lt;br /&gt;
&lt;br /&gt;
A separate &amp;lt;update&amp;gt; definition will be required for each version of your extension you release.&lt;br /&gt;
&lt;br /&gt;
The values of &#039;&#039;&#039;element&#039;&#039;&#039;, &#039;&#039;&#039;type&#039;&#039;&#039;, &#039;&#039;&#039;client_id&#039;&#039;&#039; and &#039;&#039;&#039;folder&#039;&#039;&#039; should match those in the table #__extensions.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
* &#039;&#039;&#039;SQL update script is not executed during update.&#039;&#039;&#039; &lt;br /&gt;
:If the SQL update script (for example, in the folder &amp;lt;code&amp;gt;sql/updates/mysql&amp;lt;/code&amp;gt;) does not get executed during the update process, it could be because there is no version number in the &amp;lt;code&amp;gt;#__schemas&amp;lt;/code&amp;gt; table for this extension &#039;&#039;prior to the update&#039;&#039;. 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 &amp;lt;code&amp;gt;#__schemas&amp;lt;/code&amp;gt; using a SQL query. &lt;br /&gt;
&lt;br /&gt;
= Supporting Tools =&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
= Contributors =&lt;br /&gt;
*[[User:mbabker|Michael Babker]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Deploying_an_Update_Server&amp;diff=79782</id>
		<title>Deploying an Update Server</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Deploying_an_Update_Server&amp;diff=79782"/>
		<updated>2013-01-07T15:23:56Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is for all Joomla! versions newer than {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
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&#039;s manifest, developers enable users to update their extensions via the [[Help16:Extensions Extension Manager Update|Extension Manager&#039;s Update]] view with only a few clicks.&lt;br /&gt;
&lt;br /&gt;
= Defining an update server =&lt;br /&gt;
In order to use this feature, an update server must be defined in your extension&#039;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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;extension&amp;gt;&lt;br /&gt;
 &amp;lt;...&amp;gt;&lt;br /&gt;
 &amp;lt;updateservers&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;collection&amp;quot;&amp;gt;http://example.com/list.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;2&amp;quot; name=&amp;quot;My Extension&#039;s Updates&amp;quot;&amp;gt;http://example.com/extension.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
 &amp;lt;/updateservers&amp;gt;&lt;br /&gt;
 &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Multiple servers can be defined within the &amp;lt;updateservers&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
= Server types =&lt;br /&gt;
== Collection ==&lt;br /&gt;
The collection server type allows developers to define an extension&#039;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&#039;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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;extensionset name=&amp;quot;Joomla Core&amp;quot; description=&amp;quot;Joomla! Core&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;extension name=&amp;quot;Joomla&amp;quot; element=&amp;quot;joomla&amp;quot; type=&amp;quot;file&amp;quot; version=&amp;quot;1.7.0&amp;quot; detailsurl=&amp;quot;http://update.joomla.org/core/extension.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/extensionset&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All definitions must be defined between &amp;lt;extensionset&amp;gt; tags in your collection manifest.  The &amp;lt;extensionset&amp;gt; tag has two optional parameters; name and description.  For each extension that this collection references, a separate &amp;lt;extension&amp;gt; tag is required.  The &amp;lt;extension&amp;gt; tag has the following parameters, all of which are required for updates to properly process:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the extension&lt;br /&gt;
* &#039;&#039;&#039;element&#039;&#039;&#039; - The untranslated extension name i.e. mod_custom&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; - The extension type (component, module, plugin, etc.)&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - The latest version of the extension&lt;br /&gt;
* &#039;&#039;&#039;detailsurl&#039;&#039;&#039; - The URL of the XML file which contains that extension&#039;s individual update definitions&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
The extension server type allows developers to define an extension&#039;s manifest to pull updates from a single extension&#039;s manifest.  All collection manifests eventually point to this XML file.  All updates in this file must be defined after an &amp;lt;updates&amp;gt; tag at the beginning of the file.  The below example is the update definition for the Joomla! 1.7.0 release:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;update&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;Joomla! 1.7&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Joomla! 1.7 CMS&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;element&amp;gt;joomla&amp;lt;/element&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;1.7.0&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;infourl title=&amp;quot;Joomla!&amp;quot;&amp;gt;http://www.joomla.org/&amp;lt;/infourl&amp;gt;&lt;br /&gt;
    &amp;lt;downloads&amp;gt;&lt;br /&gt;
        &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://joomlacode.org/gf/download/frsrelease/15279/66552/Joomla_1.6.5_to_1.7.0_Package.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
    &amp;lt;/downloads&amp;gt;&lt;br /&gt;
    &amp;lt;tags&amp;gt;&lt;br /&gt;
        &amp;lt;tag&amp;gt;stable&amp;lt;/tag&amp;gt;&lt;br /&gt;
    &amp;lt;/tags&amp;gt;&lt;br /&gt;
    &amp;lt;maintainer&amp;gt;Sam Moffatt&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
    &amp;lt;maintainerurl&amp;gt;http://sammoffatt.com.au&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
    &amp;lt;section&amp;gt;Testing&amp;lt;/section&amp;gt;&lt;br /&gt;
    &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following section describes the elements of a single update entity.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the extension, this name will appear in the Name column of the Extension Manager&#039;s Update view (required)&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; - A short description of the extension (optional) -- if you choose to use &amp;lt;![CDATA[]]&amp;gt;, double-quotes will break the HTML formatting.  Use single quotes with your HTML entities.&lt;br /&gt;
* &#039;&#039;&#039;element&#039;&#039;&#039; - The installed name of the extension (required)&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; - The type of extension (component, module, plugin, etc.) (required)&lt;br /&gt;
* &#039;&#039;&#039;folder&#039;&#039;&#039; - Specific to plugins, this tag describes the type of plugin being updated (content, system, etc.) (required for plugins)&lt;br /&gt;
* &#039;&#039;&#039;client&#039;&#039;&#039; (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 &amp;quot;site&amp;quot; and 1 for &amp;quot;administrator&amp;quot;. 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.&lt;br /&gt;
** &#039;&#039;Warning&#039;&#039;: The tag name is &amp;lt;&#039;&#039;&#039;client&#039;&#039;&#039;&amp;gt; for Joomla! 2.5 and &amp;lt;&#039;&#039;&#039;client_id&#039;&#039;&#039;&amp;gt; for 1.6 and 1.7. If you use &amp;lt;client_id&amp;gt; (rather than &amp;lt;client&amp;gt;) on a 2.5 site, it will be ignored.&lt;br /&gt;
* &#039;&#039;&#039;version&#039;&#039;&#039; - The version of the release (required)&lt;br /&gt;
* &#039;&#039;&#039;infourl&#039;&#039;&#039; - 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)&lt;br /&gt;
* &#039;&#039;&#039;downloads&#039;&#039;&#039; - The section which lists all download locations&lt;br /&gt;
** &#039;&#039;&#039;downloadurl&#039;&#039;&#039; - The URL to download the extension from; the &amp;lt;downloadurl&amp;gt; tag has two required parameters:&lt;br /&gt;
*** &#039;&#039;&#039;type&#039;&#039;&#039; - The type of package (full or upgrade)&lt;br /&gt;
*** &#039;&#039;&#039;format&#039;&#039;&#039; - The format of the package (zip, tar, etc.)&lt;br /&gt;
* &#039;&#039;&#039;tags&#039;&#039;&#039; - Optional (unknown use)&lt;br /&gt;
* &#039;&#039;&#039;maintainer&#039;&#039;&#039; - The name of the extension maintainer (similar to the &amp;lt;author&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* &#039;&#039;&#039;maintainerurl&#039;&#039;&#039; - The website of the extension maintainer (similar to the &amp;lt;authorUrl&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* &#039;&#039;&#039;section&#039;&#039;&#039; - Optional (unknown use)&lt;br /&gt;
* &#039;&#039;&#039;targetplatform&#039;&#039;&#039; - A tag to define platform requirements, requires the following elements&lt;br /&gt;
** &#039;&#039;&#039;name&#039;&#039;&#039; - The name of the platform dependency; as of this writing, it should ONLY be &amp;quot;joomla&amp;quot;&lt;br /&gt;
** &#039;&#039;&#039;version&#039;&#039;&#039; - The version of Joomla! the extension supports&lt;br /&gt;
** &#039;&#039;&#039;min_dev_level&#039;&#039;&#039; and &#039;&#039;&#039;max_dev_level&#039;&#039;&#039; - These attributes were added in 3.0.1 to allow you to select a target platform based on the developer level (&amp;quot;z&amp;quot; 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. &amp;lt;code&amp;gt;&amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;4.0&amp;quot; min_dev_level=&amp;quot;0&amp;quot; max_dev_level=&amp;quot;1&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &#039;&#039;&#039;Note:&#039;&#039;&#039; If your extension is Joomla! 1.6, 1.7, and/or 2.5 compatible, you will be required to have separate &amp;lt;update&amp;gt; definitions for each version due to the manner in which the updater checks the version&lt;br /&gt;
&lt;br /&gt;
A separate &amp;lt;update&amp;gt; definition will be required for each version of your extension you release.&lt;br /&gt;
&lt;br /&gt;
The values of &#039;&#039;&#039;element&#039;&#039;&#039;, &#039;&#039;&#039;type&#039;&#039;&#039;, &#039;&#039;&#039;client_id&#039;&#039;&#039; and &#039;&#039;&#039;folder&#039;&#039;&#039; should match those in the table #__extensions.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
* &#039;&#039;&#039;SQL update script is not executed during update.&#039;&#039;&#039; &lt;br /&gt;
:If the SQL update script (for example, in the folder &amp;lt;code&amp;gt;sql/updates/mysql&amp;lt;/code&amp;gt;) does not get executed during the update process, it could be because there is no version number in the &amp;lt;code&amp;gt;#__schemas&amp;lt;/code&amp;gt; table for this extension &#039;&#039;prior to the update&#039;&#039;. 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 &amp;lt;code&amp;gt;#__schemas&amp;lt;/code&amp;gt; using a SQL query. &lt;br /&gt;
&lt;br /&gt;
= Supporting Tools =&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
= Contributors =&lt;br /&gt;
*[[User:mbabker|Michael Babker]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Portal:Developers&amp;diff=67402</id>
		<title>Portal:Developers</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Portal:Developers&amp;diff=67402"/>
		<updated>2012-05-29T19:49:31Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: /* Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
{{Chunk:Developer profile}}&lt;br /&gt;
&lt;br /&gt;
A complete contents list of all pages of interest to developers can be found in the [[:Category:Development|development category]].&lt;br /&gt;
&lt;br /&gt;
== Reference Material ==&lt;br /&gt;
&lt;br /&gt;
* [[Framework|Joomla Framework]].&lt;br /&gt;
* [http://api.joomla.org API documentation] automatically generated using phpDocumentor.&lt;br /&gt;
&lt;br /&gt;
== Joomla Magazine Articles ==&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Apr-2012/item/709-Check-username-availability-with-Ajax Check username availability with Ajax]&lt;br /&gt;
* [http://magazine.joomla.org/issues/issue-feb-2012/item/671-Developing-a-Smart-Search-Plugin Developing a Smart Search plugin]&lt;br /&gt;
* [http://magazine.joomla.org/issues/issue-feb-2012/item/667-Customizing-an-Extensions-Edit-Screen Customising an extension&#039;s edit screen]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Jan-2012/item/652-Integrating-WebSocket-to-Joomla Integrating WebSocket to Joomla]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Jan-2012/item/648-Customising-Joomla-Help Customising Joomla help]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Dec-2011/item/616-Write-your-own-App-using-Joomla-Platform Write you own app using the Joomla Platform]&lt;br /&gt;
* [http://magazine.joomla.org/issues/Issue-Nov-2011/item/591-Sorting-Articles-by-Recently-Touched-Date Sorting articles by recently touched date]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/447-using-doctrine-ORM-in-joomla Using Doctrine ORM in Joomla]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/429-templates-within-templates Rapid development techniques - Templates within templates]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/349-removing-mootools Rapid development techniques - Removing MooTools]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/325-Rapid-Development-Techniques-Preventing-Code-Fragmentation Rapid development techniques - Preventing code fragmentation]&lt;br /&gt;
* [http://magazine.joomla.org/topics/item/145-extending-joomla-mvc-architecture Extending Joomla&#039;s MVC architecture]&lt;br /&gt;
&lt;br /&gt;
== Articles and Tutorials ==&lt;br /&gt;
&lt;br /&gt;
 {{underconstruction}} &lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
* [[Setting up your workstation for PHP development]].  A step-by-step guide to configure a PHP development environment.&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [[Setting up your workstation for extension development]] A guide to Joomla Extension development&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Extension development using eclipse and phing]] This article explains one way in which you can set up your workstation for writing Joomla! extensions. It assumes that you are using Eclipse and that you are familiar with using Eclipse for working with Joomla! and Subversion. For more information about the basics of getting started with Eclipse for Joomla! development.&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Running Automated Tests for Version 1.6]] {{JVer|1.6}}&lt;br /&gt;
* [[How to debug your code]] ([[Do not use die to debug]]!)&lt;br /&gt;
* [[Joomla Beginning Developer Course]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
=== Migration ===&lt;br /&gt;
* [[Adapting a Joomla 1.0 extension to Joomla 1.5]]&lt;br /&gt;
* [[Adapting a Joomla 1.5 extension to Joomla 1.6]]&lt;br /&gt;
* [[Version 1.6 Developer Notes]]&lt;br /&gt;
* [[Making single installation packages for Joomla! 1.5, 1.6 and 1.7]]&lt;br /&gt;
&lt;br /&gt;
=== Components ===&lt;br /&gt;
{{RecReading|Component|dev|topic}}&lt;br /&gt;
=== Modules ===&lt;br /&gt;
{{RecReading|Module|dev|topic}}&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
{{RecReading|Plugin|dev|topic}}&lt;br /&gt;
=== Templates ===&lt;br /&gt;
{{RecReading|Template|dev|topic}}&lt;br /&gt;
===Parameters===&lt;br /&gt;
* [[Standard parameter types]]&lt;br /&gt;
* [[Custom parameter types]]&lt;br /&gt;
* [[Component parameters]]&lt;br /&gt;
* [[Creating custom template parameter types]]&lt;br /&gt;
* See also: [[:Category:Parameters]]&lt;br /&gt;
* See also: [[:Form field]]&lt;br /&gt;
&lt;br /&gt;
=== Core extensions summary ===&lt;br /&gt;
* [[Banner component]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
* [[How to add CSRF anti-spoofing to forms]]&lt;br /&gt;
* [http://developer.joomla.org/tutorials/181-preventing-sql-injections.html Preventing SQL Injections]&lt;br /&gt;
* [[Securing Joomla extensions]]&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
* [[Accessing the database using JDatabase]]&lt;br /&gt;
* [[Using the JTable class]]&lt;br /&gt;
* [[Connecting to an external database]]&lt;br /&gt;
* [[Using nested sets]]&lt;br /&gt;
&lt;br /&gt;
=== Localisation ===&lt;br /&gt;
* [http://community.joomla.org/magazine/article/508-developer-localization-advancements-in-joomla-15.html Localization Advancements in Joomla! 1.5]&lt;br /&gt;
* [[Adding multi-language support]]&lt;br /&gt;
* [[Language Guidelines for 3rd Party Extensions]]&lt;br /&gt;
* [[Adding Joomfish functionality to custom components]]&lt;br /&gt;
* [[Specification of language files]] {{JVer|1.6}}&lt;br /&gt;
* [[Language Metadata]] {{JVer|1.6}}&lt;br /&gt;
* [[Loading extra language files]]&lt;br /&gt;
&lt;br /&gt;
=== Access Control ===&lt;br /&gt;
* [[Access Control System In Joomla 1.6]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous ===&lt;br /&gt;
* [[How to use the filesystem package]]&lt;br /&gt;
* [[API Execution Order]]&lt;br /&gt;
* [[Accessing the current user object]]&lt;br /&gt;
* [[Adding JavaScript and CSS to the page]]&lt;br /&gt;
* [[Constants]] used in the Joomla [[Framework]].&lt;br /&gt;
* [[Client-side form validation]]&lt;br /&gt;
* [[How to create a custom button]]&lt;br /&gt;
* [[How to create a stand-alone application using the Joomla! Framework]]&lt;br /&gt;
* [[How to use user state variables]]&lt;br /&gt;
* [[Adding template overridable images in your extension]]&lt;br /&gt;
* [[Retrieving data from GET and POST requests]]&lt;br /&gt;
* [[Cache]] and [[Using caching to speed up your code]]&lt;br /&gt;
* [[Using the installer API to support package installation]]&lt;br /&gt;
* [[How to add tooltips to your Joomla! website]]&lt;br /&gt;
* [[Display error messages and notices]].&lt;br /&gt;
* [[Errors]]&lt;br /&gt;
* [[Creating a custom form field type]] {{JVer|1.6}}&lt;br /&gt;
&lt;br /&gt;
== Contributing to Joomla Development ==&lt;br /&gt;
The development of Joomla itself is carried out by the [[Development Working Group]] and third party developers.&lt;br /&gt;
&lt;br /&gt;
* [[Participating in the community]]: a brief description of how people can get involved.&lt;br /&gt;
* [[Developer Email lists]]: a list of email lists for developers, including third party developers.&lt;br /&gt;
* [[Coding style and standards]] (To be reviewed).&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://docs.joomla.org/Setting_up_your_workstation_for_Joomla!_development_--_Part_2#Check_Out_Joomla.21_Source_Code How to check out SVN Code]&lt;br /&gt;
* [[Patch submission guidelines]].&lt;br /&gt;
* [[Filing bugs and issues]].&lt;br /&gt;
* [[How to release a distribution tarball]].&lt;br /&gt;
* [[How to create a continuous integration]].&lt;br /&gt;
&lt;br /&gt;
== Contributing to Joomla Developer Documentation ==&lt;br /&gt;
The development of Joomla developer documentation is carried out primarily by the [[Documentation Working Group]].  There are currently two sub-projects of interest to developers:&lt;br /&gt;
* [[Joomla! 1.5 Template Tutorials Project]]&lt;br /&gt;
* [[API Reference Project]]&lt;br /&gt;
&lt;br /&gt;
When creating a new page, ensure you place the following marker at the bottom of the page so it is included in the category list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;[[Category:Development]]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you locate other articles you think are relevant to developers, please add this marker to those pages.&lt;br /&gt;
&lt;br /&gt;
=== Suggested topics ===&lt;br /&gt;
This is a short list of articles that might be written to support developers.  Please feel free to add further topic ideas.&lt;br /&gt;
&lt;br /&gt;
* [[Adding configuration objects to modules and plugins]].&lt;br /&gt;
* [[Storing data in the session between page loads]].&lt;br /&gt;
* [[Suppressing output of extra HTML]].&lt;br /&gt;
* [[How to use the filter package]].&lt;br /&gt;
*: Describe how and when to use the Filter package and explain what needs to be filtered for various situations (for queries, for URLs, etc)&lt;br /&gt;
* [[How to use the registry package]]&lt;br /&gt;
* [[How to use JSimpleXML]].&lt;br /&gt;
*: How to load and store XML files and how to work with them&lt;br /&gt;
* [[How to create component feeds]] (RSS/ATOM)&lt;br /&gt;
* [[How to create PDF views]]&lt;br /&gt;
* [[How to generate paths for client side and server side]]&lt;br /&gt;
* [[How to access information from the request]]&lt;br /&gt;
*: This focuses on using the JBrowser class to retrieve information about the features available in the user&#039;s browser.&lt;br /&gt;
* [[How to create an editor plugin]]&lt;br /&gt;
* [[What can be done with a user plugin]]&lt;br /&gt;
* [[How to work with parameters]]&lt;br /&gt;
* [[How to cloak email addresses]]&lt;br /&gt;
* [[Using the caching system in your component]]. This might be enough (for now?) -&amp;gt; [[Cache]]&lt;br /&gt;
* [[Extending Joomla&#039;s MVC Architecture]]&lt;br /&gt;
&lt;br /&gt;
==Joomla Security Guide==&lt;br /&gt;
Developers should also be aware of security issues.&lt;br /&gt;
{{Security Guide}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:JED]]&lt;br /&gt;
[[Category:Joomla! user profiles]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrading_a_Joomla_1.5_template_to_Joomla_2.5&amp;diff=67213</id>
		<title>Archived:Upgrading a Joomla 1.5 template to Joomla 2.5</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrading_a_Joomla_1.5_template_to_Joomla_2.5&amp;diff=67213"/>
		<updated>2012-05-10T23:03:08Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: /* Template Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
This page provides feedback on the process of upgrading or converting a Joomla 1.5 template for use with Joomla 1.6 and later versions from those who have already attempted it. This is intended to be a living document that can be added to as more experience is gained and is likely to be reorganised periodically. If you have encountered a problem when upgrading a template, or if you have any information that you think will help smooth the way for others who will follow then please add your comments initially on the Talk page. We will then collate the information and incorporate it into this page.&lt;br /&gt;
&lt;br /&gt;
[[User:Chris Davenport|Chris Davenport]] prepared [http://www.slideshare.net/chrisdavenport/template-changes-for-joomla-16 slides for a presentation at the JoomlaDay UK 2010 event] which explain the changes in templates for Joomla! 1.6.&lt;br /&gt;
&lt;br /&gt;
== Template Manifest File ==&lt;br /&gt;
There are important changes to the &#039;&#039;templateDetails.xml&#039;&#039; file:&lt;br /&gt;
# Add the new 1.6 Doctype&lt;br /&gt;
# Change the &#039;&#039;&amp;lt;install&amp;gt;&#039;&#039; tag to &#039;&#039;&amp;lt;extension&amp;gt;&#039;&#039; as shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE install PUBLIC &amp;quot;-//Joomla! 1.6//DTD template 1.0//EN&amp;quot; &amp;quot;http://www.joomla.org/xml/dtd/1.6/template-install.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;extension version=&amp;quot;1.7&amp;quot; type=&amp;quot;template&amp;quot; client=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Notice the additional new &#039;&#039;client&#039;&#039; attribute which is set to &#039;&#039;site&#039;&#039; for a front-facing template and &#039;&#039;administrator&#039;&#039; for an back-end template.&lt;br /&gt;
&lt;br /&gt;
Be sure to change the closing tag from &#039;&#039;&amp;lt;/install&amp;gt;&#039;&#039; to &#039;&#039;&amp;lt;/extension&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Template Parameters ===&lt;br /&gt;
In Joomla! 1.5, 1.6 and later versions, the template parameters are defined in templateDetails.xml. &lt;br /&gt;
&lt;br /&gt;
Whereas in 1.5 parameters are defined as part of the &amp;lt;code&amp;gt;&amp;lt;params&amp;gt;&amp;lt;/code&amp;gt; section, and each parameter is defined as a &amp;lt;code&amp;gt;&amp;lt;param&amp;gt;&amp;lt;/code&amp;gt;, in 1.6 and later template parameters are contained in the &amp;lt;code&amp;gt;&amp;lt;config&amp;gt;&amp;lt;/code&amp;gt; section and treated as a &amp;lt;code&amp;gt;&amp;lt;field&amp;gt;&amp;lt;/code&amp;gt; nested within the &amp;lt;code&amp;gt;&amp;lt;fieldset&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;fields&amp;gt;&amp;lt;/code&amp;gt; tags, as illustrated below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;config&amp;gt;&lt;br /&gt;
    &amp;lt;fields name=&amp;quot;params&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;&amp;quot; type=&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;On&amp;lt;/option&amp;gt;&lt;br /&gt;
                &amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;Off&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;/field&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;&amp;quot; type=&amp;quot;&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;e&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/fieldset&amp;gt;&lt;br /&gt;
    &amp;lt;/fields&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; wraps the parameters in a grouping element. Using &#039;&#039;name=&amp;quot;basic&amp;quot;&#039;&#039; labels that element as &amp;quot;Basic Options&amp;quot; and &#039;&#039;name=&amp;quot;advanced&amp;quot;&#039;&#039; labels it as &amp;quot;Advanced Options&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;name&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;default&#039;&#039;, &#039;&#039;label&#039;&#039; and &#039;&#039;description&#039;&#039; attributes still apply.&lt;br /&gt;
&lt;br /&gt;
Outside of the main template files, you can access these parameters using the JApplication class. Previously, the values of the template parameters were stored in a plain text .ini file. In order to access those values outside of the template you needed to read the ini file and load the data into a JRegistry or JParameters object. Now, the values are stored in the database with other template information. We can load the params by passing the true variable to the getTemplate method of the JApplication object. It can be accessed like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$app		=&amp;amp; JFactory::getApplication();&lt;br /&gt;
$template	= $app-&amp;gt;getTemplate(true);&lt;br /&gt;
$params		= $template-&amp;gt;params;&lt;br /&gt;
$variable	= $params-&amp;gt;get(&#039;variable&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will allow you to access the template params in your layout overrides for other components, and modules.&lt;br /&gt;
&lt;br /&gt;
== Objects and Methods ==&lt;br /&gt;
=== Sitename ===&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;?php echo $mainframe-&amp;gt;getCfg(&#039;sitename&#039;);?&amp;gt;&amp;lt;/code&amp;gt; is now &amp;lt;code&amp;gt;$app-&amp;gt;getCfg(&#039;sitename&#039;);&amp;lt;/code&amp;gt; Where &amp;lt;code&amp;gt;$app = JFactory::getApplication();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error Codes ===&lt;br /&gt;
* &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;code&amp;lt;/code&amp;gt; is replaced by &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;getCode();&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;message&amp;lt;/code&amp;gt; is replaced by &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;getMessage();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discovery ==&lt;br /&gt;
In some cases your converted template may not be shown in the Template Manager even though all coding appears to be correct. Verify that your template files are installed in the &#039;&#039;/templates&#039;&#039; directory. Then run the Discover process as follows.&lt;br /&gt;
# Go to Administrator &amp;gt; Extensions &amp;gt; Extension Manager &amp;gt; Discover&lt;br /&gt;
# Click the Discover icon.&lt;br /&gt;
# If your template appears on the list, select it and then click the Install icon.&lt;br /&gt;
&lt;br /&gt;
== Layout Overrides ==&lt;br /&gt;
=== com_content ===&lt;br /&gt;
If you have used the Beez overrides, or code derived from the Beez overrides, in your 1.5 template, you may encounter a &#039;&#039;JHtml::icon not supported. File not found.&#039;&#039; error when migrating the template to Joomla 1.6 and later. To fix this, simply add the following statement near the top of the template html/com_content/article/default.php file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
JHtml::addIncludePath( JPATH_COMPONENT . &#039;/helpers&#039; );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alternate Method Using a Version 2.5 Template==&lt;br /&gt;
Start with a basic template that works with a current version of Joomla. For this example, use the Atomic template that is supplied with Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
# Copy the entire &#039;&#039;/templates/atomic&#039;&#039; folder to a new folder in the &#039;&#039;/templates&#039;&#039; directory.&lt;br /&gt;
# Rename this new folder. For instance, you might call it &#039;&#039;mysitename-atomic&#039;&#039; to designate it as the custom template for this site and adding the reminder that it was derived from the &#039;&#039;atomic&#039;&#039; template.&lt;br /&gt;
# In the new template&#039;s &#039;&#039;index.php&#039;&#039; file, delete everything between the &#039;&#039;&amp;lt;body&amp;gt; &amp;lt;/body&amp;gt;&#039;&#039; tags.&lt;br /&gt;
# Copy and paste everything within the &#039;&#039;&amp;lt;body&amp;gt; &amp;lt;/body&amp;gt;&#039;&#039; tags from your version 1.5 template to the body of the new template&#039;s &#039;&#039;index.php&#039;&#039; file.&lt;br /&gt;
# Delete or rename the &#039;&#039;template.css&#039;&#039; file copied from the Atomic template.&lt;br /&gt;
# Copy the &#039;&#039;template.css&#039;&#039; file from the old version 1.5 template.&lt;br /&gt;
# Update the &#039;&#039;templateDetails.xml&#039;&#039; file in the revised template.&lt;br /&gt;
## Change the &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; entry to match the name of the template folder. It is case-sensitive. If the folder is &#039;&#039;/templates/mysitename-atomic&#039;&#039;, the entry in the &#039;&#039;templateDetails.xml&#039;&#039; file will be &#039;&#039;&amp;lt;name&amp;gt;mysitename-atomic&amp;lt;/name&amp;gt;&#039;&#039;.&lt;br /&gt;
## Replace the &#039;&#039;&amp;lt;positions&amp;gt;&#039;&#039; section of the file so that they match the positions used in the &#039;&#039;index.php&#039;&#039; file.&lt;br /&gt;
## Change the other elements as necessary. For instance, you might want to modify the creation date and version number.&lt;br /&gt;
# Delete images in the &#039;&#039;/template/image&#039;&#039; file and add your images.&lt;br /&gt;
# Delete the lines in the &#039;&#039;&amp;lt;head&amp;gt;&#039;&#039; section of the &#039;&#039;index.php&#039;&#039; file that load CSS and Javascript files that are not needed.&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;br /&gt;
[[Category:Template Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrading_a_Joomla_1.5_template_to_Joomla_2.5&amp;diff=67212</id>
		<title>Archived:Upgrading a Joomla 1.5 template to Joomla 2.5</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrading_a_Joomla_1.5_template_to_Joomla_2.5&amp;diff=67212"/>
		<updated>2012-05-10T22:14:01Z</updated>

		<summary type="html">&lt;p&gt;Goldenmean: /* Template Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
This page provides feedback on the process of upgrading or converting a Joomla 1.5 template for use with Joomla 1.6 and later versions from those who have already attempted it. This is intended to be a living document that can be added to as more experience is gained and is likely to be reorganised periodically. If you have encountered a problem when upgrading a template, or if you have any information that you think will help smooth the way for others who will follow then please add your comments initially on the Talk page. We will then collate the information and incorporate it into this page.&lt;br /&gt;
&lt;br /&gt;
[[User:Chris Davenport|Chris Davenport]] prepared [http://www.slideshare.net/chrisdavenport/template-changes-for-joomla-16 slides for a presentation at the JoomlaDay UK 2010 event] which explain the changes in templates for Joomla! 1.6.&lt;br /&gt;
&lt;br /&gt;
== Template Manifest File ==&lt;br /&gt;
There are important changes to the &#039;&#039;templateDetails.xml&#039;&#039; file:&lt;br /&gt;
# Add the new 1.6 Doctype&lt;br /&gt;
# Change the &#039;&#039;&amp;lt;install&amp;gt;&#039;&#039; tag to &#039;&#039;&amp;lt;extension&amp;gt;&#039;&#039; as shown below.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE install PUBLIC &amp;quot;-//Joomla! 1.6//DTD template 1.0//EN&amp;quot; &amp;quot;http://www.joomla.org/xml/dtd/1.6/template-install.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;extension version=&amp;quot;1.7&amp;quot; type=&amp;quot;template&amp;quot; client=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Notice the additional new &#039;&#039;client&#039;&#039; attribute which is set to &#039;&#039;site&#039;&#039; for a front-facing template and &#039;&#039;administrator&#039;&#039; for an back-end template.&lt;br /&gt;
&lt;br /&gt;
Be sure to change the closing tag from &#039;&#039;&amp;lt;/install&amp;gt;&#039;&#039; to &#039;&#039;&amp;lt;/extension&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Template Parameters ===&lt;br /&gt;
In Joomla! 1.5, 1.6 and later versions, the template parameters are defined in templateDetails.xml. &lt;br /&gt;
&lt;br /&gt;
Whereas in 1.5 parameters are defined as part of the &amp;lt;code&amp;gt;&amp;lt;params&amp;gt;&amp;lt;/code&amp;gt; section, and each parameter is defined as a &amp;lt;code&amp;gt;&amp;lt;param&amp;gt;&amp;lt;/code&amp;gt;, in 1.6 and later template parameters are contained in the &amp;lt;code&amp;gt;&amp;lt;config&amp;gt;&amp;lt;/code&amp;gt; section and treated as a &amp;lt;code&amp;gt;&amp;lt;field&amp;gt;&amp;lt;/code&amp;gt; nested within the &amp;lt;code&amp;gt;&amp;lt;fieldset&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;fields&amp;gt;&amp;lt;/code&amp;gt; tags, as illustrated below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;config&amp;gt;&lt;br /&gt;
    &amp;lt;fields name=&amp;quot;params&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;&amp;quot; type=&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;&amp;quot; description=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;On&amp;lt;/option&amp;gt;&lt;br /&gt;
                &amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;Off&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;/field&amp;gt;&lt;br /&gt;
            &amp;lt;field name=&amp;quot;&amp;quot; type=&amp;quot;&amp;quot; default=&amp;quot;&amp;quot; label=&amp;quot;e&amp;quot; description=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/fieldset&amp;gt;&lt;br /&gt;
    &amp;lt;/fields&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; wraps the parameters in a grouping element. Using &#039;&#039;name=&amp;quot;basic&amp;quot;&#039;&#039; labels that element as &amp;quot;Basic Options&amp;quot; and &#039;&#039;name=&amp;quot;advanced&amp;quot;&#039;&#039; labels it as &amp;quot;Advanced Options&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;name&#039;&#039;, &#039;&#039;type&#039;&#039;, &#039;&#039;default&#039;&#039;, &#039;&#039;label&#039;&#039; and &#039;&#039;description&#039;&#039; attributes still apply.&lt;br /&gt;
&lt;br /&gt;
Outside of the main template files, you can access these parameters using the JDocument class. Previously, the values of the template parameters were stored in a plain text .ini file. In order to access those values outside of the template you needed to read the ini file and load the data into a JRegistry or JParameters object. Now, the values are stored in the params variable of the JDocumentHTML object. It can be accessed like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$document =&amp;amp; JFactory::getDocument();&lt;br /&gt;
$params = $document-&amp;gt;get(&#039;params&#039;);&lt;br /&gt;
$google = $params-&amp;gt;get(&#039;analytics_id&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will allow you to access the template params in your layout overrides for other components.&lt;br /&gt;
&lt;br /&gt;
== Objects and Methods ==&lt;br /&gt;
=== Sitename ===&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;?php echo $mainframe-&amp;gt;getCfg(&#039;sitename&#039;);?&amp;gt;&amp;lt;/code&amp;gt; is now &amp;lt;code&amp;gt;$app-&amp;gt;getCfg(&#039;sitename&#039;);&amp;lt;/code&amp;gt; Where &amp;lt;code&amp;gt;$app = JFactory::getApplication();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error Codes ===&lt;br /&gt;
* &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;code&amp;lt;/code&amp;gt; is replaced by &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;getCode();&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;message&amp;lt;/code&amp;gt; is replaced by &amp;lt;code&amp;gt;$this-&amp;gt;error-&amp;gt;getMessage();&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Discovery ==&lt;br /&gt;
In some cases your converted template may not be shown in the Template Manager even though all coding appears to be correct. Verify that your template files are installed in the &#039;&#039;/templates&#039;&#039; directory. Then run the Discover process as follows.&lt;br /&gt;
# Go to Administrator &amp;gt; Extensions &amp;gt; Extension Manager &amp;gt; Discover&lt;br /&gt;
# Click the Discover icon.&lt;br /&gt;
# If your template appears on the list, select it and then click the Install icon.&lt;br /&gt;
&lt;br /&gt;
== Layout Overrides ==&lt;br /&gt;
=== com_content ===&lt;br /&gt;
If you have used the Beez overrides, or code derived from the Beez overrides, in your 1.5 template, you may encounter a &#039;&#039;JHtml::icon not supported. File not found.&#039;&#039; error when migrating the template to Joomla 1.6 and later. To fix this, simply add the following statement near the top of the template html/com_content/article/default.php file:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
JHtml::addIncludePath( JPATH_COMPONENT . &#039;/helpers&#039; );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alternate Method Using a Version 2.5 Template==&lt;br /&gt;
Start with a basic template that works with a current version of Joomla. For this example, use the Atomic template that is supplied with Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
# Copy the entire &#039;&#039;/templates/atomic&#039;&#039; folder to a new folder in the &#039;&#039;/templates&#039;&#039; directory.&lt;br /&gt;
# Rename this new folder. For instance, you might call it &#039;&#039;mysitename-atomic&#039;&#039; to designate it as the custom template for this site and adding the reminder that it was derived from the &#039;&#039;atomic&#039;&#039; template.&lt;br /&gt;
# In the new template&#039;s &#039;&#039;index.php&#039;&#039; file, delete everything between the &#039;&#039;&amp;lt;body&amp;gt; &amp;lt;/body&amp;gt;&#039;&#039; tags.&lt;br /&gt;
# Copy and paste everything within the &#039;&#039;&amp;lt;body&amp;gt; &amp;lt;/body&amp;gt;&#039;&#039; tags from your version 1.5 template to the body of the new template&#039;s &#039;&#039;index.php&#039;&#039; file.&lt;br /&gt;
# Delete or rename the &#039;&#039;template.css&#039;&#039; file copied from the Atomic template.&lt;br /&gt;
# Copy the &#039;&#039;template.css&#039;&#039; file from the old version 1.5 template.&lt;br /&gt;
# Update the &#039;&#039;templateDetails.xml&#039;&#039; file in the revised template.&lt;br /&gt;
## Change the &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; entry to match the name of the template folder. It is case-sensitive. If the folder is &#039;&#039;/templates/mysitename-atomic&#039;&#039;, the entry in the &#039;&#039;templateDetails.xml&#039;&#039; file will be &#039;&#039;&amp;lt;name&amp;gt;mysitename-atomic&amp;lt;/name&amp;gt;&#039;&#039;.&lt;br /&gt;
## Replace the &#039;&#039;&amp;lt;positions&amp;gt;&#039;&#039; section of the file so that they match the positions used in the &#039;&#039;index.php&#039;&#039; file.&lt;br /&gt;
## Change the other elements as necessary. For instance, you might want to modify the creation date and version number.&lt;br /&gt;
# Delete images in the &#039;&#039;/template/image&#039;&#039; file and add your images.&lt;br /&gt;
# Delete the lines in the &#039;&#039;&amp;lt;head&amp;gt;&#039;&#039; section of the &#039;&#039;index.php&#039;&#039; file that load CSS and Javascript files that are not needed.&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;br /&gt;
[[Category:Template Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Goldenmean</name></author>
	</entry>
</feed>