<?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=Munchkin</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=Munchkin"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Munchkin"/>
	<updated>2026-06-30T06:46:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018076</id>
		<title>Talk:Manifest files</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018076"/>
		<updated>2023-11-28T21:16:18Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manifest information on adding dashboards needs to be added. See https://github.com/joomla/joomla-cms/pull/31397&lt;br /&gt;
&lt;br /&gt;
== Confusing description regarding languages element ==&lt;br /&gt;
&lt;br /&gt;
The given description for the languages element (&amp;lt;languages&amp;gt;&amp;lt;language tag=&amp;quot;...&amp;quot;&amp;gt;..&amp;lt;/language&amp;gt;&amp;lt;/language&amp;gt;) is confusing to me. It sounds like in recent versions of Joomla, it is enough to specify the &amp;quot;language&amp;quot; folder to copy to the extension folder. [https://github.com/codeling/bfstop/issues/204 From my experience however], this is not enough; in the linked case, onlyadding the separate &amp;quot;&amp;lt;languages&amp;gt;&amp;quot; element (without the folder attribute, as mentioned following the sentence &amp;quot;Note that both ways can work together.&amp;quot;) actually makes the translations &#039;&#039;&#039;within a language folder in the extension folder &#039;&#039;&#039;work &#039;&#039;&#039;reliably&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The text following the example code for the languages element (&amp;quot;The advantages of this solution are the following...&amp;quot;) I also find confusing: If I understand it correctly, adding the languages element enables files in the top level language folder (put there either by the extension itself or by the user) to override language strings from the language folder in the extension; and that this is not possible if the languages element does not exist.&lt;br /&gt;
&lt;br /&gt;
But nowhere is it explained what the languages element with its sub-elements actually is really good for in this case. Why is this information needed, and why is that &amp;quot;advantage&amp;quot; only available if the element exists? The file names need to follow a fixed naming scheme anyway, right? Supposedly, Joomla only checks the root level language folder if the languages element exists? But from the bug report linked to above, I can rule out that this entry is &#039;&#039;&#039;just&#039;&#039;&#039; there to make Joomla also check the root languages folder; it apparently at least &#039;&#039;also&#039;&#039; somehow affects the loading/processing of files inside the extensions directory.&lt;br /&gt;
&lt;br /&gt;
I have neither the time nor the knowledge to check this in the Joomla code unfortunately (that&#039;s why I&#039;m posting here instead of changing the documentation directly; but I do suspect that for making translations &#039;&#039;&#039;reliably work&#039;&#039;&#039;, both a &amp;quot;languages&amp;quot; folder copied to within the extension directory, as well as the &amp;quot;languages&amp;quot; element, are actually required / best practice; and using anything else (is probably not well-tested and) can lead to unforseen consequences.&lt;br /&gt;
&lt;br /&gt;
[[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 15:14, 28 November 2023 (CST)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018075</id>
		<title>Talk:Manifest files</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018075"/>
		<updated>2023-11-28T21:14:20Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manifest information on adding dashboards needs to be added. See https://github.com/joomla/joomla-cms/pull/31397&lt;br /&gt;
&lt;br /&gt;
== Confusing description regarding languages element ==&lt;br /&gt;
&lt;br /&gt;
The given description for the languages element (&amp;lt;languages&amp;gt;&amp;lt;language tag=&amp;quot;...&amp;quot;&amp;gt;..&amp;lt;/language&amp;gt;&amp;lt;/language&amp;gt;) is confusing to me. It sounds like in recent versions of Joomla, it is enough to specify the &amp;quot;language&amp;quot; folder to copy to the extension folder. [https://github.com/codeling/bfstop/issues/204 From my experience however], this is not enough; only adding the separate &amp;quot;&amp;lt;languages&amp;gt;&amp;quot; element (without folder) as mentioned following the sentence &amp;quot;Note that both ways can work together.&amp;quot; actually makes it work &#039;&#039;&#039;reliably&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The text following the example code for the languages element (&amp;quot;The advantages of this solution are the following...&amp;quot;) I also find confusing: If I understand it correctly, adding the languages element enables files in the top level language folder (put there either by the extension itself or by the user) to override language strings from the language folder in the extension; and that this is not possible if the languages element does not exist.&lt;br /&gt;
&lt;br /&gt;
But nowhere is it explained what the languages element with its sub-elements actually is really good for in this case. Why is this information needed, and why is that &amp;quot;advantage&amp;quot; only available if the element exists? The file names need to follow a fixed naming scheme anyway, right? Supposedly, Joomla only checks the root level language folder if the languages element exists? But from the bug report linked to above, I can rule out that this entry is &#039;&#039;&#039;just&#039;&#039;&#039; there to make Joomla also check the root languages folder; it apparently at least &#039;&#039;also&#039;&#039; somehow affects the loading/processing of files inside the extensions directory.&lt;br /&gt;
&lt;br /&gt;
I have neither the time nor the knowledge to check this in the Joomla code unfortunately (that&#039;s why I&#039;m posting here instead of changing the documentation directly; but I do suspect that for making translations &#039;&#039;&#039;reliably work&#039;&#039;&#039;, both a &amp;quot;languages&amp;quot; folder copied to within the extension directory, as well as the &amp;quot;languages&amp;quot; element, are actually required / best practice; and using anything else (is probably not well-tested and) can lead to unforseen consequences.&lt;br /&gt;
&lt;br /&gt;
[[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 15:14, 28 November 2023 (CST)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018074</id>
		<title>Talk:Manifest files</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Manifest_files&amp;diff=1018074"/>
		<updated>2023-11-28T21:07:44Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manifest information on adding dashboards needs to be added. See https://github.com/joomla/joomla-cms/pull/31397&lt;br /&gt;
&lt;br /&gt;
== Confusing description regarding languages element ==&lt;br /&gt;
&lt;br /&gt;
The given description for the languages element (&amp;lt;languages&amp;gt;&amp;lt;language tag=&amp;quot;...&amp;quot;&amp;gt;..&amp;lt;/language&amp;gt;&amp;lt;/language&amp;gt;) is confusing to me. It sounds like in recent versions of Joomla, it is enough to specify the &amp;quot;language&amp;quot; folder to copy to the extension folder. [https://github.com/codeling/bfstop/issues/204 From my experience however], this is not enough; only adding the separate &amp;quot;&amp;lt;languages&amp;gt;&amp;quot; element (without folder) as mentioned following the sentence &amp;quot;Note that both ways can work together.&amp;quot; actually makes it work &#039;&#039;&#039;reliably&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The text following the example code for the languages element (&amp;quot;The advantages of this solution are the following...&amp;quot;) I also find confusing: If I understand it correctly, adding the languages element enables files in the top level language folder (put there either by the extension itself or by the user) to override language strings from the language folder in the extension; and that this is not possible if the languages element does not exist.&lt;br /&gt;
&lt;br /&gt;
But nowhere is it explained what the languages element with its sub-elements actually is really good for in this case. Why is this information needed, and why is that &amp;quot;advantage&amp;quot; only available if the element exists? The file names need to follow a fixed naming scheme anyway, right? Supposedly, Joomla only checks the root level language folder if the languages element exists? But from the bug report linked to above, I can rule out that this entry is &#039;&#039;&#039;just&#039;&#039;&#039; there to make Joomla also check the root languages folder; it apparently at least &#039;&#039;also&#039;&#039; somehow affects the loading/processing of files inside the extensions directory.&lt;br /&gt;
&lt;br /&gt;
I have neither the time nor the knowledge to check this in the Joomla code unfortunately (that&#039;s why I&#039;m posting here instead of changing the documentation directly; but I do suspect that for making translations &#039;&#039;&#039;reliably work&#039;&#039;&#039;, both a &amp;quot;languages&amp;quot; folder copied to within the extension directory, as well as the &amp;quot;languages&amp;quot; element, are actually required / best practice; and using anything else (is probably not well-tested and) can lead to unforseen consequences.&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=478571</id>
		<title>Potential backward compatibility issues in Joomla 4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=478571"/>
		<updated>2018-02-27T07:46:43Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: correct JSubMenuHelper note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{incomplete}}{{RightTOC}}&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
This document tracks potential backward compatibility issues for Joomla! 4. Listed are issues which potentially break extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
The base of this comparison is Joomla! 3.7.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Updated System Requirements == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
The system requirements have been updated as follows:&lt;br /&gt;
*PHP 7&lt;br /&gt;
*MySQL 5.5.3&lt;br /&gt;
*PostgreSQL 9.2&lt;br /&gt;
*SQL Server support has been dropped.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== PHP MySQL Extension === &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
*Joomla no longer supports using PHP&#039;s ext/mysql driver (which was removed in PHP 7.0). Joomla will automatically try and use the mysqli extension (available since PHP 5.3) or the mysql PDO Driver (available since PHP 5.3) else it will fail to create a database connection.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMS Libraries == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! CMS libraries (this is primarily code found in the `libraries/cms` directory in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Installer === &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JInstallerComponent (use JInstallerAdapterComponent instead)&lt;br /&gt;
*JInstallerFile (use JInstallerAdapterFile instead)&lt;br /&gt;
*JInstallerLanguage (use JInstallerAdapterLanguage instead)&lt;br /&gt;
*JInstallerLibrary (use JInstallerAdapterLibrary instead)&lt;br /&gt;
*JInstallerModule (use JInstallerAdapterModule instead)&lt;br /&gt;
*JInstallerPackage (use JInstallerAdapterPackage instead)&lt;br /&gt;
*JInstallerPlugin (use JInstallerAdapterPlugin instead)&lt;br /&gt;
*JInstallerTemplate (use JInstallerAdapterTemplate instead)&lt;br /&gt;
*JSubMenuHelper (use JHtmlSidebar instead; note that in contrast to JSubMenuHelper, this requires an addition of a placeholder in your view template)&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JInstallerAdapter Inheritance ==== &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
JInstallerAdapter no longer extends from JAdapterInstance and inherently JObject.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Menu === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JMenu is now an abstract class ==== &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
JMenu is now an abstract class. Subclasses of JMenu must now also implement a load method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
The logic in JMenu::getInstance() to manually include a file from the application&#039;s includes/menu.php path has been removed. The JMenu subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Pathway === &amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
The logic in JPathway::getInstance() to manually include a file from the application&#039;s includes/pathway.php path has been removed. The JPathway subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Router === &amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
The logic in JRouter::getInstance() to manually include a file from the application&#039;s includes/router.php path has been removed. The JRouter subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== JVersion === &amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Support for accessing the JVersion class constants as class properties is no longer supported. The constants were introduced in Joomla! 3.5 to prevent the old class properties from being edited.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Platform == &amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! Platform libraries (this is primarily code found in the `libraries/joomla` or `libraries/legacy` directories in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Application === &amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JApplicationWebRouter (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterBase (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterRest (use the `joomla/router` package instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JApplicationBase (use Joomla\Application\AbstractApplication instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== CLI/Web Class Changes ==== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
The JApplicationCli and JApplicationWeb classes have been recomposed to extend from the Framework&#039;s Application package instead. This breaks type checks for a JApplicationBase object. For forward compatibility, it is recommended to check if application classes are an instance of Joomla\Application\AbstractApplication (JApplicationBase has extended this class since Joomla! 3.4).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
Additionally, both of these classes are now abstract. Developers implementing these classes must provide a `doExecute` method with their application&#039;s logic.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JApplicationCli =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} Joomla\Application\AbstractCliApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
===== JApplicationWeb =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} Joomla\Application\AbstractWebApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
=== Crypt ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
Removed Classes&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
The following ciphers have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JCryptCipher3Des&lt;br /&gt;
*JCryptCipherBlowfish&lt;br /&gt;
*JCryptCipherMcrypt&lt;br /&gt;
*JCryptCipherRijndael256&lt;br /&gt;
*JCryptCipherSimple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
These have been removed without replacement. Use JCryptCipherCrypto&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Document === &amp;lt;!--T:101--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JDocumentError (use \Joomla\Cms\Error\RendererInterface objects instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
The property type of JDocumentFeed::$lastBuildDate has changed from a string to a JDate object. The property was previously unused by the core Joomla API but extensions may have used it.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRendererFeedRss ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
In order to comply with the RSS feed specification, JDocumentRendererFeedRss now allows the lastBuildDate element to be configured using the JDocumentFeed::$lastBuildDate class property when a feed is rendered.  This value defaults to the current time, as is the case with Joomla! 3.x and earlier, however the time can be correctly set by changing this class property to a JDate object representing the desired timestamp.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:47--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JHttpResponse (use Joomla\Http\Response instead)&lt;br /&gt;
*JHttpTransport (implement Joomla\Http\TransportInterface instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Class Changes ==== &amp;lt;!--T:49--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The Framework&#039;s HTTP package is now included in Joomla! 4.0 and JHttp and the JHttpTransport subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttp =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
The JHttp class constructor has been loosened with the following changes:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
*The options parameter is no longer typehinted as a Joomla\Registry\Registry object, an array or any object implementing the [https://secure.php.net/manual/en/class.arrayaccess.php ArrayAccess] interface can be used instead&lt;br /&gt;
*The transport parameter now allows any Joomla\Http\TransportInterface object.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpTransport =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
The now deprecated JHttpTransport interface extends Joomla\Http\TransportInterface now and has caused backward compatibility breaking changes in the interface.  The constructor is no longer part of the interface, and the interface&#039;s `request()` method has had a signature change.  Specifically, the second parameter which previously typehinted the JUri class now typehints Joomla\Uri\UriInterface.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpResponse =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
In refactoring the response object to inherit from the Framework&#039;s HTTP package, which is now using the PSR-7 ResponseInterface API, a minor compatibility break has been made in the structure of the response headers.  As of 4.0, this will now always be a multi-dimensional array where the key is the header name and the value is an array of values for that header (previously, this was a string).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Image === &amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
* JImageFilter (use Joomla\Image\ImageFilter instead)&lt;br /&gt;
* JImageFilterBackgroundfill (use Joomla\Image\Filter\Backgroundfill instead)&lt;br /&gt;
* JImageFilterBrightness (use Joomla\Image\Filter\Brightness instead)&lt;br /&gt;
* JImageFilterContrast (use Joomla\Image\Filter\Contrast instead)&lt;br /&gt;
* JImageFilterEdgedetect (use Joomla\Image\Filter\Edgedetect instead)&lt;br /&gt;
* JImageFilterEmboss (use Joomla\Image\Filter\Emboss instead)&lt;br /&gt;
* JImageFilterGrayscale (use Joomla\Image\Filter\Grayscale instead)&lt;br /&gt;
* JImageFilterNegate (use Joomla\Image\Filter\Negate instead)&lt;br /&gt;
* JImageFilterSketchy (use Joomla\Image\Filter\Sketchy instead) &lt;br /&gt;
* JImageFilterSmooth (use Joomla\Image\Filter\Smooth instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Class Changes ==== &amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
The Framework&#039;s Image package is now included in Joomla! 4.0 and JImage and the JImageFilter subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
=== Keychain ===&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the following class:&lt;br /&gt;
*JKeychain&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Table === &amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
* JTable::__construct database object is now typehinted to be a JDatabaseDriver.&lt;br /&gt;
** Subclasses of JTable will need to ensure they are passing a JDatabaseDriver object to the parent constructor&lt;br /&gt;
** Subclasses of JTable will need to change the method signature of setDbo() if they have an extended version of that method to include the typehint&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Mail === &amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
The following methods have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
* JMail::sendAdminMail has been removed&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Legacy MVC Layer === &amp;lt;!--T:65--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Legacy Controller ==== &amp;lt;!--T:66--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
* JControllerLegacy has been removed from the legacy layer, and we no longer intend to remove it or it&#039;s subclasses in the near future.&lt;br /&gt;
* JControllerLegacy no longer extends JObject. Controllers should not call any of the methods contained in the JObject class.&lt;br /&gt;
* JControllerLegacy implements an interface for multiple task controllers&lt;br /&gt;
* JControllerLegacy::_construct now requires a compulsory JApplicationCms object. If you were previously getting a Controller object through JControllerLegacy::getInstance you do not need to change your code.&lt;br /&gt;
* JControllerForm now using the StringInflector package to determine the list view. This should improve it&#039;s ability to guess determine the list view of more view names. If extension developers find that their list view is no longer being found they should manually set the `view_list` class property in their controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Session === &amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
The session package has undergone a major refactoring to use the Framework&#039;s Session package.  This change primarily effects the internals of the package; changes to the primary public API through the JSession class are minimal.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes and Interfaces ==== &amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been removed in Joomla! 5.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JSessionExceptionUnsupported&lt;br /&gt;
*JSessionHandlerInterface&lt;br /&gt;
*JSessionHandlerJoomla&lt;br /&gt;
*JSessionHandlerNative&lt;br /&gt;
*JSessionStorage&lt;br /&gt;
*JSessionStorageApc&lt;br /&gt;
*JSessionStorageDatabase&lt;br /&gt;
*JSessionStorageMemcache&lt;br /&gt;
*JSessionStorageMemcached&lt;br /&gt;
*JSessionStorageNone&lt;br /&gt;
*JSessionStorageWincache&lt;br /&gt;
*JSessionStorageXcache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JSession ==== &amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
JSession now extends from the Framework&#039;s Joomla\Session\Session class.  Many of the methods have a modified signature and a compatibility layer exists to help with the transition.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Namespace Parameter Deprecated ===== &amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
The get, set, has, and clear methods previously supported a namespace parameter.  This parameter is now deprecated, the namespace should be prepended to the name before calling these methods.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== JSession::clear() Repurposed ===== &amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
In the Joomla\Session\Session class, the clear method is used to clear all data from the session store.  In JSession, this method is used to remove a single key.  When this method is called with parameters, it will call the new Joomla\Session\Session::remove() method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;===== JSession::getInstance() Deprecated ===== &amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
The singleton getInstance() method has been deprecated.  The session object should be retrieved from the active application or the dependency injection container instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Session Handlers ===== &amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
In Joomla! 3.x and earlier, session handlers were represented by the JSessionStorage class and its subclasses. In Joomla! 4.0, session handlers are now implementations of Joomla\Session\HandlerInterface (which is an extension of PHP&#039;s [https://secure.php.net/manual/en/class.sessionhandlerinterface.php SessionHandlerInterface]. All handlers which were supported in Joomla! 3.x are still available in 4.0 in addition to two additional handlers; a handler natively implementing the APCu extension and a handler supporting Redis.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Classes Removed Without Replacement === &amp;lt;!--T:82--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* JNode&lt;br /&gt;
* JTree&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Utilities ==== &amp;lt;!--T:102--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes and Interfaces ==== &amp;lt;!--T:103--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JArrayHelper&lt;br /&gt;
use Joomla\Utilities\ArrayHelper; instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Libraries == &amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
The following changes have been made to the external libraries that Joomla! packages and ships.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPMailer ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with PHPMailer 6.0.  Please review [https://github.com/PHPMailer/PHPMailer/blob/6.0/UPGRADING.md the upgrading guide] for relevant changes.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPUTF8 ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
At Joomla! 3.4, the PHPUTF8 library lived in two locations in the Joomla! package; `libraries/phputf8` and `libraries/vendor/joomla/string/src/phputf8`.  In Joomla! 4.0, the copy of the library in `libraries/phputf8` has been removed.  The Joomla\String\StringHelper class exposes many of the library&#039;s functions and the Composer autoloader definition imports much of the library as well, however, if you need a feature that is not already included then you should import the required functions from the `libraries/vendor/joomla/string/src/phputf8` path.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SimplePie ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
The SimplePie library is no longer included with Joomla! 4.0.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== jQuery ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with jQuery 3.  Please review [https://jquery.com/upgrade-guide/3.0/ the upgrading guide] for relevant changes. Note that we are not including jQuery Migrate anymore either. We recommend using it locally to help debug your code if there are any issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bootstrap ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with Bootstrap 4.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bootstrap 2.3.2 has been deprecated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Templates == &amp;lt;!--T:90--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
All the Joomla! 3 templates - ISIS and Hathor in the backend, and protostar and Beeze in the frontend are no longer supported. The new 4.0 backend template is called Atum and the frontend template is called Cassiopeia.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a consequence, all extensions must migrate to the new Bootstrap 4 style, away from the current Bootstrap 2.3.2 implementation. For more information about Bootstrap 4: [http://getbootstrap.com/docs/4.0/getting-started/introduction/]. For more information about Bootstrap 2.3.2: [http://getbootstrap.com/2.3.2/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Other == &amp;lt;!--T:95--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Bin === &amp;lt;!--T:96--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the entire Bin directory as it only contained keychain.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Platform]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Update Working Group]]&lt;br /&gt;
[[Category:Joomla! 4.x]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=478570</id>
		<title>Potential backward compatibility issues in Joomla 4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Potential_backward_compatibility_issues_in_Joomla_4&amp;diff=478570"/>
		<updated>2018-02-27T07:19:11Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: JSubmenuHelper removed and alternatives explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&amp;lt;languages /&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{incomplete}}{{RightTOC}}&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
This document tracks potential backward compatibility issues for Joomla! 4. Listed are issues which potentially break extensions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
The base of this comparison is Joomla! 3.7.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Updated System Requirements == &amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
The system requirements have been updated as follows:&lt;br /&gt;
*PHP 7&lt;br /&gt;
*MySQL 5.5.3&lt;br /&gt;
*PostgreSQL 9.2&lt;br /&gt;
*SQL Server support has been dropped.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== PHP MySQL Extension === &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
*Joomla no longer supports using PHP&#039;s ext/mysql driver (which was removed in PHP 7.0). Joomla will automatically try and use the mysqli extension (available since PHP 5.3) or the mysql PDO Driver (available since PHP 5.3) else it will fail to create a database connection.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CMS Libraries == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! CMS libraries (this is primarily code found in the `libraries/cms` directory in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Installer === &amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JInstallerComponent (use JInstallerAdapterComponent instead)&lt;br /&gt;
*JInstallerFile (use JInstallerAdapterFile instead)&lt;br /&gt;
*JInstallerLanguage (use JInstallerAdapterLanguage instead)&lt;br /&gt;
*JInstallerLibrary (use JInstallerAdapterLibrary instead)&lt;br /&gt;
*JInstallerModule (use JInstallerAdapterModule instead)&lt;br /&gt;
*JInstallerPackage (use JInstallerAdapterPackage instead)&lt;br /&gt;
*JInstallerPlugin (use JInstallerAdapterPlugin instead)&lt;br /&gt;
*JInstallerTemplate (use JInstallerAdapterTemplate instead)&lt;br /&gt;
*JSubmenuHelper (replaced by JHtmlSidebar - but sidebar is not showing so far in J4 Alpha builds. Use submenu entries in the manifest instead to link to views of your component)&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JInstallerAdapter Inheritance ==== &amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
JInstallerAdapter no longer extends from JAdapterInstance and inherently JObject.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Menu === &amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JMenu is now an abstract class ==== &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
JMenu is now an abstract class. Subclasses of JMenu must now also implement a load method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
The logic in JMenu::getInstance() to manually include a file from the application&#039;s includes/menu.php path has been removed. The JMenu subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Pathway === &amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt;&lt;br /&gt;
The logic in JPathway::getInstance() to manually include a file from the application&#039;s includes/pathway.php path has been removed. The JPathway subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Router === &amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Manual Include Behavior Removed ==== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
The logic in JRouter::getInstance() to manually include a file from the application&#039;s includes/router.php path has been removed. The JRouter subclass should be autoloaded instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== JVersion === &amp;lt;!--T:26--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
Support for accessing the JVersion class constants as class properties is no longer supported. The constants were introduced in Joomla! 3.5 to prevent the old class properties from being edited.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Platform == &amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
The following changes have been made to Joomla! Platform libraries (this is primarily code found in the `libraries/joomla` or `libraries/legacy` directories in Joomla! 3).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Application === &amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes ==== &amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
The following classes have been removed in Joomla! 4.0:&lt;br /&gt;
*JApplicationWebRouter (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterBase (use the `joomla/router` package instead)&lt;br /&gt;
*JApplicationWebRouterRest (use the `joomla/router` package instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JApplicationBase (use Joomla\Application\AbstractApplication instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== CLI/Web Class Changes ==== &amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
The JApplicationCli and JApplicationWeb classes have been recomposed to extend from the Framework&#039;s Application package instead. This breaks type checks for a JApplicationBase object. For forward compatibility, it is recommended to check if application classes are an instance of Joomla\Application\AbstractApplication (JApplicationBase has extended this class since Joomla! 3.4).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
Additionally, both of these classes are now abstract. Developers implementing these classes must provide a `doExecute` method with their application&#039;s logic.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JApplicationCli =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationCli {{rarr}} Joomla\Application\AbstractCliApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
===== JApplicationWeb =====&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
Old:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} JApplicationBase {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
*&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
New:&amp;lt;/translate&amp;gt; JApplicationWeb {{rarr}} Joomla\Application\AbstractWebApplication {{rarr}} Joomla\Application\AbstractApplication&lt;br /&gt;
&lt;br /&gt;
=== Crypt ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
Removed Classes&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
The following ciphers have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JCryptCipher3Des&lt;br /&gt;
*JCryptCipherBlowfish&lt;br /&gt;
*JCryptCipherMcrypt&lt;br /&gt;
*JCryptCipherRijndael256&lt;br /&gt;
*JCryptCipherSimple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
These have been removed without replacement. Use JCryptCipherCrypto&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Document === &amp;lt;!--T:101--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes ==== &amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
The following classes have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JDocumentError (use \Joomla\Cms\Error\RendererInterface objects instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt;&lt;br /&gt;
The property type of JDocumentFeed::$lastBuildDate has changed from a string to a JDate object. The property was previously unused by the core Joomla API but extensions may have used it.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRendererFeedRss ====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
In order to comply with the RSS feed specification, JDocumentRendererFeedRss now allows the lastBuildDate element to be configured using the JDocumentFeed::$lastBuildDate class property when a feed is rendered.  This value defaults to the current time, as is the case with Joomla! 3.x and earlier, however the time can be correctly set by changing this class property to a JDate object representing the desired timestamp.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:47--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
*JHttpResponse (use Joomla\Http\Response instead)&lt;br /&gt;
*JHttpTransport (implement Joomla\Http\TransportInterface instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;==== Class Changes ==== &amp;lt;!--T:49--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:50--&amp;gt;&lt;br /&gt;
The Framework&#039;s HTTP package is now included in Joomla! 4.0 and JHttp and the JHttpTransport subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttp =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
The JHttp class constructor has been loosened with the following changes:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
*The options parameter is no longer typehinted as a Joomla\Registry\Registry object, an array or any object implementing the [https://secure.php.net/manual/en/class.arrayaccess.php ArrayAccess] interface can be used instead&lt;br /&gt;
*The transport parameter now allows any Joomla\Http\TransportInterface object.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpTransport =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
The now deprecated JHttpTransport interface extends Joomla\Http\TransportInterface now and has caused backward compatibility breaking changes in the interface.  The constructor is no longer part of the interface, and the interface&#039;s `request()` method has had a signature change.  Specifically, the second parameter which previously typehinted the JUri class now typehints Joomla\Uri\UriInterface.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== JHttpResponse =====&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
In refactoring the response object to inherit from the Framework&#039;s HTTP package, which is now using the PSR-7 ResponseInterface API, a minor compatibility break has been made in the structure of the response headers.  As of 4.0, this will now always be a multi-dimensional array where the key is the header name and the value is an array of values for that header (previously, this was a string).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Image === &amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Deprecated Classes and Interfaces ==== &amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:57--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been deprecated and scheduled for removal in Joomla! 5.0:&lt;br /&gt;
* JImageFilter (use Joomla\Image\ImageFilter instead)&lt;br /&gt;
* JImageFilterBackgroundfill (use Joomla\Image\Filter\Backgroundfill instead)&lt;br /&gt;
* JImageFilterBrightness (use Joomla\Image\Filter\Brightness instead)&lt;br /&gt;
* JImageFilterContrast (use Joomla\Image\Filter\Contrast instead)&lt;br /&gt;
* JImageFilterEdgedetect (use Joomla\Image\Filter\Edgedetect instead)&lt;br /&gt;
* JImageFilterEmboss (use Joomla\Image\Filter\Emboss instead)&lt;br /&gt;
* JImageFilterGrayscale (use Joomla\Image\Filter\Grayscale instead)&lt;br /&gt;
* JImageFilterNegate (use Joomla\Image\Filter\Negate instead)&lt;br /&gt;
* JImageFilterSketchy (use Joomla\Image\Filter\Sketchy instead) &lt;br /&gt;
* JImageFilterSmooth (use Joomla\Image\Filter\Smooth instead)&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Class Changes ==== &amp;lt;!--T:58--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
The Framework&#039;s Image package is now included in Joomla! 4.0 and JImage and the JImageFilter subclasses have been refactored to use the upstream package.&amp;lt;/translate&amp;gt;&lt;br /&gt;
=== Keychain ===&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the following class:&lt;br /&gt;
*JKeychain&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Table === &amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:61--&amp;gt;&lt;br /&gt;
* JTable::__construct database object is now typehinted to be a JDatabaseDriver.&lt;br /&gt;
** Subclasses of JTable will need to ensure they are passing a JDatabaseDriver object to the parent constructor&lt;br /&gt;
** Subclasses of JTable will need to change the method signature of setDbo() if they have an extended version of that method to include the typehint&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Mail === &amp;lt;!--T:62--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
The following methods have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
* JMail::sendAdminMail has been removed&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Legacy MVC Layer === &amp;lt;!--T:65--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Legacy Controller ==== &amp;lt;!--T:66--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
* JControllerLegacy has been removed from the legacy layer, and we no longer intend to remove it or it&#039;s subclasses in the near future.&lt;br /&gt;
* JControllerLegacy no longer extends JObject. Controllers should not call any of the methods contained in the JObject class.&lt;br /&gt;
* JControllerLegacy implements an interface for multiple task controllers&lt;br /&gt;
* JControllerLegacy::_construct now requires a compulsory JApplicationCms object. If you were previously getting a Controller object through JControllerLegacy::getInstance you do not need to change your code.&lt;br /&gt;
* JControllerForm now using the StringInflector package to determine the list view. This should improve it&#039;s ability to guess determine the list view of more view names. If extension developers find that their list view is no longer being found they should manually set the `view_list` class property in their controller.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Session === &amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:69--&amp;gt;&lt;br /&gt;
The session package has undergone a major refactoring to use the Framework&#039;s Session package.  This change primarily effects the internals of the package; changes to the primary public API through the JSession class are minimal.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes and Interfaces ==== &amp;lt;!--T:70--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been removed in Joomla! 5.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JSessionExceptionUnsupported&lt;br /&gt;
*JSessionHandlerInterface&lt;br /&gt;
*JSessionHandlerJoomla&lt;br /&gt;
*JSessionHandlerNative&lt;br /&gt;
*JSessionStorage&lt;br /&gt;
*JSessionStorageApc&lt;br /&gt;
*JSessionStorageDatabase&lt;br /&gt;
*JSessionStorageMemcache&lt;br /&gt;
*JSessionStorageMemcached&lt;br /&gt;
*JSessionStorageNone&lt;br /&gt;
*JSessionStorageWincache&lt;br /&gt;
*JSessionStorageXcache&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== JSession ==== &amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
JSession now extends from the Framework&#039;s Joomla\Session\Session class.  Many of the methods have a modified signature and a compatibility layer exists to help with the transition.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Namespace Parameter Deprecated ===== &amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
The get, set, has, and clear methods previously supported a namespace parameter.  This parameter is now deprecated, the namespace should be prepended to the name before calling these methods.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== JSession::clear() Repurposed ===== &amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
In the Joomla\Session\Session class, the clear method is used to clear all data from the session store.  In JSession, this method is used to remove a single key.  When this method is called with parameters, it will call the new Joomla\Session\Session::remove() method.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;===== JSession::getInstance() Deprecated ===== &amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
The singleton getInstance() method has been deprecated.  The session object should be retrieved from the active application or the dependency injection container instead.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
===== Session Handlers ===== &amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
In Joomla! 3.x and earlier, session handlers were represented by the JSessionStorage class and its subclasses. In Joomla! 4.0, session handlers are now implementations of Joomla\Session\HandlerInterface (which is an extension of PHP&#039;s [https://secure.php.net/manual/en/class.sessionhandlerinterface.php SessionHandlerInterface]. All handlers which were supported in Joomla! 3.x are still available in 4.0 in addition to two additional handlers; a handler natively implementing the APCu extension and a handler supporting Redis.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Classes Removed Without Replacement === &amp;lt;!--T:82--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* JNode&lt;br /&gt;
* JTree&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Utilities ==== &amp;lt;!--T:102--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==== Removed Classes and Interfaces ==== &amp;lt;!--T:103--&amp;gt; &lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
The following classes and interfaces have been removed in Joomla! 4.0:&amp;lt;/translate&amp;gt;&lt;br /&gt;
*JArrayHelper&lt;br /&gt;
use Joomla\Utilities\ArrayHelper; instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Libraries == &amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
The following changes have been made to the external libraries that Joomla! packages and ships.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPMailer ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with PHPMailer 6.0.  Please review [https://github.com/PHPMailer/PHPMailer/blob/6.0/UPGRADING.md the upgrading guide] for relevant changes.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHPUTF8 ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
At Joomla! 3.4, the PHPUTF8 library lived in two locations in the Joomla! package; `libraries/phputf8` and `libraries/vendor/joomla/string/src/phputf8`.  In Joomla! 4.0, the copy of the library in `libraries/phputf8` has been removed.  The Joomla\String\StringHelper class exposes many of the library&#039;s functions and the Composer autoloader definition imports much of the library as well, however, if you need a feature that is not already included then you should import the required functions from the `libraries/vendor/joomla/string/src/phputf8` path.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SimplePie ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
The SimplePie library is no longer included with Joomla! 4.0.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== jQuery ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with jQuery 3.  Please review [https://jquery.com/upgrade-guide/3.0/ the upgrading guide] for relevant changes. Note that we are not including jQuery Migrate anymore either. We recommend using it locally to help debug your code if there are any issues.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bootstrap ===&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
Joomla! 4.0 ships with Bootstrap 4.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bootstrap 2.3.2 has been deprecated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Templates == &amp;lt;!--T:90--&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
All the Joomla! 3 templates - ISIS and Hathor in the backend, and protostar and Beeze in the frontend are no longer supported. The new 4.0 backend template is called Atum and the frontend template is called Cassiopeia.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As a consequence, all extensions must migrate to the new Bootstrap 4 style, away from the current Bootstrap 2.3.2 implementation. For more information about Bootstrap 4: [http://getbootstrap.com/docs/4.0/getting-started/introduction/]. For more information about Bootstrap 2.3.2: [http://getbootstrap.com/2.3.2/]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Other == &amp;lt;!--T:95--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Bin === &amp;lt;!--T:96--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
Removing the keychain with 4.0 has resulted in the removal of the entire Bin directory as it only contained keychain.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Platform]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Update Working Group]]&lt;br /&gt;
[[Category:Joomla! 4.x]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113539</id>
		<title>Using JLog</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113539"/>
		<updated>2014-03-07T01:22:34Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: small correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.1|platform=11.1}}{{RightTOC}}&lt;br /&gt;
Using JLog can be very useful in components when analysing the performance of custom extensions - or analysing where extensions are giving issues. Note this should be used in tandem with php exceptions - not as a replacement. See [[Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]] for more information on this&lt;br /&gt;
&lt;br /&gt;
== Calling the class ==&lt;br /&gt;
&lt;br /&gt;
To use JLog you need to call the JLog class. Done through the following code:&lt;br /&gt;
&lt;br /&gt;
    jimport(&#039;joomla.log.log&#039;);&lt;br /&gt;
&lt;br /&gt;
== Basic File Logging ==&lt;br /&gt;
&lt;br /&gt;
Often you may wish to display an error log message and log to an error file. Joomla allows this natively through the [[JLog::add]] function. For example:&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;jerror&#039;);&lt;br /&gt;
&lt;br /&gt;
Adding the category of jerror means that this message will also be displayed to users. To only write to file you can easily drop that parameter and simply use &lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING);&lt;br /&gt;
&lt;br /&gt;
== Logging a specific extension ==&lt;br /&gt;
Sometimes it may be useful to log the errors to a specific file. In this case you can &lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.errors.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets messages of all log levels to be sent to the file&lt;br /&gt;
        JLog::ALL,&lt;br /&gt;
        // The log category/categories which should be recorded in this file&lt;br /&gt;
        // In this case, it&#039;s just the one category from our extension, still&lt;br /&gt;
        // we need to put it inside an array&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Now remember to change the category when you add a log message. Such as in the example below.&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;com_helloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You may wish to combine this with the [[Display error messages and notices]] section to display visable error notifications to users.&lt;br /&gt;
&lt;br /&gt;
== Logging specific priorities ==&lt;br /&gt;
&lt;br /&gt;
You can also add an additional logger to capture only critical and emergency log notifications:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets critical and emergency log level messages to be sent to the file&lt;br /&gt;
        JLog::CRITICAL + JLog::EMERGENCY,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
You can also exclude a specific category from being included. For example, to log all but DEBUG messages:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.all_but_debug.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets all but DEBUG log level messages to be sent to the file&lt;br /&gt;
        JLog::ALL &amp;amp; ~JLog::DEBUG,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Notice how bitwise operations (bitwise AND, &amp;amp;; and bitwise NOT, ~)&lt;br /&gt;
are used to calculate the accepted log levels.&lt;br /&gt;
&lt;br /&gt;
== Formatting the logfile ==&lt;br /&gt;
&lt;br /&gt;
The first parameter to addLogger can have a few optional additional settings&lt;br /&gt;
in addition to the &#039;text_file&#039; entry.&lt;br /&gt;
&lt;br /&gt;
There is for example the entry &#039;&#039;&#039;text_entry_format&#039;&#039;&#039;, specifying the format&lt;br /&gt;
of each line in your logfile.&lt;br /&gt;
&lt;br /&gt;
The default format is&lt;br /&gt;
&lt;br /&gt;
    &#039;{DATETIME} {PRIORITY}      {CATEGORY}      {MESSAGE}&#039;&lt;br /&gt;
&lt;br /&gt;
Here is an example of a different format which shows how to omit the category:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
             // Sets the format of each line&lt;br /&gt;
             &#039;text_entry_format&#039; =&amp;gt; &#039;{DATETIME} {PRIORITY} {MESSAGE}&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets all but DEBUG log level messages to be sent to the file&lt;br /&gt;
        JLog::ALL &amp;amp; ~JLog::DEBUG,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
In addition to the placeholders shown above in the default string, the following&lt;br /&gt;
values are available:&lt;br /&gt;
&lt;br /&gt;
    {CLIENTIP}&lt;br /&gt;
    {TIME}&lt;br /&gt;
    {DATE}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is an additional optional boolean parameter &#039;&#039;&#039;text_file_no_php&#039;&#039;&#039;, which specifies&lt;br /&gt;
whether the log file is prepended with the usual prefix of&lt;br /&gt;
&lt;br /&gt;
    #&lt;br /&gt;
    #&amp;lt;?php die(&#039;Forbidden.&#039;);?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Usually you should not set this setting to false. Log files should not be readable&lt;br /&gt;
from the outside, since they can provide valuable information about your system for attackers.&lt;br /&gt;
Only dabble with this if you know what you&#039;re doing!&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you want to store the log file somewhere else than the logging path configured&lt;br /&gt;
in the Joomla! settings, you can there is the &#039;&#039;&#039;text_file_path&#039;&#039;&#039; setting.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Joomla! 3.0]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113538</id>
		<title>Using JLog</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113538"/>
		<updated>2014-03-07T01:21:03Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: correction of categories parameter; describe all available options with special detail on formatting an entry; describe in more details how to log specific log levels only&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.1|platform=11.1}}{{RightTOC}}&lt;br /&gt;
Using JLog can be very useful in components when analysing the performance of custom extensions - or analysing where extensions are giving issues. Note this should be used in tandem with php exceptions - not as a replacement. See [[Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]] for more information on this&lt;br /&gt;
&lt;br /&gt;
== Calling the class ==&lt;br /&gt;
&lt;br /&gt;
To use JLog you need to call the JLog class. Done through the following code:&lt;br /&gt;
&lt;br /&gt;
    jimport(&#039;joomla.log.log&#039;);&lt;br /&gt;
&lt;br /&gt;
== Basic File Logging ==&lt;br /&gt;
&lt;br /&gt;
Often you may wish to display an error log message and log to an error file. Joomla allows this natively through the [[JLog::add]] function. For example:&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;jerror&#039;);&lt;br /&gt;
&lt;br /&gt;
Adding the category of jerror means that this message will also be displayed to users. To only write to file you can easily drop that parameter and simply use &lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING);&lt;br /&gt;
&lt;br /&gt;
== Logging a specific extension ==&lt;br /&gt;
Sometimes it may be useful to log the errors to a specific file. In this case you can &lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.errors.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets messages of all log levels to be sent to the file&lt;br /&gt;
        JLog::ALL,&lt;br /&gt;
        // The log category/categories which should be recorded in this file&lt;br /&gt;
        // In this case, it&#039;s just the one category from our extension, still&lt;br /&gt;
        // we need to put it inside an array&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Now remember to change the category when you add a log message. Such as in the example below.&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;com_helloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; You may wish to combine this with the [[Display error messages and notices]] section to display visable error notifications to users.&lt;br /&gt;
&lt;br /&gt;
== Logging specific priorities ==&lt;br /&gt;
&lt;br /&gt;
You can also add an additional logger to capture only critical and emergency log notifications:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets critical and emergency log level messages to be sent to the file&lt;br /&gt;
        JLog::CRITICAL + JLog::EMERGENCY,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
You can also exclude a specific category from being included. For example, to log all but DEBUG messages:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.all_but_debug.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets all but DEBUG log level messages to be sent to the file&lt;br /&gt;
        JLog::ALL &amp;amp; ~JLog::DEBUG,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Notice how bitwise operations (bitwise AND, &amp;amp;; and bitwise NOT, ~)&lt;br /&gt;
are used to calculate the accepted log levels.&lt;br /&gt;
&lt;br /&gt;
== Formatting the logfile ==&lt;br /&gt;
&lt;br /&gt;
The first parameter to addLogger can have a few optional additional settings&lt;br /&gt;
in addition to the &#039;text_file&#039; entry.&lt;br /&gt;
&lt;br /&gt;
There is for example the entry &#039;&#039;&#039;text_entry_format&#039;&#039;&#039;, specifying the format&lt;br /&gt;
of each line in your logfile.&lt;br /&gt;
&lt;br /&gt;
The default format is&lt;br /&gt;
&lt;br /&gt;
    &#039;{DATETIME} {PRIORITY}      {CATEGORY}      {MESSAGE}&#039;&lt;br /&gt;
&lt;br /&gt;
Here is an example of a different format which shows how to omit the category:&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             // Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
             // Sets the format of each line&lt;br /&gt;
             &#039;text_entry_format&#039; =&amp;gt; &#039;{DATETIME} {PRIORITY} {MESSAGE}&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets all but DEBUG log level messages to be sent to the file&lt;br /&gt;
        JLog::ALL &amp;amp; ~JLog::DEBUG,&lt;br /&gt;
        // The log category which should be recorded in this file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
In addition to the placeholders shown above in the default string, the following&lt;br /&gt;
values are available:&lt;br /&gt;
&lt;br /&gt;
    {CLIENTIP}&lt;br /&gt;
    {TIME}&lt;br /&gt;
    {DATE}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is an additional optional boolean parameter &#039;&#039;&#039;text_file_no_php&#039;&#039;&#039;, which specifies&lt;br /&gt;
whether the log file is prepended with the usual prefix of&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?php die(\&#039;Forbidden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Usually you should not set this setting to false. Log files should not be readable&lt;br /&gt;
from the outside, since they can provide valuable information about your system for attackers.&lt;br /&gt;
Only dabble with this if you know what you&#039;re doing!&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you want to store the log file somewhere else than the logging path configured&lt;br /&gt;
in the Joomla! settings, you can there is the &#039;&#039;&#039;text_file_path&#039;&#039;&#039; setting.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Joomla! 3.0]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113537</id>
		<title>Using JLog</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=113537"/>
		<updated>2014-03-07T00:27:46Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* Logging a specific extension */ correction for category parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.1|platform=11.1}}{{RightTOC}}&lt;br /&gt;
Using JLog can be very useful in components when analysing the performance of custom extensions - or analysing where extensions are giving issues. Note this should be used in tandem with php exceptions - not as a replacement. See [[Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]] for more information on this&lt;br /&gt;
&lt;br /&gt;
== Calling the class ==&lt;br /&gt;
&lt;br /&gt;
To use JLog you need to call the JLog class. Done through the following code:&lt;br /&gt;
&lt;br /&gt;
    jimport(&#039;joomla.log.log&#039;);&lt;br /&gt;
&lt;br /&gt;
== Basic File Logging ==&lt;br /&gt;
&lt;br /&gt;
Often you may wish to display an error log message and log to an error file. Joomla allows this natively through the [[JLog::add]] function. For example:&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;jerror&#039;);&lt;br /&gt;
&lt;br /&gt;
Adding the category of jerror means that this message will also be displayed to users. To only write to file you can easily drop that parameter and simply use &lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING);&lt;br /&gt;
&lt;br /&gt;
== Logging a specific extension ==&lt;br /&gt;
Sometimes it may be useful to log the errors to a specific file. In this case you can &lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             //Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.errors.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        // Sets messages of all log levels to be sent to the file&lt;br /&gt;
        JLog::ALL,&lt;br /&gt;
        // The names of the log categories which should be sent to the file&lt;br /&gt;
        array(&#039;com_helloworld&#039;)&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Now remember to change the category when you add a log message. Such as in the example below.&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;com_helloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
Note: you may wish to combine this with the [[Display error messages and notices]] section to display visable error notifications to users.&lt;br /&gt;
&lt;br /&gt;
== Logging specific priorities ==&lt;br /&gt;
&lt;br /&gt;
You can also add an additional logger to capture only critical and emergency log notifications.&lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             //Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.critical_emergency.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        //Sets critical and emergency JLog messages to be set to the file&lt;br /&gt;
        JLog::CRITICAL + JLog::EMERGENCY,&lt;br /&gt;
        //Chooses a category name&lt;br /&gt;
        &#039;com_helloworld&#039;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Joomla! 3.0]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=100794</id>
		<title>Using JLog</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_JLog&amp;diff=100794"/>
		<updated>2013-06-22T07:22:17Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* Basic File Logging */ fixes copy&amp;amp;paste error (&amp;#039;jerror&amp;#039; was still a parameter in the function call, while the text above stated that it wasn&amp;#039;t)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.1|platform=11.1}}{{RightTOC}}&lt;br /&gt;
Using JLog can be very useful in components when analysing the performance of custom extensions - or analysing where extensions are giving issues. Note this should be used in tandem with php exceptions - not as a replacement. See [[Exceptions and Logging in Joomla 1.7 and Joomla Platform 11.1]] for more information on this&lt;br /&gt;
&lt;br /&gt;
== Calling the class ==&lt;br /&gt;
&lt;br /&gt;
To use JLog you need to call the JLog class. Done through the following code:&lt;br /&gt;
&lt;br /&gt;
    jimport(&#039;joomla.log.log&#039;);&lt;br /&gt;
&lt;br /&gt;
== Basic File Logging ==&lt;br /&gt;
&lt;br /&gt;
Often you may wish to display an error log message and log to an error file. Joomla allows this natively through the [[JLog::add]] function. For example:&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;jerror&#039;);&lt;br /&gt;
&lt;br /&gt;
Adding the category of jerror means that this message will also be displayed to users. To only write to file you can easily drop that parameter and simply use &lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING);&lt;br /&gt;
&lt;br /&gt;
== Logging a specific extension ==&lt;br /&gt;
Sometimes it may be useful to log the errors to a specific file. In this case you can &lt;br /&gt;
&lt;br /&gt;
    JLog::addLogger(&lt;br /&gt;
        array(&lt;br /&gt;
             //Sets file name&lt;br /&gt;
             &#039;text_file&#039; =&amp;gt; &#039;com_helloworld.errors.php&#039;&lt;br /&gt;
        ),&lt;br /&gt;
        //Sets all JLog messages to be set to the file&lt;br /&gt;
        JLog::ALL,&lt;br /&gt;
        //Chooses a category name&lt;br /&gt;
        &#039;com_helloworld&#039;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
Now remember to change the category when you add a log. Such as in the example below.&lt;br /&gt;
&lt;br /&gt;
    JLog::add(JText::_(&#039;JTEXT_ERROR_MESSAGE&#039;), JLog::WARNING, &#039;com_helloworld&#039;);&lt;br /&gt;
&lt;br /&gt;
Note you may wish to combine this with the [[Display error messages and notices]] section to display visable error notifications to users.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[category:Joomla! 1.7]]&lt;br /&gt;
[[category:Joomla! 2.5]]&lt;br /&gt;
[[category:Joomla! 3.0]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_backend_actions&amp;diff=99919</id>
		<title>Archived talk:Developing a MVC Component/Adding backend actions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_backend_actions&amp;diff=99919"/>
		<updated>2013-06-05T20:00:59Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* Joomla 3.x */ clarification - works, just missed one small thing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It&#039;s not clear to me where the word &amp;quot;helloworld&amp;quot; refers to in these examples.  Can you please clarify when &#039;helloworld&#039; refers to the component,controller,model,table,view or form?  While following this, I&#039;ve changed the name of my component, and when running this I get a &#039;call to member function getTable() on non-object&#039;.  It seems that I used the wrong name somewhere, but I have no idea where.&lt;br /&gt;
&lt;br /&gt;
We&#039;re also introducing JForms and JFields.  These are powerful and important, and warrant some richer explanation.&lt;br /&gt;
&lt;br /&gt;
== Attention! ==&lt;br /&gt;
&lt;br /&gt;
There is a change in /admin/views/helloworlds/tmpl/default_body.php that isnt mentioned on this page but is present in the archive file.&lt;br /&gt;
&lt;br /&gt;
== Model subtlety ==&lt;br /&gt;
&lt;br /&gt;
Note that the model loaded in the getModel function by the HelloWorlds controller (admin/controllers/helloworlds.php) is NOT the HelloWorlds model; it is instead the HelloWorld model. The HelloWorlds model (HelloWorldModelHelloWorlds) extends JModelList, which has no delete function. The HelloWorld model (HelloWorldModelHelloWorld) extends JModelAdmin, which has the delete function needed to delete items.&lt;br /&gt;
&lt;br /&gt;
== Naming confusion ==&lt;br /&gt;
I agree with the first user. helloworld is an abused word in the example. We could call the table greetings, so the models (greetings and greeting) and so on. Without using different and clear name the reader cannot understand the mechanism of the MVC pattern. There is also a lack of documentation, e.g. when we create the form in admin/models/forms/helloworld.xml we should give a link or something to possible values of the fields used.&lt;br /&gt;
: +1 over here. Naming is too confusing: &amp;quot;HelloWorldControllerHelloWorlds and HelloWorldControllerHelloWorld have to be coded.&amp;quot; oh come on, I can&#039;t believe there&#039;s no better example than &amp;quot;HelloWorld&amp;quot;&amp;lt;/br&amp;gt;admin/controllers/&#039;&#039;&#039;helloworld&#039;&#039;&#039;s.php and &amp;lt;/br&amp;gt;admin/controllers/&#039;&#039;&#039;helloworld&#039;&#039;&#039;.php files... That&#039;s just too much for me!&amp;lt;/br&amp;gt; [[User:Jpfreire|João Paulo Freire]] 17:54, 11 April 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Joomla 2.5 ==&lt;br /&gt;
The counting of the checkboxes are not working any more in Joomla 2.5. Does someone have a solution to this?&lt;br /&gt;
&lt;br /&gt;
Try...&lt;br /&gt;
  &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;checkall-toggle&amp;quot; value=&amp;quot;&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;JGLOBAL_CHECK_ALL&#039;); ?&amp;gt;&amp;quot; onclick=&amp;quot;Joomla.checkAll(this)&amp;quot; /&amp;gt;&lt;br /&gt;
... in the appropriate template. [[User:Cwinebrinner|Cwinebrinner]] ([[User talk:Cwinebrinner|talk]]) 22:23, 31 March 2013 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Joomla 3.x ==&lt;br /&gt;
Anybody know what changes are required to this for Joomla 3.x? I&#039;ve followed the tutorial and it seems to be working fine under Joomla 2.5, however under Joomla 3.1, the &amp;quot;Save and Close&amp;quot; and &amp;quot;Cancel&amp;quot;/&amp;quot;Close&amp;quot; Button on the details form just do nothing (clicking on them only gives a Javascript error: &amp;quot;TypeError: b is null&amp;quot;; and the form looks weird (there is still a bulletin point for all the list elements).&lt;br /&gt;
[[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 17:28, 3 June 2013 (CDT)&lt;br /&gt;
&lt;br /&gt;
:Hi&lt;br /&gt;
:This sounds like a bug of some kind - I&#039;d check you don&#039;t have php errors on the page! The button itself should be called exactly the same way in 3.x as in 2.5!!&lt;br /&gt;
:Kind Regards,&lt;br /&gt;
:George --[[User:Wilsonge|Wilsonge]] ([[User talk:Wilsonge|talk]]) 19:34, 4 June 2013 (CDT)&lt;br /&gt;
&lt;br /&gt;
::Thanks for the quick answer! Turns out I had missed one small detail: The form has to have name &#039;&#039;&#039;and id&#039;&#039;&#039; of adminForm. Somehow I had used a different ID, and under Joomla 2.5 it still had worked, but not on J3.&lt;br /&gt;
::With that id set correctly, it works as well on J3! Weirdest thing is, I checked in com_banners component, and that doesn&#039;t seem to use the adminForm id as well, but it still works there... no idea how they do it, but I don&#039;t care now as long as it works for me ;).&lt;br /&gt;
:: Thanks and so long,&lt;br /&gt;
:: [[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 15:00, 5 June 2013 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_backend_actions&amp;diff=99849</id>
		<title>Archived talk:Developing a MVC Component/Adding backend actions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived_talk:Developing_a_MVC_Component/Adding_backend_actions&amp;diff=99849"/>
		<updated>2013-06-03T22:28:38Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: Joomla 3 changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It&#039;s not clear to me where the word &amp;quot;helloworld&amp;quot; refers to in these examples.  Can you please clarify when &#039;helloworld&#039; refers to the component,controller,model,table,view or form?  While following this, I&#039;ve changed the name of my component, and when running this I get a &#039;call to member function getTable() on non-object&#039;.  It seems that I used the wrong name somewhere, but I have no idea where.&lt;br /&gt;
&lt;br /&gt;
We&#039;re also introducing JForms and JFields.  These are powerful and important, and warrant some richer explanation.&lt;br /&gt;
&lt;br /&gt;
== Attention! ==&lt;br /&gt;
&lt;br /&gt;
There is a change in /admin/views/helloworlds/tmpl/default_body.php that isnt mentioned on this page but is present in the archive file.&lt;br /&gt;
&lt;br /&gt;
== Model subtlety ==&lt;br /&gt;
&lt;br /&gt;
Note that the model loaded in the getModel function by the HelloWorlds controller (admin/controllers/helloworlds.php) is NOT the HelloWorlds model; it is instead the HelloWorld model. The HelloWorlds model (HelloWorldModelHelloWorlds) extends JModelList, which has no delete function. The HelloWorld model (HelloWorldModelHelloWorld) extends JModelAdmin, which has the delete function needed to delete items.&lt;br /&gt;
&lt;br /&gt;
== Naming confusion ==&lt;br /&gt;
I agree with the first user. helloworld is an abused word in the example. We could call the table greetings, so the models (greetings and greeting) and so on. Without using different and clear name the reader cannot understand the mechanism of the MVC pattern. There is also a lack of documentation, e.g. when we create the form in admin/models/forms/helloworld.xml we should give a link or something to possible values of the fields used.&lt;br /&gt;
: +1 over here. Naming is too confusing: &amp;quot;HelloWorldControllerHelloWorlds and HelloWorldControllerHelloWorld have to be coded.&amp;quot; oh come on, I can&#039;t believe there&#039;s no better example than &amp;quot;HelloWorld&amp;quot;&amp;lt;/br&amp;gt;admin/controllers/&#039;&#039;&#039;helloworld&#039;&#039;&#039;s.php and &amp;lt;/br&amp;gt;admin/controllers/&#039;&#039;&#039;helloworld&#039;&#039;&#039;.php files... That&#039;s just too much for me!&amp;lt;/br&amp;gt; [[User:Jpfreire|João Paulo Freire]] 17:54, 11 April 2012 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Joomla 2.5 ==&lt;br /&gt;
The counting of the checkboxes are not working any more in Joomla 2.5. Does someone have a solution to this?&lt;br /&gt;
&lt;br /&gt;
Try...&lt;br /&gt;
  &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;checkall-toggle&amp;quot; value=&amp;quot;&amp;quot; title=&amp;quot;&amp;lt;?php echo JText::_(&#039;JGLOBAL_CHECK_ALL&#039;); ?&amp;gt;&amp;quot; onclick=&amp;quot;Joomla.checkAll(this)&amp;quot; /&amp;gt;&lt;br /&gt;
... in the appropriate template. [[User:Cwinebrinner|Cwinebrinner]] ([[User talk:Cwinebrinner|talk]]) 22:23, 31 March 2013 (CDT)&lt;br /&gt;
&lt;br /&gt;
== Joomla 3.x ==&lt;br /&gt;
Anybody know what changes are required to this for Joomla 3.x? I&#039;ve followed the tutorial and it seems to be working fine under Joomla 2.5, however under Joomla 3.1, the &amp;quot;Save and Close&amp;quot; and &amp;quot;Cancel&amp;quot;/&amp;quot;Close&amp;quot; Button on the details form just do nothing (clicking on them only gives a Javascript error: &amp;quot;TypeError: b is null&amp;quot;; and the form looks weird (there is still a bulletin point for all the list elements).&lt;br /&gt;
[[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 17:28, 3 June 2013 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99848</id>
		<title>Adding sortable columns to a table in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99848"/>
		<updated>2013-06-03T20:18:19Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* Step 1: The Model */ Joomla 3 compabitibility: escape(...) instead of getEscaped(...)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.x}}&lt;br /&gt;
Given that you have a table of data already in your component, how do you make some, or all, of the table columns sortable, like many of them are in the Joomla Administrator?  It&#039;s not particularly hard to do, but there are several steps required and details you need to be aware of so everything fits together properly.  There are variations on the procedure given here and once you are confident that you understand how it all works you should feel free to explore other possibilities that may suit your purposes better.&lt;br /&gt;
&lt;br /&gt;
This procedure assumes that your component is structured according to the [[Model-View-Controller]] (MVC) design pattern. The general idea behind the procedure will still be applicable to non-MVC components if you apply a bit of imagination!&lt;br /&gt;
&lt;br /&gt;
==Step 1: The Model==&lt;br /&gt;
&lt;br /&gt;
The first thing you need to do is to populate the order state of your model. Change &#039;default_column_name&#039; to the name of the column you want to use as the default sort, and change the second parameter to DESC if you wish the default order direction to be descending. Calling the parents populateState method will make sure that the State object is filled and accessible to all of the code that might need it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function populateState($ordering = null, $direction = null) {&lt;br /&gt;
	parent::populateState(&#039;default_column_name&#039;, &#039;ASC&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JModelList::populateState only allows predefined values for the ordering. Therefore you&#039;ll have to add the names of all columns by which your data can be sorted to the &#039;filter_fields&#039; config, like this:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
	public function __construct($config = array())&lt;br /&gt;
	{   &lt;br /&gt;
		$config[&#039;filter_fields&#039;] = array(&lt;br /&gt;
			&#039;column_name_1&#039;,&lt;br /&gt;
			&#039;column_name_2&#039;,&lt;br /&gt;
			// ...&lt;br /&gt;
			&#039;column_name_3&#039;&lt;br /&gt;
		);&lt;br /&gt;
		parent::__construct($config);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
If you use column prefixes in your query you can also specify them along with the column name (e.g. &#039;b.id&#039;).&lt;br /&gt;
&lt;br /&gt;
In the model which generates the data that will form the table, you need to make a change to the method which builds the database query that will be used to populate the HTML table. Most often this is the [[JModelList::getListQuery|getListQuery()]] method, but might not be.&lt;br /&gt;
&lt;br /&gt;
The model could pull data in from anywhere; it doesn&#039;t have to be a database, but in the vast majority of cases the model will be using the Joomla database API to submit SQL queries to a database. Assuming that to be the case, you need to adjust the query so that the sort parameters are taken into account.&lt;br /&gt;
&lt;br /&gt;
This information gets called by whatever function builds the ORDER BY clause, typically a private function like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getListQuery() {&lt;br /&gt;
	$db = JFactory::getDbo();&lt;br /&gt;
	$query = $db-&amp;gt;getQuery(true);&lt;br /&gt;
	&lt;br /&gt;
	// ...&lt;br /&gt;
	&lt;br /&gt;
	$query-&amp;gt;order($db-&amp;gt;escape($this-&amp;gt;getState(&#039;list.ordering&#039;, &#039;default_sort_column&#039;)).&#039; &#039;.&lt;br /&gt;
		$db-&amp;gt;escape($this-&amp;gt;getState(&#039;list.direction&#039;, &#039;ASC&#039;)));&lt;br /&gt;
	&lt;br /&gt;
	return $query;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;default_sort_column&#039; with the column you want to sort by by default.  You can also change &#039;ASC&#039; to &#039;DESC&#039;, depending on which way you want to sort by default.&lt;br /&gt;
&lt;br /&gt;
==Step 2: The View==&lt;br /&gt;
Having generated the sorting variables in the model, you need to assign them to the view so that they show up on the page when it is displayed.&lt;br /&gt;
&lt;br /&gt;
To do this you need to add a few lines of code to your view file, typically view.html.php with code similar to this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function display($tpl=null) {&lt;br /&gt;
	$items = $this-&amp;gt;get(&#039;Items&#039;);&lt;br /&gt;
	$state = $this-&amp;gt;get(&#039;State&#039;);&lt;br /&gt;
	&lt;br /&gt;
	$this-&amp;gt;sortDirection = $state-&amp;gt;get(&#039;list.direction&#039;);&lt;br /&gt;
	$this-&amp;gt;sortColumn = $state-&amp;gt;get(&#039;list.ordering&#039;);&lt;br /&gt;
	&lt;br /&gt;
	parent::display($tpl);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3: The Template==&lt;br /&gt;
Now you need to add some elements to the component layout file.  The table must be included in a form.  This might already be the case as, for example, you might already have implemented pagination or filtering on the table.  But if the table is not yet in a form then now is the time to wrap it in &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags.  The reason that a form is required is that the sortable columns rely on a bit of JavaScript that will submit the form with sort parameters added.  Naturally, this will involve a page load, so if you would prefer an [[AJAX]]-based solution, then this procedure is not for you.&lt;br /&gt;
&lt;br /&gt;
The form tags will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the form name must be &amp;quot;adminForm&amp;quot;. In some special cases you might need to add the action attribute (e.g. action=&amp;quot;&amp;lt;?php echo JRoute::_( &#039;index.php&#039; );?&amp;gt;&amp;quot;), but usually this should not be required, when it&#039;s not there the form will just be submitted to the current documents address, i.e. the same page, which is usually the correct behavior.&lt;br /&gt;
&lt;br /&gt;
You also need to add a couple of hidden fields to the form. They can be placed anywhere between the &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags, but generally they are placed just before the closing tag, like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortColumn; ?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order_Dir&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortDirection; ?&amp;gt;&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;
Now look at the table itself. You might have a table with static headings already, looking vaguely like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You need to replace the static column names with calls to the Joomla [[JHTML]] static class, so that your code will look something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Name&#039;, &#039;DbNameColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Description&#039;, &#039;DbDescriptionColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You will definitely need to adapt this code to your specific requirements. The arguments to the [[JHTML]] call are as follows:&lt;br /&gt;
# Must be &#039;grid.sort&#039; so that [[JHTML]] will insert the correct behaviour for a sortable column.&lt;br /&gt;
# This is the name of the column that your visitors will actually see. You need to change this for your particular table columns.&lt;br /&gt;
# This is the name of the corresponding database field (column) that is to be sorted on.  This will be passed to the model, most likely so it can be added to an &amp;quot;ORDER BY&amp;quot; clause in the SQL query statement (whatever is here needs to match one of the column names specified in the whitelist, including any possible prefixes).&lt;br /&gt;
# Must be exactly as shown here. It is the current order direction (ascending or descending) and comes from the view (see later).&lt;br /&gt;
# Must be exactly as shown here. It is the name of the column that the table is currently sorted on and comes from the view (see later).&lt;br /&gt;
&lt;br /&gt;
In short, you need to amend the second and third arguments to each [[JHTML]] call appropriately.&lt;br /&gt;
&lt;br /&gt;
Finally, if your sortable table is going to be in the front-end of your site, then you need to add a little snippet of JavaScript to the layout.  Alternatively, you can add it to the view code (using [[JDocument/addScriptDeclaration|JDocument-&amp;gt;addScriptDeclaration]]) if you would rather keep your JavaScript code in the HTML &amp;lt;head&amp;gt; section.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function tableOrdering( order, dir, task )&lt;br /&gt;
{&lt;br /&gt;
	var form = document.adminForm;&lt;br /&gt;
&lt;br /&gt;
	form.filter_order.value = order;&lt;br /&gt;
	form.filter_order_Dir.value = dir;&lt;br /&gt;
	document.adminForm.submit( task );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You don&#039;t need to add this code if your sortable table is in the Administrator as this code is loaded for you automatically anyway.&lt;br /&gt;
&lt;br /&gt;
This completes the changes you need to make to the layout. [[JHTML]] [[JHTMLGrid|grid.sort]] will now add a call to the &#039;&#039;tableOrdering&#039;&#039; function so that &#039;&#039;tableOrdering&#039;&#039; will be called whenever the user clicks on the column header.  &#039;&#039;tableOrdering&#039;&#039; puts the name of the column that was clicked, and the sort direction, into the hidden form fields and submits the form; the changed values will get picked up by the populateState method, and then retrieved by your model via the list.ordering/list.dirc.&lt;br /&gt;
&lt;br /&gt;
==Step 4: Styling the result==&lt;br /&gt;
Finally. you might want to apply a bit of CSS styling to make the output a bit more attractive.&lt;br /&gt;
&lt;br /&gt;
Selecting the sortable columns can only be done via their context, so you will probably need to add a CSS class to the &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;, the &amp;lt;nowiki&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;/nowiki&amp;gt; or to the &amp;lt;nowiki&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/nowiki&amp;gt; tags.  This is what the output might look like with a class added to the &amp;lt;tr&amp;gt; tag:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;sortable&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbName&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Training provider&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbDescription&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Location&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To add a bit of space between the column name and the ascending/descending indicator image (a common requirement), you could then apply CSS like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
tr.sortable th img {&lt;br /&gt;
	margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Developing a Model-View-Controller Component]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99825</id>
		<title>Talk:Adding sortable columns to a table in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99825"/>
		<updated>2013-06-02T15:42:03Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: Removes redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since this page now is applying for 2.5, I removed the discussion page redirect which was referring to the 1.5 discussion page.&lt;br /&gt;
Here is the link to that old discussion page: [[J1.5 talk:Adding sortable columns to a table in a component]]&lt;br /&gt;
[[User:Munchkin|Munchkin]] ([[User talk:Munchkin|talk]]) 10:42, 2 June 2013 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99824</id>
		<title>Adding sortable columns to a table in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99824"/>
		<updated>2013-06-02T15:39:51Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: Adds again the removed version hint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.x}}&lt;br /&gt;
Given that you have a table of data already in your component, how do you make some, or all, of the table columns sortable, like many of them are in the Joomla Administrator?  It&#039;s not particularly hard to do, but there are several steps required and details you need to be aware of so everything fits together properly.  There are variations on the procedure given here and once you are confident that you understand how it all works you should feel free to explore other possibilities that may suit your purposes better.&lt;br /&gt;
&lt;br /&gt;
This procedure assumes that your component is structured according to the [[Model-View-Controller]] (MVC) design pattern. The general idea behind the procedure will still be applicable to non-MVC components if you apply a bit of imagination!&lt;br /&gt;
&lt;br /&gt;
==Step 1: The Model==&lt;br /&gt;
&lt;br /&gt;
The first thing you need to do is to populate the order state of your model. Change &#039;default_column_name&#039; to the name of the column you want to use as the default sort, and change the second parameter to DESC if you wish the default order direction to be descending. Calling the parents populateState method will make sure that the State object is filled and accessible to all of the code that might need it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function populateState($ordering = null, $direction = null) {&lt;br /&gt;
	parent::populateState(&#039;default_column_name&#039;, &#039;ASC&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JModelList::populateState only allows predefined values for the ordering. Therefore you&#039;ll have to add the names of all columns by which your data can be sorted to the &#039;filter_fields&#039; config, like this:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
	public function __construct($config = array())&lt;br /&gt;
	{   &lt;br /&gt;
		$config[&#039;filter_fields&#039;] = array(&lt;br /&gt;
			&#039;column_name_1&#039;,&lt;br /&gt;
			&#039;column_name_2&#039;,&lt;br /&gt;
			// ...&lt;br /&gt;
			&#039;column_name_3&#039;&lt;br /&gt;
		);&lt;br /&gt;
		parent::__construct($config);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
If you use column prefixes in your query you can also specify them along with the column name (e.g. &#039;b.id&#039;).&lt;br /&gt;
&lt;br /&gt;
In the model which generates the data that will form the table, you need to make a change to the method which builds the database query that will be used to populate the HTML table. Most often this is the [[JModelList::getListQuery|getListQuery()]] method, but might not be.&lt;br /&gt;
&lt;br /&gt;
The model could pull data in from anywhere; it doesn&#039;t have to be a database, but in the vast majority of cases the model will be using the Joomla database API to submit SQL queries to a database. Assuming that to be the case, you need to adjust the query so that the sort parameters are taken into account.&lt;br /&gt;
&lt;br /&gt;
This information gets called by whatever function builds the ORDER BY clause, typically a private function like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getListQuery() {&lt;br /&gt;
	$db = JFactory::getDbo();&lt;br /&gt;
	$query = $db-&amp;gt;getQuery(true);&lt;br /&gt;
	&lt;br /&gt;
	// ...&lt;br /&gt;
	&lt;br /&gt;
	$query-&amp;gt;order($db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.ordering&#039;, &#039;default_sort_column&#039;)).&#039; &#039;.&lt;br /&gt;
		$db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.direction&#039;, &#039;ASC&#039;)));&lt;br /&gt;
	&lt;br /&gt;
	return $query;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;default_sort_column&#039; with the column you want to sort by by default.  You can also change &#039;ASC&#039; to &#039;DESC&#039;, depending on which way you want to sort by default.&lt;br /&gt;
&lt;br /&gt;
==Step 2: The View==&lt;br /&gt;
Having generated the sorting variables in the model, you need to assign them to the view so that they show up on the page when it is displayed.&lt;br /&gt;
&lt;br /&gt;
To do this you need to add a few lines of code to your view file, typically view.html.php with code similar to this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function display($tpl=null) {&lt;br /&gt;
	$items = $this-&amp;gt;get(&#039;Items&#039;);&lt;br /&gt;
	$state = $this-&amp;gt;get(&#039;State&#039;);&lt;br /&gt;
	&lt;br /&gt;
	$this-&amp;gt;sortDirection = $state-&amp;gt;get(&#039;list.direction&#039;);&lt;br /&gt;
	$this-&amp;gt;sortColumn = $state-&amp;gt;get(&#039;list.ordering&#039;);&lt;br /&gt;
	&lt;br /&gt;
	parent::display($tpl);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3: The Template==&lt;br /&gt;
Now you need to add some elements to the component layout file.  The table must be included in a form.  This might already be the case as, for example, you might already have implemented pagination or filtering on the table.  But if the table is not yet in a form then now is the time to wrap it in &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags.  The reason that a form is required is that the sortable columns rely on a bit of JavaScript that will submit the form with sort parameters added.  Naturally, this will involve a page load, so if you would prefer an [[AJAX]]-based solution, then this procedure is not for you.&lt;br /&gt;
&lt;br /&gt;
The form tags will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the form name must be &amp;quot;adminForm&amp;quot;. In some special cases you might need to add the action attribute (e.g. action=&amp;quot;&amp;lt;?php echo JRoute::_( &#039;index.php&#039; );?&amp;gt;&amp;quot;), but usually this should not be required, when it&#039;s not there the form will just be submitted to the current documents address, i.e. the same page, which is usually the correct behavior.&lt;br /&gt;
&lt;br /&gt;
You also need to add a couple of hidden fields to the form. They can be placed anywhere between the &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags, but generally they are placed just before the closing tag, like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortColumn; ?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order_Dir&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortDirection; ?&amp;gt;&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;
Now look at the table itself. You might have a table with static headings already, looking vaguely like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You need to replace the static column names with calls to the Joomla [[JHTML]] static class, so that your code will look something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Name&#039;, &#039;DbNameColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Description&#039;, &#039;DbDescriptionColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You will definitely need to adapt this code to your specific requirements. The arguments to the [[JHTML]] call are as follows:&lt;br /&gt;
# Must be &#039;grid.sort&#039; so that [[JHTML]] will insert the correct behaviour for a sortable column.&lt;br /&gt;
# This is the name of the column that your visitors will actually see. You need to change this for your particular table columns.&lt;br /&gt;
# This is the name of the corresponding database field (column) that is to be sorted on.  This will be passed to the model, most likely so it can be added to an &amp;quot;ORDER BY&amp;quot; clause in the SQL query statement (whatever is here needs to match one of the column names specified in the whitelist, including any possible prefixes).&lt;br /&gt;
# Must be exactly as shown here. It is the current order direction (ascending or descending) and comes from the view (see later).&lt;br /&gt;
# Must be exactly as shown here. It is the name of the column that the table is currently sorted on and comes from the view (see later).&lt;br /&gt;
&lt;br /&gt;
In short, you need to amend the second and third arguments to each [[JHTML]] call appropriately.&lt;br /&gt;
&lt;br /&gt;
Finally, if your sortable table is going to be in the front-end of your site, then you need to add a little snippet of JavaScript to the layout.  Alternatively, you can add it to the view code (using [[JDocument/addScriptDeclaration|JDocument-&amp;gt;addScriptDeclaration]]) if you would rather keep your JavaScript code in the HTML &amp;lt;head&amp;gt; section.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function tableOrdering( order, dir, task )&lt;br /&gt;
{&lt;br /&gt;
	var form = document.adminForm;&lt;br /&gt;
&lt;br /&gt;
	form.filter_order.value = order;&lt;br /&gt;
	form.filter_order_Dir.value = dir;&lt;br /&gt;
	document.adminForm.submit( task );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You don&#039;t need to add this code if your sortable table is in the Administrator as this code is loaded for you automatically anyway.&lt;br /&gt;
&lt;br /&gt;
This completes the changes you need to make to the layout. [[JHTML]] [[JHTMLGrid|grid.sort]] will now add a call to the &#039;&#039;tableOrdering&#039;&#039; function so that &#039;&#039;tableOrdering&#039;&#039; will be called whenever the user clicks on the column header.  &#039;&#039;tableOrdering&#039;&#039; puts the name of the column that was clicked, and the sort direction, into the hidden form fields and submits the form; the changed values will get picked up by the populateState method, and then retrieved by your model via the list.ordering/list.dirc.&lt;br /&gt;
&lt;br /&gt;
==Step 4: Styling the result==&lt;br /&gt;
Finally. you might want to apply a bit of CSS styling to make the output a bit more attractive.&lt;br /&gt;
&lt;br /&gt;
Selecting the sortable columns can only be done via their context, so you will probably need to add a CSS class to the &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;, the &amp;lt;nowiki&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;/nowiki&amp;gt; or to the &amp;lt;nowiki&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/nowiki&amp;gt; tags.  This is what the output might look like with a class added to the &amp;lt;tr&amp;gt; tag:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;sortable&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbName&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Training provider&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbDescription&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Location&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To add a bit of space between the column name and the ascending/descending indicator image (a common requirement), you could then apply CSS like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
tr.sortable th img {&lt;br /&gt;
	margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Developing a Model-View-Controller Component]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99823</id>
		<title>Adding sortable columns to a table in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99823"/>
		<updated>2013-06-02T15:29:45Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: adds missing filter_fields configuration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Given that you have a table of data already in your component, how do you make some, or all, of the table columns sortable, like many of them are in the Joomla Administrator?  It&#039;s not particularly hard to do, but there are several steps required and details you need to be aware of so everything fits together properly.  There are variations on the procedure given here and once you are confident that you understand how it all works you should feel free to explore other possibilities that may suit your purposes better.&lt;br /&gt;
&lt;br /&gt;
This procedure assumes that your component is structured according to the [[Model-View-Controller]] (MVC) design pattern. The general idea behind the procedure will still be applicable to non-MVC components if you apply a bit of imagination!&lt;br /&gt;
&lt;br /&gt;
==Step 1: The Model==&lt;br /&gt;
&lt;br /&gt;
The first thing you need to do is to populate the order state of your model. Change &#039;default_column_name&#039; to the name of the column you want to use as the default sort, and change the second parameter to DESC if you wish the default order direction to be descending. Calling the parents populateState method will make sure that the State object is filled and accessible to all of the code that might need it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function populateState($ordering = null, $direction = null) {&lt;br /&gt;
	parent::populateState(&#039;default_column_name&#039;, &#039;ASC&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The JModelList::populateState only allows predefined values for the ordering. Therefore you&#039;ll have to add the names of all columns by which your data can be sorted to the &#039;filter_fields&#039; config, like this:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
	public function __construct($config = array())&lt;br /&gt;
	{   &lt;br /&gt;
		$config[&#039;filter_fields&#039;] = array(&lt;br /&gt;
			&#039;column_name_1&#039;,&lt;br /&gt;
			&#039;column_name_2&#039;,&lt;br /&gt;
			// ...&lt;br /&gt;
			&#039;column_name_3&#039;&lt;br /&gt;
		);&lt;br /&gt;
		parent::__construct($config);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
If you use column prefixes in your query you can also specify them along with the column name (e.g. &#039;b.id&#039;).&lt;br /&gt;
&lt;br /&gt;
In the model which generates the data that will form the table, you need to make a change to the method which builds the database query that will be used to populate the HTML table. Most often this is the [[JModelList::getListQuery|getListQuery()]] method, but might not be.&lt;br /&gt;
&lt;br /&gt;
The model could pull data in from anywhere; it doesn&#039;t have to be a database, but in the vast majority of cases the model will be using the Joomla database API to submit SQL queries to a database. Assuming that to be the case, you need to adjust the query so that the sort parameters are taken into account.&lt;br /&gt;
&lt;br /&gt;
This information gets called by whatever function builds the ORDER BY clause, typically a private function like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getListQuery() {&lt;br /&gt;
	$db = JFactory::getDbo();&lt;br /&gt;
	$query = $db-&amp;gt;getQuery(true);&lt;br /&gt;
	&lt;br /&gt;
	// ...&lt;br /&gt;
	&lt;br /&gt;
	$query-&amp;gt;order($db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.ordering&#039;, &#039;default_sort_column&#039;)).&#039; &#039;.&lt;br /&gt;
		$db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.direction&#039;, &#039;ASC&#039;)));&lt;br /&gt;
	&lt;br /&gt;
	return $query;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;default_sort_column&#039; with the column you want to sort by by default.  You can also change &#039;ASC&#039; to &#039;DESC&#039;, depending on which way you want to sort by default.&lt;br /&gt;
&lt;br /&gt;
==Step 2: The View==&lt;br /&gt;
Having generated the sorting variables in the model, you need to assign them to the view so that they show up on the page when it is displayed.&lt;br /&gt;
&lt;br /&gt;
To do this you need to add a few lines of code to your view file, typically view.html.php with code similar to this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function display($tpl=null) {&lt;br /&gt;
	$items = $this-&amp;gt;get(&#039;Items&#039;);&lt;br /&gt;
	$state = $this-&amp;gt;get(&#039;State&#039;);&lt;br /&gt;
	&lt;br /&gt;
	$this-&amp;gt;sortDirection = $state-&amp;gt;get(&#039;list.direction&#039;);&lt;br /&gt;
	$this-&amp;gt;sortColumn = $state-&amp;gt;get(&#039;list.ordering&#039;);&lt;br /&gt;
	&lt;br /&gt;
	parent::display($tpl);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3: The Template==&lt;br /&gt;
Now you need to add some elements to the component layout file.  The table must be included in a form.  This might already be the case as, for example, you might already have implemented pagination or filtering on the table.  But if the table is not yet in a form then now is the time to wrap it in &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags.  The reason that a form is required is that the sortable columns rely on a bit of JavaScript that will submit the form with sort parameters added.  Naturally, this will involve a page load, so if you would prefer an [[AJAX]]-based solution, then this procedure is not for you.&lt;br /&gt;
&lt;br /&gt;
The form tags will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the form name must be &amp;quot;adminForm&amp;quot;. In some special cases you might need to add the action attribute (e.g. action=&amp;quot;&amp;lt;?php echo JRoute::_( &#039;index.php&#039; );?&amp;gt;&amp;quot;), but usually this should not be required, when it&#039;s not there the form will just be submitted to the current documents address, i.e. the same page, which is usually the correct behavior.&lt;br /&gt;
&lt;br /&gt;
You also need to add a couple of hidden fields to the form. They can be placed anywhere between the &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags, but generally they are placed just before the closing tag, like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortColumn; ?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order_Dir&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortDirection; ?&amp;gt;&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;
Now look at the table itself. You might have a table with static headings already, looking vaguely like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You need to replace the static column names with calls to the Joomla [[JHTML]] static class, so that your code will look something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Name&#039;, &#039;DbNameColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Description&#039;, &#039;DbDescriptionColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You will definitely need to adapt this code to your specific requirements. The arguments to the [[JHTML]] call are as follows:&lt;br /&gt;
# Must be &#039;grid.sort&#039; so that [[JHTML]] will insert the correct behaviour for a sortable column.&lt;br /&gt;
# This is the name of the column that your visitors will actually see. You need to change this for your particular table columns.&lt;br /&gt;
# This is the name of the corresponding database field (column) that is to be sorted on.  This will be passed to the model, most likely so it can be added to an &amp;quot;ORDER BY&amp;quot; clause in the SQL query statement (whatever is here needs to match one of the column names specified in the whitelist, including any possible prefixes).&lt;br /&gt;
# Must be exactly as shown here. It is the current order direction (ascending or descending) and comes from the view (see later).&lt;br /&gt;
# Must be exactly as shown here. It is the name of the column that the table is currently sorted on and comes from the view (see later).&lt;br /&gt;
&lt;br /&gt;
In short, you need to amend the second and third arguments to each [[JHTML]] call appropriately.&lt;br /&gt;
&lt;br /&gt;
Finally, if your sortable table is going to be in the front-end of your site, then you need to add a little snippet of JavaScript to the layout.  Alternatively, you can add it to the view code (using [[JDocument/addScriptDeclaration|JDocument-&amp;gt;addScriptDeclaration]]) if you would rather keep your JavaScript code in the HTML &amp;lt;head&amp;gt; section.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function tableOrdering( order, dir, task )&lt;br /&gt;
{&lt;br /&gt;
	var form = document.adminForm;&lt;br /&gt;
&lt;br /&gt;
	form.filter_order.value = order;&lt;br /&gt;
	form.filter_order_Dir.value = dir;&lt;br /&gt;
	document.adminForm.submit( task );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You don&#039;t need to add this code if your sortable table is in the Administrator as this code is loaded for you automatically anyway.&lt;br /&gt;
&lt;br /&gt;
This completes the changes you need to make to the layout. [[JHTML]] [[JHTMLGrid|grid.sort]] will now add a call to the &#039;&#039;tableOrdering&#039;&#039; function so that &#039;&#039;tableOrdering&#039;&#039; will be called whenever the user clicks on the column header.  &#039;&#039;tableOrdering&#039;&#039; puts the name of the column that was clicked, and the sort direction, into the hidden form fields and submits the form; the changed values will get picked up by the populateState method, and then retrieved by your model via the list.ordering/list.dirc.&lt;br /&gt;
&lt;br /&gt;
==Step 4: Styling the result==&lt;br /&gt;
Finally. you might want to apply a bit of CSS styling to make the output a bit more attractive.&lt;br /&gt;
&lt;br /&gt;
Selecting the sortable columns can only be done via their context, so you will probably need to add a CSS class to the &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;, the &amp;lt;nowiki&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;/nowiki&amp;gt; or to the &amp;lt;nowiki&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/nowiki&amp;gt; tags.  This is what the output might look like with a class added to the &amp;lt;tr&amp;gt; tag:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;sortable&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbName&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Training provider&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbDescription&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Location&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To add a bit of space between the column name and the ascending/descending indicator image (a common requirement), you could then apply CSS like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
tr.sortable th img {&lt;br /&gt;
	margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Developing a Model-View-Controller Component]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99822</id>
		<title>Adding sortable columns to a table in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Adding_sortable_columns_to_a_table_in_a_component&amp;diff=99822"/>
		<updated>2013-06-02T14:58:34Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: Adapt to Joomla! 2.5 (mainly filter_order -&amp;gt; list.ordering)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Given that you have a table of data already in your component, how do you make some, or all, of the table columns sortable, like many of them are in the Joomla Administrator?  It&#039;s not particularly hard to do, but there are several steps required and details you need to be aware of so everything fits together properly.  There are variations on the procedure given here and once you are confident that you understand how it all works you should feel free to explore other possibilities that may suit your purposes better.&lt;br /&gt;
&lt;br /&gt;
This procedure assumes that your component is structured according to the [[Model-View-Controller]] (MVC) design pattern. The general idea behind the procedure will still be applicable to non-MVC components if you apply a bit of imagination!&lt;br /&gt;
&lt;br /&gt;
==Step 1: The Model==&lt;br /&gt;
&lt;br /&gt;
The first thing you need to do is to populate the order state of your model. Change &#039;default_column_name&#039; to the name of the column you want to use as the default sort, and change the second parameter to DESC if you wish the default order direction to be descending. Calling the parents populateState method will make sure that the State object is filled and accessible to all of the code that might need it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
protected function populateState($ordering = null, $direction = null) {&lt;br /&gt;
	parent::populateState(&#039;default_column_name&#039;, &#039;ASC&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the model which generates the data that will form the table, you need to make a change to the method which builds the database query that will be used to populate the HTML table. Most often this is the [[JModelList::getListQuery|getListQuery()]] method, but might not be.&lt;br /&gt;
&lt;br /&gt;
The model could pull data in from anywhere; it doesn&#039;t have to be a database, but in the vast majority of cases the model will be using the Joomla database API to submit SQL queries to a database. Assuming that to be the case, you need to adjust the query so that the sort parameters are taken into account.&lt;br /&gt;
&lt;br /&gt;
This information gets called by whatever function builds the ORDER BY clause, typically a private function like this: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getListQuery() {&lt;br /&gt;
	$db = JFactory::getDbo();&lt;br /&gt;
	$query = $db-&amp;gt;getQuery(true);&lt;br /&gt;
	&lt;br /&gt;
	// ...&lt;br /&gt;
	&lt;br /&gt;
	$query-&amp;gt;order($db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.ordering&#039;, &#039;default_sort_column&#039;)).&#039; &#039;.&lt;br /&gt;
		$db-&amp;gt;getEscaped($this-&amp;gt;getState(&#039;list.direction&#039;, &#039;ASC&#039;)));&lt;br /&gt;
	&lt;br /&gt;
	return $query;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &#039;default_sort_column&#039; with the column you want to sort by by default.  You can also change &#039;ASC&#039; to &#039;DESC&#039;, depending on which way you want to sort by default.&lt;br /&gt;
&lt;br /&gt;
==Step 2: The View==&lt;br /&gt;
Having generated the sorting variables in the model, you need to assign them to the view so that they show up on the page when it is displayed.&lt;br /&gt;
&lt;br /&gt;
To do this you need to add a few lines of code to your view file, typically view.html.php with code similar to this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function display($tpl=null) {&lt;br /&gt;
	$items = $this-&amp;gt;get(&#039;Items&#039;);&lt;br /&gt;
	$state = $this-&amp;gt;get(&#039;State&#039;);&lt;br /&gt;
	&lt;br /&gt;
	$this-&amp;gt;sortDirection = $state-&amp;gt;get(&#039;list.direction&#039;);&lt;br /&gt;
	$this-&amp;gt;sortColumn = $state-&amp;gt;get(&#039;list.ordering&#039;);&lt;br /&gt;
	&lt;br /&gt;
	parent::display($tpl);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Step 3: The Template==&lt;br /&gt;
Now you need to add some elements to the component layout file.  The table must be included in a form.  This might already be the case as, for example, you might already have implemented pagination or filtering on the table.  But if the table is not yet in a form then now is the time to wrap it in &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags.  The reason that a form is required is that the sortable columns rely on a bit of JavaScript that will submit the form with sort parameters added.  Naturally, this will involve a page load, so if you would prefer an [[AJAX]]-based solution, then this procedure is not for you.&lt;br /&gt;
&lt;br /&gt;
The form tags will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Notice that the form name must be &amp;quot;adminForm&amp;quot;. In some special cases you might need to add the action attribute (e.g. action=&amp;quot;&amp;lt;?php echo JRoute::_( &#039;index.php&#039; );?&amp;gt;&amp;quot;), but usually this should not be required, when it&#039;s not there the form will just be submitted to the current documents address, i.e. the same page, which is usually the correct behavior.&lt;br /&gt;
&lt;br /&gt;
You also need to add a couple of hidden fields to the form. They can be placed anywhere between the &amp;lt;form&amp;gt; and &amp;lt;/form&amp;gt; tags, but generally they are placed just before the closing tag, like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;adminForm&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	.... table goes here ....&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortColumn; ?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;filter_order_Dir&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;sortDirection; ?&amp;gt;&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;
Now look at the table itself. You might have a table with static headings already, looking vaguely like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You need to replace the static column names with calls to the Joomla [[JHTML]] static class, so that your code will look something like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Name&#039;, &#039;DbNameColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;?php echo JHTML::_( &#039;grid.sort&#039;, &#039;Description&#039;, &#039;DbDescriptionColumn&#039;, $this-&amp;gt;sortDirection, $this-&amp;gt;sortColumn); ?&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You will definitely need to adapt this code to your specific requirements. The arguments to the [[JHTML]] call are as follows:&lt;br /&gt;
# Must be &#039;grid.sort&#039; so that [[JHTML]] will insert the correct behaviour for a sortable column.&lt;br /&gt;
# This is the name of the column that your visitors will actually see. You need to change this for your particular table columns.&lt;br /&gt;
# This is the name of the corresponding database field (column) that is to be sorted on.  This will be passed to the model, most likely so it can be added to an &amp;quot;ORDER BY&amp;quot; clause in the SQL query statement.&lt;br /&gt;
# Must be exactly as shown here. It is the current order direction (ascending or descending) and comes from the view (see later).&lt;br /&gt;
# Must be exactly as shown here. It is the name of the column that the table is currently sorted on and comes from the view (see later).&lt;br /&gt;
&lt;br /&gt;
In short, you need to amend the second and third arguments to each [[JHTML]] call appropriately.&lt;br /&gt;
&lt;br /&gt;
Finally, if your sortable table is going to be in the front-end of your site, then you need to add a little snippet of JavaScript to the layout.  Alternatively, you can add it to the view code (using [[JDocument/addScriptDeclaration|JDocument-&amp;gt;addScriptDeclaration]]) if you would rather keep your JavaScript code in the HTML &amp;lt;head&amp;gt; section.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function tableOrdering( order, dir, task )&lt;br /&gt;
{&lt;br /&gt;
	var form = document.adminForm;&lt;br /&gt;
&lt;br /&gt;
	form.filter_order.value = order;&lt;br /&gt;
	form.filter_order_Dir.value = dir;&lt;br /&gt;
	document.adminForm.submit( task );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You don&#039;t need to add this code if your sortable table is in the Administrator as this code is loaded for you automatically anyway.&lt;br /&gt;
&lt;br /&gt;
This completes the changes you need to make to the layout. [[JHTML]] [[JHTMLGrid|grid.sort]] will now add a call to the &#039;&#039;tableOrdering&#039;&#039; function so that &#039;&#039;tableOrdering&#039;&#039; will be called whenever the user clicks on the column header.  &#039;&#039;tableOrdering&#039;&#039; puts the name of the column that was clicked, and the sort direction, into the hidden form fields and submits the form; the changed values will get picked up by the populateState method, and then retrieved by your model via the list.ordering/list.dirc.&lt;br /&gt;
&lt;br /&gt;
==Step 4: Styling the result==&lt;br /&gt;
Finally. you might want to apply a bit of CSS styling to make the output a bit more attractive.&lt;br /&gt;
&lt;br /&gt;
Selecting the sortable columns can only be done via their context, so you will probably need to add a CSS class to the &amp;lt;nowiki&amp;gt;&amp;lt;table&amp;gt;&amp;lt;/nowiki&amp;gt;, the &amp;lt;nowiki&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;/nowiki&amp;gt; or to the &amp;lt;nowiki&amp;gt;&amp;lt;th&amp;gt;&amp;lt;/nowiki&amp;gt; tags.  This is what the output might look like with a class added to the &amp;lt;tr&amp;gt; tag:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;sortable&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbName&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Training provider&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
	&amp;lt;th&amp;gt;&amp;lt;a href=&amp;quot;javascript:tableOrdering(&#039;DbDescription&#039;,&#039;asc&#039;,&#039;&#039;);&amp;quot; title=&amp;quot;Click to sort by this column&amp;quot;&amp;gt;Location&amp;lt;/a&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
To add a bit of space between the column name and the ascending/descending indicator image (a common requirement), you could then apply CSS like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
tr.sortable th img {&lt;br /&gt;
	margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Developing a Model-View-Controller Component]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62673</id>
		<title>Migrating from Joomla 1.5 to Joomla 1.6+</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62673"/>
		<updated>2011-10-19T12:40:38Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* How to Manually Migrate Joomla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With Joomla 1.6 officially released, there have been a lot of questions as to how to migrate or upgrade to Joomla 1.6 from 1.5. This guide will take you step-by-step through the general procedure of how to migrate to Joomla 1.6.&lt;br /&gt;
Please read through all the material as this is not a light undertaking.&lt;br /&gt;
=Before Upgrading=&lt;br /&gt;
Don&#039;t let the numerical closeness of 1.5 and 1.6, mislead you. Joomla 1.6 took three years to develop and has been a major undertaking. Countless hours have been spent by many volunteers from around the world to put it all together. Although much of the code is the same from Joomla 1.5, much of it has been written from the ground up, and the changes are comparable to the changes from Joomla 1.0 to 1.5.&lt;br /&gt;
Because the changes from Joomla 1.5 to 1.6 are so large and because of the massive effort put into getting Joomla 1.6 to where it is today, there is no core upgrade path, this is indeed a migration. In planned future releases of Joomla (which will be released every 6 months), such as Joomla 1.7, 1.8, etc, the changes from version to version will be more incremental and a core upgrade path is planned.&lt;br /&gt;
Now that Joomla 1.6 is finally here and stable, a community initiative led by the developers of Joomla is turning towards [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] (a 3rd party Joomla extension on the JED originally developed by Matias Aguirre) for help and to help. Many of Joomla&#039;s developers (who are all volunteers that freely contribute their time) are volunteering to put the finishing touches on [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade].&lt;br /&gt;
&lt;br /&gt;
[http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] allows you to migrate from Joomla 1.5 to 1.6.&lt;br /&gt;
Lets get started!&lt;br /&gt;
==Review the Requirements==&lt;br /&gt;
Please, please save yourself (and possibly your clients) a lot of headaches and make sure that your server (and in the case of jUpgrade, your browser too) is up for the task.  please review the [http://docs.joomla.org/Joomla_1.6_technical_requirements technical requirements for Joomla! 1.6].  Please review the [http://www.matware.com.ar/joomla/jupgrade.html requirements for jUpgrade] as well.&lt;br /&gt;
==Before You Get Started==&lt;br /&gt;
Before you get started, there are a few things that you are going to have to check and/or think about:&lt;br /&gt;
# Is your Joomla 1.5 version up to date? The most up-to-date version of Joomla 1.5 is 1.5.23. If your version is not up-to-date, upgrade to 1.5.23 before migrating, especially if you are running Joomla 1.5.11 or lower.&lt;br /&gt;
# Do all your extensions have Joomla 1.6 native versions? At the time of the writing of this tutorial there are 108 available on the JED. Please note that jUpgrade is not currently able to upgrade Joomla 3rd party extensions, so those will have to be done via their respective upgrade procedures. This is however a work in progress.&lt;br /&gt;
# Have you modified any core files? Any changes that you have made to core files in Joomla will be lost so please be forewarned.&lt;br /&gt;
# Is there a Joomla 1.6 compatible template available from your template provider? If not, do you feel comfortable making the changes yourself? There are a couple good resources:&lt;br /&gt;
## [http://community.joomla.org/blogs/community/1257-16-templates.html Chad Windnagle&#039;s Joomla Community blog]&lt;br /&gt;
## [http://www.slideshare.net/chrisdavenport/template-changes-for-joomla-16 Chris Davenport&#039;s &amp;quot;Template Changes for Joomla 1.6&amp;quot; presentation]&lt;br /&gt;
## [[Upgrading a Joomla 1.5 template to Joomla 1.6|Joomla&#039;s Docs Template Tutorial]] Please note that although jUpgrade is not able to currently upgrade templates, the developers are working hard at implementing the feature.&lt;br /&gt;
# Is your language pack available in Joomla 1.6?  [http://community.joomla.org/translations/joomla-16-translations.html Find your Joomla1 1.6 Translation].&lt;br /&gt;
# Do you have folder or file permissions issues in your Joomla 1.5 installation?&lt;br /&gt;
# Do you NEED to migrate to Joomla 1.6? Joomla 1.5 is powerful and very mature. For many people there is not a need to rush into Joomla 1.6. Joomla will continue to support Joomla 1.5 for at least another year and three months, releasing security updates and bug squashing updates when needed.&lt;br /&gt;
#: The two main features of Joomla 1.6 that makes it superior to Joomla 1.5 are: Access Control List (ACL) and nested categories. Gone are the days of simply having guests, registered users, authors, and editors, without being able to specify what they can and can&#039;t do in the frontend. Also, with 1.6 you can have more flexibility of organizing (and therefore displaying) your content with nicely organized categories within categories. No more being restricted to the section &amp;gt;&amp;gt; category structure. Those are all great things to have (especially the ACL), however, for many 1.5 users, it isn&#039;t needed. The main point is to decide for yourself.&lt;br /&gt;
#: For a massive list of changes from Joomla 1.5 to Joomla 1.6, please see [[What&#039;s new in Joomla 1.6]].&lt;br /&gt;
&lt;br /&gt;
==Backup, Backup, Backup==&lt;br /&gt;
Skipping this part is perhaps the biggest mistake you can make. If you have a proper backup (or several) you can always revert back if needed. However, if you don&#039;t properly backup your site and something goes wrong, you are going to waste a lot of valuable time, and sometimes a lot money, getting things back to the way they were. So please backup!&lt;br /&gt;
&lt;br /&gt;
==== Using Akeeba to backup ====&lt;br /&gt;
&lt;br /&gt;
* Akeeba Backup produces a .jpa file&lt;br /&gt;
&lt;br /&gt;
* The .jpa file contains all the folders/files and database files.&lt;br /&gt;
&lt;br /&gt;
* The .jpa file also contains an installer&lt;br /&gt;
&lt;br /&gt;
* Kickstart.php (from Akeeba) unpacks the .jpa file&lt;br /&gt;
&lt;br /&gt;
* You then run the installer and install your site like a Joomla install.&lt;br /&gt;
&lt;br /&gt;
* The installer has an option to change the configuration for restoring to a different location &lt;br /&gt;
&lt;br /&gt;
After you create the Database for your Joomla download and install Akeeba, it can be download from [http://extensions.joomla.org/extensions/access-a-security/site-security/backup/1606 Joomla extension directory].  There is a link to full instructions there as well.&lt;br /&gt;
&lt;br /&gt;
=Upgrading=&lt;br /&gt;
==Download jUpgrade==&lt;br /&gt;
Download the [http://www.matware.com.ar/downloads/joomla/jupgrade.html latest version of jUpgrade]. It is highly advisible, especially when development still is progressing, to always use the latest available version!&lt;br /&gt;
&lt;br /&gt;
==Optional Testing Environment==&lt;br /&gt;
If you are really nervous by this point and your heart is beating fast, then you should probably set up a testing environment.&lt;br /&gt;
&lt;br /&gt;
=== Install XAMPP ===&lt;br /&gt;
XAMPP is an easy-to-install package that bundles the Apache web server, PHP, XDEBUG, and the MySql database. This allows you to create the environment you need to run Joomla! on your local machine. The latest version of XAMPP is available at [http://www.apachefriends.org/en/xampp.html the XAMPP web site]. Downloads are available for Linux, Windows, Mac OS X and Solaris. Download the package for your platform. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important Note Regarding XAMPP and Skype:&#039;&#039; Apache and Skype both use port 80 as an alternative for incoming connections. If you use Skype, go into the Tools-Options-Advanced-Connection panel and deselect the &amp;quot;Use 80 and 443 as alternatives for incoming connections&amp;quot; option. If Apache starts as a service, it will take 80 before Skype starts and you will not see a problem. But, to be safe, disable the option in Skype.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of August 5, 2010, XDebug has been updated (to version 2.1) which fixes some important bugs (for example, watching local variables for nesting functions). The latest XAMPP package (1.7.3) now includes this new version of XDebug. If you just want to update XDebug, you can download the latest module from [http://www.xdebug.org]. There is a handy website that tells you which XDebug binary you need, depending on your phpinfo() information [http://xdebug.org/find-binary.php here]. To use it, you just copy the output of your phpinfo() display and paste it into the form on the site.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Installation on Windows =====&lt;br /&gt;
&lt;br /&gt;
Installation for Windows is very simple. You can use the XAMPP installer executable (for example, &amp;quot;xampp-win32-1.7.3-installer.exe&amp;quot;). Detailed installation instructions for Windows are available [http://www.apachefriends.org/en/xampp-windows.html here]. &lt;br /&gt;
&lt;br /&gt;
For Windows, it is recommended to install XAMPP in &amp;quot;c:\xampp&amp;quot; (not in &amp;quot;c:\program files&amp;quot;). If you do this, your Joomla! (and any other local web site folders) will go into the folder &amp;quot;c:\xampp\htdocs&amp;quot;. (By convention, all web content goes under the &amp;quot;htdocs&amp;quot; folder.)&lt;br /&gt;
&lt;br /&gt;
If you have multiple http servers (like IIS) you can change the xampp listening port. In &amp;lt;xamppDir&amp;gt;\apache\conf\httpd.conf, modify the line Listen 80 to Listen [portnumber] (ex: &amp;quot;Listen 8080&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
===== Installation on Linux =====&lt;br /&gt;
&lt;br /&gt;
Install xammp&lt;br /&gt;
Open Terminal and enter: &lt;br /&gt;
 sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt&lt;br /&gt;
(replace &#039;&#039;xampp-linux-1.7.3a.tar.gz&#039;&#039; with the version of xammp you downloaded).&lt;br /&gt;
It has been reported that the MYSQL database of xampp 1.7.4 does not work with Joomla 1.5.22&lt;br /&gt;
&lt;br /&gt;
This installs ... Apache2, mysql and php5 as well as an ftp server.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
starts/stops all the services&lt;br /&gt;
&lt;br /&gt;
==== Test your xammp localhost server ====&lt;br /&gt;
Open your Browser and point it to&lt;br /&gt;
 http://localhost&lt;br /&gt;
The index.php will redirect to&lt;br /&gt;
 http://localhost/xammp&lt;br /&gt;
&lt;br /&gt;
There you will find instructions on how to change default usernames/passwords.  On a PC that does not serve files to the Internet or LAN then changing the defaults is personal choice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install jUpgrade ==&lt;br /&gt;
Go to your Joomla backend. e.g. www.yoursite.com/administrator&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Extensions&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Install/Uninstall&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Browse&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Select com_jupgrade&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Upload File &amp;amp; Install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:browse.png|Browse and Upload Component]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade2.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
== Enable Mootools Upgrade Plugin ==&lt;br /&gt;
# Go to Extensions | Plugin Manager&lt;br /&gt;
# Search for &amp;quot;System - Mootools Upgrade&amp;quot;&lt;br /&gt;
# Enable the plugin&lt;br /&gt;
It is important that this plugin is installed and that it has been set to enabled, as the proper functioning of jUpgrade depends on it.&lt;br /&gt;
&lt;br /&gt;
== Configure Options ==&lt;br /&gt;
As of jUpgrade version 1.1.1, support is present to migrate to Joomla! 1.6, Joomla! 1.7, and an old Molajo build.  As well, for jUpgrade to be successful, you must configure your current table prefix prior to beginning the migration.  The following are the options that can be configured with jUpgrade:&lt;br /&gt;
&lt;br /&gt;
Global:&lt;br /&gt;
* Distribution - Select whether to migrate to Joomla! 1.6, 1.7, or Molajo&lt;br /&gt;
* Prefix for old database - Your current table prefix&lt;br /&gt;
* Prefix for new database - Your selected table prefix for your migrated site&lt;br /&gt;
&lt;br /&gt;
Skips:&lt;br /&gt;
* Skip checks - Skip pre-migration checks&lt;br /&gt;
* Skip download - Skip downloading the package (Note: Must have a package already downloaded to your temp folder or set this and Skip Decompress if set to yes)&lt;br /&gt;
* Skip decompress - Skip decompressing the downloaded package (Note: Must have a package already downloaded and decompressed to site_root/jupgrade if set to Yes)&lt;br /&gt;
&lt;br /&gt;
Templates:&lt;br /&gt;
* Keep original positions - Keep the currently defined positions for modules&lt;br /&gt;
&lt;br /&gt;
Debug:&lt;br /&gt;
* Enable Debug - Enable this to have messages displayed below the migration process concerning the progress, helpful if having issues&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgrade_options.png|alt=jUpgrade 1.1.1 Options]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&#039;&#039;&#039;Components&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;jUpgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Accessjupgrade.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Start Upgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Startjupgrade.png|alt=Start jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Runjupgrade.png|alt=Run jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do not exit the screen&#039;&#039;&#039; until everything has finished loading. Scroll down to check if finished.&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgradefinished.png|alt=jUpgrade Finished]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Success!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please note that jUpgrade currently does not migrate templates, only default templates.&lt;br /&gt;
&lt;br /&gt;
==Behind the Scenes==&lt;br /&gt;
As explained in the background information, the changes from Joomla 1.5 and 1.6 are quite significant.  The fact that jUpgrade creates a new Joomla 1.6 installation for us is, in my opinion, pure genius. If the migration process was not 100% successful, your Joomla 1.5 is still perfectly intact and none of your users are affected. You have an opportunity to check out your site both in the frontend and the backend to make sure everything is up to par.  So what actually happens? jUpgrade downloads the latest version of Joomla 1.6 for you to the jupgrade directory (which it creates) in the root folder of your Joomla 1.5 installation. It then extracts all the files from the download. Once extraction has completed, jUpgrade installs Joomla 1.6 and then proceeds to migrate your old database to the new Joomla 1.6 database which it has created.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
==Check Your Joomla! 1.6==&lt;br /&gt;
Please do a full site review of your Joomla 1.6 installation and make sure everything is set up properly.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
Here is a general checklist to check:&lt;br /&gt;
* Banners&lt;br /&gt;
* Categories&lt;br /&gt;
* Contacts&lt;br /&gt;
* Content&lt;br /&gt;
* Menus&lt;br /&gt;
* Modules&lt;br /&gt;
* Newsfeeds&lt;br /&gt;
* Users&lt;br /&gt;
* Weblinks&lt;br /&gt;
* Templates - Work is currently being done on the template upgrade feature of jUpdate and it is not yet fully functional. Your module positions may have to be adjusted in module manager.&lt;br /&gt;
==Backup Joomla! 1.6==&lt;br /&gt;
If everything looks good to go, then let&#039;s backup the new Joomla 1.6 installation.&lt;br /&gt;
==Overview of the Rest of the Process==&lt;br /&gt;
Quick overview of what we are going to try to do now:&lt;br /&gt;
# Relocate our Joomla 1.5 installation to a subfolder as a &amp;quot;just in case&amp;quot;.&lt;br /&gt;
# Relocate our Joomla 1.6 installation to the html folder.&lt;br /&gt;
&#039;It should happen in this order&#039; If you do it in reverse order, the Joomla 1.6 files will get mixed with the Joomla 1.5 files (many of 1.5 files will be overwritten) and you will have a big mess!  Your site will likely still work, but it&#039;s a security ticking time bomb waiting to go off.&lt;br /&gt;
&lt;br /&gt;
=Going Live=&lt;br /&gt;
Next log onto your host&#039;s file manager (e.g. cPanel, Plesk, etc) or an FTP Client, however, preferably a file manager.&lt;br /&gt;
The general procedure is (it should take about 30 seconds if you review the steps before you start):&lt;br /&gt;
# Create a subfolder (e.g. myoldsite) for the Joomla 1.5 installation in your html root, e.g. public_html/myoldsite&lt;br /&gt;
# Select all the folders (***except the jupgrade folder***) and files in the html root and move them into the Joomla 1.5 subfolder (e.g. myoldsite)&lt;br /&gt;
# Select all the folders and files in the jupgrade folder and move them to the html root&lt;br /&gt;
# Double check the frontend and backend&lt;br /&gt;
&lt;br /&gt;
=How to Manually Migrate Joomla=&lt;br /&gt;
If Jupgrade did not work out for you like many of us, you might want to consider manual upgrade. &#039;&#039;&#039;Be warned, however, that this process is very tedious (especially see step 6 below), and the procedure is not well tested as of yet (if at all)&#039;&#039;&#039;. So just like the Jupgrade method, you will want to backup your database just in case. Before upgrading you should check to make sure every extension you want is joomla 1.6/1.7 compatible. Also back up your directory files just in case and keep a list of the extensions you used.&lt;br /&gt;
&lt;br /&gt;
Now onto the upgrade; please note that the following procedure should only be chosen if all else fails, and requires a good working knowledge of SQL! See the last paragraph of this section for a possibly less tedious alternative to doing steps 1, 2, 6 and 7) :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 0:&#039;&#039;&#039; First of all, as always before big changes, backup all your data; that includes all files as well as exporting all database tables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1:&#039;&#039;&#039; If you want, you can convert the prefixes of all the tables in your database. This is especially useful if you would like to keep your 1.5 database in parallel to your 1.6/1.7 installation, at least for the transition period. It is best done using a script, here is one that worked pretty well as seen on [http://www.nilpo.com/2009/01/web-development/mysql-table-prefix-changer-tool/ Nilop]. &#039;&#039;&#039;Beware&#039;&#039;&#039;, however, that executing this script will stop your old site from working because after the prefix conversion, your old installation can&#039;t access the database anymore (it will still try to access the tables by their old prefix)! To enable it again, import the database export created in step 0 after the script has finished running. Joomla 1.5 usually has the prefix of &amp;quot;jos&amp;quot; which you can convert to the prefix &amp;quot;jml&amp;quot; or &amp;quot;j16&amp;quot;, for example. So using your ftp install the php converter script onto the root of your site. It should be at the url &#039;&#039;&#039;Mysite.com&#039;&#039;&#039;/prefix.php which all you need to do is fill in the database information. After this you have all the tables nicely converted to the new prefix.&lt;br /&gt;
&lt;br /&gt;
[[File:Changer.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
Notice in the following screen shot that the sql data is &amp;quot;jos&amp;quot;:&lt;br /&gt;
[[File:Tables.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
You want it converted to &amp;quot;jml&amp;quot; as seen here:&lt;br /&gt;
[[File:Prefix.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2:&#039;&#039;&#039; Export all the database tables you would like to use on your joomla 1.6+ site. Usually this is things like content and components.&lt;br /&gt;
&lt;br /&gt;
[[File:Export.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3:&#039;&#039;&#039; Uninstall your old site including the database, files, and directories that are associated with joomla. Or if you would rather just test the upgrade, skip step this step and create a new directory for your joomla 1.6+ site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4:&#039;&#039;&#039; Install the new joomla which is done through a ftp or a cpanel. If you have no database associated with it, install a new database and user.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5:&#039;&#039;&#039; Install the components and other extensions you would have used before onto your new joomla 1.6+ site. This is done first, in order for none of your old database tables to be overwritten later.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6: &#039;&#039;&#039; Convert the .sql file with your 1.5 tables to an sql file compatible with the version you want to upgrade to. That is a very tedious step - you&#039;ll have to check the database schema changes between the 1.5 you&#039;re upgrading from and the 1.6.+ version you&#039;re upgrading to, and adapt the sql file accordingly. &#039;&#039;&#039;Note:&#039;&#039;&#039; This step could use a more detailed description, if you have ever done a manual Joomla migration, please help and share your experiences and knowledge here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 7:&#039;&#039;&#039; Import the .sql file from your computer onto your joomla 1.6+ database. It is also possible that some extensions may have the possibility of changes to the sql tables when they upgraded there extension to joomla 1.6+. If this is the case, it is recommended that you ask the developer of that extension for help with knowing what changes to the sql were made.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keep in mind!&#039;&#039;&#039; It is possible for settings to be lost based on how the component stored the settings. From personal experience it worked just fine, but you may want to review the settings of each component.&lt;br /&gt;
&lt;br /&gt;
For an easier way to migrate articles, categories/sections, contacts, images, and users, be sure to use [http://extensions.joomla.org/extensions/migration-a-conversion/data-import-a-export/12816 J2XML] for exporting and [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/15807 J2XML Importer] for importing the data.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
* first check, if you have php5 at least. (use phpinfo() or /usr/bin/php --version)&lt;br /&gt;
* &#039;&#039;&#039;jUpgrade cannot download Joomla 1.6 package?&#039;&#039;&#039; - When the download fails (timeouts, javascript issues, etc) you can download it manually here: http://anonymous:@joomlacode.org/svn/joomla/development/branches/jupgrade/pack/joomla16.zip and put this file into your ROOT/tmp directory. Then, in the preferences of jUpgrade, you must set &#039;Skip Download&#039; to &#039;Yes&#039;. After that, run the upgrade again.&lt;br /&gt;
* &#039;&#039;&#039;Are you getting errors with the progress bar in Internet Explorer (Windows XP)?&#039;&#039;&#039; - Use Firefox: http://www.mozilla.com/en-US/firefox/&lt;br /&gt;
* Go through the Requirements and Before You Get Started sections above and double check everything!&lt;br /&gt;
* &#039;&#039;&#039;Report Bugs:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* &#039;&#039;&#039;Support:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
==How You can Contribute &amp;amp; Help==&lt;br /&gt;
Creating an extension as significant as jUpgrade requires an enormous amount of time and effort considering the major structural changes between Joomla 1.5 and 1.6. Add to this the fact that during each release of Joomla 1.6 betas, the extension would have to be modified to work with the new changes between releases, and all of a sudden it&#039;s too hard for any one person to complete in a short period of time (especially when you are not being paid).&lt;br /&gt;
With this being said, it&#039;s time to step up and make a difference, whether big or small. Have you profited from Joomla in the last year? Are you excited about the future of Joomla? Would you like to contribute back and show your gratitude? Now you can in this project!&lt;br /&gt;
We, as part of the Joomla community, are calling on the entire Joomla community to help out in whatever way you can. You don&#039;t have to be a master developer, just go through this tutorial on a test site and if you come across any bugs, report it. If you know how to fix it, create a patch for it. If you are a master developer, step up to the challenge.&lt;br /&gt;
* You can report bugs here: http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* You can volunteer and ask questions about volunteering here: http://www.matware.com.ar/forum/projects/jupgrade/volunteer-information.html&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62654</id>
		<title>Migrating from Joomla 1.5 to Joomla 1.6+</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62654"/>
		<updated>2011-10-18T11:57:12Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* How to Manually Upgrade Joomla */ upgrade -&amp;gt; migration, warning that manual migration might be very tedious&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With Joomla 1.6 officially released, there have been a lot of questions as to how to migrate or upgrade to Joomla 1.6 from 1.5. This guide will take you step-by-step through the general procedure of how to migrate to Joomla 1.6.&lt;br /&gt;
Please read through all the material as this is not a light undertaking.&lt;br /&gt;
=Before Upgrading=&lt;br /&gt;
Don&#039;t let the numerical closeness of 1.5 and 1.6, mislead you. Joomla 1.6 took three years to develop and has been a major undertaking. Countless hours have been spent by many volunteers from around the world to put it all together. Although much of the code is the same from Joomla 1.5, much of it has been written from the ground up, and the changes are comparable to the changes from Joomla 1.0 to 1.5.&lt;br /&gt;
Because the changes from Joomla 1.5 to 1.6 are so large and because of the massive effort put into getting Joomla 1.6 to where it is today, there is no core upgrade path, this is indeed a migration. In planned future releases of Joomla (which will be released every 6 months), such as Joomla 1.7, 1.8, etc, the changes from version to version will be more incremental and a core upgrade path is planned.&lt;br /&gt;
Now that Joomla 1.6 is finally here and stable, a community initiative led by the developers of Joomla is turning towards [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] (a 3rd party Joomla extension on the JED originally developed by Matias Aguirre) for help and to help. Many of Joomla&#039;s developers (who are all volunteers that freely contribute their time) are volunteering to put the finishing touches on [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade].&lt;br /&gt;
&lt;br /&gt;
[http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] allows you to migrate from Joomla 1.5 to 1.6.&lt;br /&gt;
Lets get started!&lt;br /&gt;
==Review the Requirements==&lt;br /&gt;
Please, please save yourself (and possibly your clients) a lot of headaches and make sure that your server (and in the case of jUpgrade, your browser too) is up for the task.  please review the [http://docs.joomla.org/Joomla_1.6_technical_requirements technical requirements for Joomla! 1.6].  Please review the [http://www.matware.com.ar/joomla/jupgrade.html requirements for jUpgrade] as well.&lt;br /&gt;
==Before You Get Started==&lt;br /&gt;
Before you get started, there are a few things that you are going to have to check and/or think about:&lt;br /&gt;
# Is your Joomla 1.5 version up to date? The most up-to-date version of Joomla 1.5 is 1.5.23. If your version is not up-to-date, upgrade to 1.5.23 before migrating, especially if you are running Joomla 1.5.11 or lower.&lt;br /&gt;
# Do all your extensions have Joomla 1.6 native versions? At the time of the writing of this tutorial there are 108 available on the JED. Please note that jUpgrade is not currently able to upgrade Joomla 3rd party extensions, so those will have to be done via their respective upgrade procedures. This is however a work in progress.&lt;br /&gt;
# Have you modified any core files? Any changes that you have made to core files in Joomla will be lost so please be forewarned.&lt;br /&gt;
# Is there a Joomla 1.6 compatible template available from your template provider? If not, do you feel comfortable making the changes yourself? There are a couple good resources:&lt;br /&gt;
## [http://community.joomla.org/blogs/community/1257-16-templates.html Chad Windnagle&#039;s Joomla Community blog]&lt;br /&gt;
## [http://www.slideshare.net/chrisdavenport/template-changes-for-joomla-16 Chris Davenport&#039;s &amp;quot;Template Changes for Joomla 1.6&amp;quot; presentation]&lt;br /&gt;
## [[Upgrading a Joomla 1.5 template to Joomla 1.6|Joomla&#039;s Docs Template Tutorial]] Please note that although jUpgrade is not able to currently upgrade templates, the developers are working hard at implementing the feature.&lt;br /&gt;
# Is your language pack available in Joomla 1.6?  [http://community.joomla.org/translations/joomla-16-translations.html Find your Joomla1 1.6 Translation].&lt;br /&gt;
# Do you have folder or file permissions issues in your Joomla 1.5 installation?&lt;br /&gt;
# Do you NEED to migrate to Joomla 1.6? Joomla 1.5 is powerful and very mature. For many people there is not a need to rush into Joomla 1.6. Joomla will continue to support Joomla 1.5 for at least another year and three months, releasing security updates and bug squashing updates when needed.&lt;br /&gt;
#: The two main features of Joomla 1.6 that makes it superior to Joomla 1.5 are: Access Control List (ACL) and nested categories. Gone are the days of simply having guests, registered users, authors, and editors, without being able to specify what they can and can&#039;t do in the frontend. Also, with 1.6 you can have more flexibility of organizing (and therefore displaying) your content with nicely organized categories within categories. No more being restricted to the section &amp;gt;&amp;gt; category structure. Those are all great things to have (especially the ACL), however, for many 1.5 users, it isn&#039;t needed. The main point is to decide for yourself.&lt;br /&gt;
#: For a massive list of changes from Joomla 1.5 to Joomla 1.6, please see [[What&#039;s new in Joomla 1.6]].&lt;br /&gt;
&lt;br /&gt;
==Backup, Backup, Backup==&lt;br /&gt;
Skipping this part is perhaps the biggest mistake you can make. If you have a proper backup (or several) you can always revert back if needed. However, if you don&#039;t properly backup your site and something goes wrong, you are going to waste a lot of valuable time, and sometimes a lot money, getting things back to the way they were. So please backup!&lt;br /&gt;
&lt;br /&gt;
==== Using Akeeba to backup ====&lt;br /&gt;
&lt;br /&gt;
* Akeeba Backup produces a .jpa file&lt;br /&gt;
&lt;br /&gt;
* The .jpa file contains all the folders/files and database files.&lt;br /&gt;
&lt;br /&gt;
* The .jpa file also contains an installer&lt;br /&gt;
&lt;br /&gt;
* Kickstart.php (from Akeeba) unpacks the .jpa file&lt;br /&gt;
&lt;br /&gt;
* You then run the installer and install your site like a Joomla install.&lt;br /&gt;
&lt;br /&gt;
* The installer has an option to change the configuration for restoring to a different location &lt;br /&gt;
&lt;br /&gt;
After you create the Database for your Joomla download and install Akeeba, it can be download from [http://extensions.joomla.org/extensions/access-a-security/site-security/backup/1606 Joomla extension directory].  There is a link to full instructions there as well.&lt;br /&gt;
&lt;br /&gt;
=Upgrading=&lt;br /&gt;
==Download jUpgrade==&lt;br /&gt;
Download the [http://www.matware.com.ar/downloads/joomla/jupgrade.html latest version of jUpgrade]. It is highly advisible, especially when development still is progressing, to always use the latest available version!&lt;br /&gt;
&lt;br /&gt;
==Optional Testing Environment==&lt;br /&gt;
If you are really nervous by this point and your heart is beating fast, then you should probably set up a testing environment.&lt;br /&gt;
&lt;br /&gt;
=== Install XAMPP ===&lt;br /&gt;
XAMPP is an easy-to-install package that bundles the Apache web server, PHP, XDEBUG, and the MySql database. This allows you to create the environment you need to run Joomla! on your local machine. The latest version of XAMPP is available at [http://www.apachefriends.org/en/xampp.html the XAMPP web site]. Downloads are available for Linux, Windows, Mac OS X and Solaris. Download the package for your platform. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important Note Regarding XAMPP and Skype:&#039;&#039; Apache and Skype both use port 80 as an alternative for incoming connections. If you use Skype, go into the Tools-Options-Advanced-Connection panel and deselect the &amp;quot;Use 80 and 443 as alternatives for incoming connections&amp;quot; option. If Apache starts as a service, it will take 80 before Skype starts and you will not see a problem. But, to be safe, disable the option in Skype.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of August 5, 2010, XDebug has been updated (to version 2.1) which fixes some important bugs (for example, watching local variables for nesting functions). The latest XAMPP package (1.7.3) now includes this new version of XDebug. If you just want to update XDebug, you can download the latest module from [http://www.xdebug.org]. There is a handy website that tells you which XDebug binary you need, depending on your phpinfo() information [http://xdebug.org/find-binary.php here]. To use it, you just copy the output of your phpinfo() display and paste it into the form on the site.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Installation on Windows =====&lt;br /&gt;
&lt;br /&gt;
Installation for Windows is very simple. You can use the XAMPP installer executable (for example, &amp;quot;xampp-win32-1.7.3-installer.exe&amp;quot;). Detailed installation instructions for Windows are available [http://www.apachefriends.org/en/xampp-windows.html here]. &lt;br /&gt;
&lt;br /&gt;
For Windows, it is recommended to install XAMPP in &amp;quot;c:\xampp&amp;quot; (not in &amp;quot;c:\program files&amp;quot;). If you do this, your Joomla! (and any other local web site folders) will go into the folder &amp;quot;c:\xampp\htdocs&amp;quot;. (By convention, all web content goes under the &amp;quot;htdocs&amp;quot; folder.)&lt;br /&gt;
&lt;br /&gt;
If you have multiple http servers (like IIS) you can change the xampp listening port. In &amp;lt;xamppDir&amp;gt;\apache\conf\httpd.conf, modify the line Listen 80 to Listen [portnumber] (ex: &amp;quot;Listen 8080&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
===== Installation on Linux =====&lt;br /&gt;
&lt;br /&gt;
Install xammp&lt;br /&gt;
Open Terminal and enter: &lt;br /&gt;
 sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt&lt;br /&gt;
(replace &#039;&#039;xampp-linux-1.7.3a.tar.gz&#039;&#039; with the version of xammp you downloaded).&lt;br /&gt;
It has been reported that the MYSQL database of xampp 1.7.4 does not work with Joomla 1.5.22&lt;br /&gt;
&lt;br /&gt;
This installs ... Apache2, mysql and php5 as well as an ftp server.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
starts/stops all the services&lt;br /&gt;
&lt;br /&gt;
==== Test your xammp localhost server ====&lt;br /&gt;
Open your Browser and point it to&lt;br /&gt;
 http://localhost&lt;br /&gt;
The index.php will redirect to&lt;br /&gt;
 http://localhost/xammp&lt;br /&gt;
&lt;br /&gt;
There you will find instructions on how to change default usernames/passwords.  On a PC that does not serve files to the Internet or LAN then changing the defaults is personal choice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install jUpgrade ==&lt;br /&gt;
Go to your Joomla backend. e.g. www.yoursite.com/administrator&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Extensions&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Install/Uninstall&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Browse&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Select com_jupgrade&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Upload File &amp;amp; Install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:browse.png|Browse and Upload Component]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade2.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
== Enable Mootools Upgrade Plugin ==&lt;br /&gt;
# Go to Extensions | Plugin Manager&lt;br /&gt;
# Search for &amp;quot;System - Mootools Upgrade&amp;quot;&lt;br /&gt;
# Enable the plugin&lt;br /&gt;
It is important that this plugin is installed and that it has been set to enabled, as the proper functioning of jUpgrade depends on it.&lt;br /&gt;
&lt;br /&gt;
== Configure Options ==&lt;br /&gt;
As of jUpgrade version 1.1.1, support is present to migrate to Joomla! 1.6, Joomla! 1.7, and an old Molajo build.  As well, for jUpgrade to be successful, you must configure your current table prefix prior to beginning the migration.  The following are the options that can be configured with jUpgrade:&lt;br /&gt;
&lt;br /&gt;
Global:&lt;br /&gt;
* Distribution - Select whether to migrate to Joomla! 1.6, 1.7, or Molajo&lt;br /&gt;
* Prefix for old database - Your current table prefix&lt;br /&gt;
* Prefix for new database - Your selected table prefix for your migrated site&lt;br /&gt;
&lt;br /&gt;
Skips:&lt;br /&gt;
* Skip checks - Skip pre-migration checks&lt;br /&gt;
* Skip download - Skip downloading the package (Note: Must have a package already downloaded to your temp folder or set this and Skip Decompress if set to yes)&lt;br /&gt;
* Skip decompress - Skip decompressing the downloaded package (Note: Must have a package already downloaded and decompressed to site_root/jupgrade if set to Yes)&lt;br /&gt;
&lt;br /&gt;
Templates:&lt;br /&gt;
* Keep original positions - Keep the currently defined positions for modules&lt;br /&gt;
&lt;br /&gt;
Debug:&lt;br /&gt;
* Enable Debug - Enable this to have messages displayed below the migration process concerning the progress, helpful if having issues&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgrade_options.png|alt=jUpgrade 1.1.1 Options]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&#039;&#039;&#039;Components&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;jUpgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Accessjupgrade.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Start Upgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Startjupgrade.png|alt=Start jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Runjupgrade.png|alt=Run jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do not exit the screen&#039;&#039;&#039; until everything has finished loading. Scroll down to check if finished.&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgradefinished.png|alt=jUpgrade Finished]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Success!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please note that jUpgrade currently does not migrate templates, only default templates.&lt;br /&gt;
&lt;br /&gt;
==Behind the Scenes==&lt;br /&gt;
As explained in the background information, the changes from Joomla 1.5 and 1.6 are quite significant.  The fact that jUpgrade creates a new Joomla 1.6 installation for us is, in my opinion, pure genius. If the migration process was not 100% successful, your Joomla 1.5 is still perfectly intact and none of your users are affected. You have an opportunity to check out your site both in the frontend and the backend to make sure everything is up to par.  So what actually happens? jUpgrade downloads the latest version of Joomla 1.6 for you to the jupgrade directory (which it creates) in the root folder of your Joomla 1.5 installation. It then extracts all the files from the download. Once extraction has completed, jUpgrade installs Joomla 1.6 and then proceeds to migrate your old database to the new Joomla 1.6 database which it has created.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
==Check Your Joomla! 1.6==&lt;br /&gt;
Please do a full site review of your Joomla 1.6 installation and make sure everything is set up properly.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
Here is a general checklist to check:&lt;br /&gt;
* Banners&lt;br /&gt;
* Categories&lt;br /&gt;
* Contacts&lt;br /&gt;
* Content&lt;br /&gt;
* Menus&lt;br /&gt;
* Modules&lt;br /&gt;
* Newsfeeds&lt;br /&gt;
* Users&lt;br /&gt;
* Weblinks&lt;br /&gt;
* Templates - Work is currently being done on the template upgrade feature of jUpdate and it is not yet fully functional. Your module positions may have to be adjusted in module manager.&lt;br /&gt;
==Backup Joomla! 1.6==&lt;br /&gt;
If everything looks good to go, then let&#039;s backup the new Joomla 1.6 installation.&lt;br /&gt;
==Overview of the Rest of the Process==&lt;br /&gt;
Quick overview of what we are going to try to do now:&lt;br /&gt;
# Relocate our Joomla 1.5 installation to a subfolder as a &amp;quot;just in case&amp;quot;.&lt;br /&gt;
# Relocate our Joomla 1.6 installation to the html folder.&lt;br /&gt;
&#039;It should happen in this order&#039; If you do it in reverse order, the Joomla 1.6 files will get mixed with the Joomla 1.5 files (many of 1.5 files will be overwritten) and you will have a big mess!  Your site will likely still work, but it&#039;s a security ticking time bomb waiting to go off.&lt;br /&gt;
&lt;br /&gt;
=Going Live=&lt;br /&gt;
Next log onto your host&#039;s file manager (e.g. cPanel, Plesk, etc) or an FTP Client, however, preferably a file manager.&lt;br /&gt;
The general procedure is (it should take about 30 seconds if you review the steps before you start):&lt;br /&gt;
# Create a subfolder (e.g. myoldsite) for the Joomla 1.5 installation in your html root, e.g. public_html/myoldsite&lt;br /&gt;
# Select all the folders (***except the jupgrade folder***) and files in the html root and move them into the Joomla 1.5 subfolder (e.g. myoldsite)&lt;br /&gt;
# Select all the folders and files in the jupgrade folder and move them to the html root&lt;br /&gt;
# Double check the frontend and backend&lt;br /&gt;
&lt;br /&gt;
=How to Manually Migrate Joomla=&lt;br /&gt;
If Jupgrade did not work out for you like many of us, you might want to consider manual upgrade. Be warned, however, that this process is very tedious (especially see step 6 below), and the procedure is not well tested as of yet (if at all). So just like the Jupgrade method, you will want to backup your database just in case. Before upgrading you should check to make sure every extension you want is joomla 1.6/1.7 compatible. Also back up your directory files just in case and keep a list of the extensions you used.&lt;br /&gt;
&lt;br /&gt;
Now onto the upgrade; please note that the following procedure should only be chosen if all else fails, and requires a good working knowledge of SQL! See the last paragraph of this section for a possibly less tedious alternative to doing steps 1, 2, 6 and 7) :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 0:&#039;&#039;&#039; First of all, as always before big changes, backup all your data; that includes all files as well as exporting all database tables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1:&#039;&#039;&#039; If you want, you can convert the prefixes of all the tables in your database. This is especially useful if you would like to keep your 1.5 database in parallel to your 1.6/1.7 installation, at least for the transition period. It is best done using a script, here is one that worked pretty well as seen on [http://www.nilpo.com/2009/01/web-development/mysql-table-prefix-changer-tool/ Nilop]. &#039;&#039;&#039;Beware&#039;&#039;&#039;, however, that executing this script will stop your old site from working because after the prefix conversion, your old installation can&#039;t access the database anymore (it will still try to access the tables by their old prefix)! To enable it again, import the database export created in step 0 after the script has finished running. Joomla 1.5 usually has the prefix of &amp;quot;jos&amp;quot; which you can convert to the prefix &amp;quot;jml&amp;quot; or &amp;quot;j16&amp;quot;, for example. So using your ftp install the php converter script onto the root of your site. It should be at the url &#039;&#039;&#039;Mysite.com&#039;&#039;&#039;/prefix.php which all you need to do is fill in the database information. After this you have all the tables nicely converted to the new prefix.&lt;br /&gt;
&lt;br /&gt;
[[File:Changer.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
Notice in the following screen shot that the sql data is &amp;quot;jos&amp;quot;:&lt;br /&gt;
[[File:Tables.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
You want it converted to &amp;quot;jml&amp;quot; as seen here:&lt;br /&gt;
[[File:Prefix.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2:&#039;&#039;&#039; Export all the database tables you would like to use on your joomla 1.6+ site. Usually this is things like content and components.&lt;br /&gt;
&lt;br /&gt;
[[File:Export.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3:&#039;&#039;&#039; Uninstall your old site including the database, files, and directories that are associated with joomla. Or if you would rather just test the upgrade, skip step this step and create a new directory for your joomla 1.6+ site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4:&#039;&#039;&#039; Install the new joomla which is done through a ftp or a cpanel. If you have no database associated with it, install a new database and user.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5:&#039;&#039;&#039; Install the components and other extensions you would have used before onto your new joomla 1.6+ site. This is done first, in order for none of your old database tables to be overwritten later.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6: &#039;&#039;&#039; Convert the .sql file with your 1.5 tables to an sql file compatible with the version you want to upgrade to. That is a very tedious step - you&#039;ll have to check the database schema changes between the 1.5 you&#039;re upgrading from and the 1.6.+ version you&#039;re upgrading to, and adapt the sql file accordingly. &#039;&#039;&#039;Note:&#039;&#039;&#039; This step could use a more detailed description, if you have ever done a manual Joomla migration, please help and share your experiences and knowledge here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 7:&#039;&#039;&#039; Import the .sql file from your computer onto your joomla 1.6+ database. It is also possible that some extensions may have the possibility of changes to the sql tables when they upgraded there extension to joomla 1.6+. If this is the case, it is recommended that you ask the developer of that extension for help with knowing what changes to the sql were made.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keep in mind!&#039;&#039;&#039; It is possible for settings to be lost based on how the component stored the settings. From personal experience it worked just fine, but you may want to review the settings of each component.&lt;br /&gt;
&lt;br /&gt;
For an easier way to migrate articles, categories/sections, contacts, images, and users, be sure to use [http://extensions.joomla.org/extensions/migration-a-conversion/data-import-a-export/12816 J2XML] for exporting and [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/15807 J2XML Importer] for importing the data.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
* first check, if you have php5 at least. (use phpinfo() or /usr/bin/php --version)&lt;br /&gt;
* &#039;&#039;&#039;jUpgrade cannot download Joomla 1.6 package?&#039;&#039;&#039; - When the download fails (timeouts, javascript issues, etc) you can download it manually here: http://anonymous:@joomlacode.org/svn/joomla/development/branches/jupgrade/pack/joomla16.zip and put this file into your ROOT/tmp directory. Then, in the preferences of jUpgrade, you must set &#039;Skip Download&#039; to &#039;Yes&#039;. After that, run the upgrade again.&lt;br /&gt;
* &#039;&#039;&#039;Are you getting errors with the progress bar in Internet Explorer (Windows XP)?&#039;&#039;&#039; - Use Firefox: http://www.mozilla.com/en-US/firefox/&lt;br /&gt;
* Go through the Requirements and Before You Get Started sections above and double check everything!&lt;br /&gt;
* &#039;&#039;&#039;Report Bugs:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* &#039;&#039;&#039;Support:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
==How You can Contribute &amp;amp; Help==&lt;br /&gt;
Creating an extension as significant as jUpgrade requires an enormous amount of time and effort considering the major structural changes between Joomla 1.5 and 1.6. Add to this the fact that during each release of Joomla 1.6 betas, the extension would have to be modified to work with the new changes between releases, and all of a sudden it&#039;s too hard for any one person to complete in a short period of time (especially when you are not being paid).&lt;br /&gt;
With this being said, it&#039;s time to step up and make a difference, whether big or small. Have you profited from Joomla in the last year? Are you excited about the future of Joomla? Would you like to contribute back and show your gratitude? Now you can in this project!&lt;br /&gt;
We, as part of the Joomla community, are calling on the entire Joomla community to help out in whatever way you can. You don&#039;t have to be a master developer, just go through this tutorial on a test site and if you come across any bugs, report it. If you know how to fix it, create a patch for it. If you are a master developer, step up to the challenge.&lt;br /&gt;
* You can report bugs here: http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* You can volunteer and ask questions about volunteering here: http://www.matware.com.ar/forum/projects/jupgrade/volunteer-information.html&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62653</id>
		<title>Migrating from Joomla 1.5 to Joomla 1.6+</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62653"/>
		<updated>2011-10-18T11:29:09Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* How to Manually Upgrade Joomla */ db upgrade - slightly more detailed instructions / clarifications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With Joomla 1.6 officially released, there have been a lot of questions as to how to migrate or upgrade to Joomla 1.6 from 1.5. This guide will take you step-by-step through the general procedure of how to migrate to Joomla 1.6.&lt;br /&gt;
Please read through all the material as this is not a light undertaking.&lt;br /&gt;
=Before Upgrading=&lt;br /&gt;
Don&#039;t let the numerical closeness of 1.5 and 1.6, mislead you. Joomla 1.6 took three years to develop and has been a major undertaking. Countless hours have been spent by many volunteers from around the world to put it all together. Although much of the code is the same from Joomla 1.5, much of it has been written from the ground up, and the changes are comparable to the changes from Joomla 1.0 to 1.5.&lt;br /&gt;
Because the changes from Joomla 1.5 to 1.6 are so large and because of the massive effort put into getting Joomla 1.6 to where it is today, there is no core upgrade path, this is indeed a migration. In planned future releases of Joomla (which will be released every 6 months), such as Joomla 1.7, 1.8, etc, the changes from version to version will be more incremental and a core upgrade path is planned.&lt;br /&gt;
Now that Joomla 1.6 is finally here and stable, a community initiative led by the developers of Joomla is turning towards [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] (a 3rd party Joomla extension on the JED originally developed by Matias Aguirre) for help and to help. Many of Joomla&#039;s developers (who are all volunteers that freely contribute their time) are volunteering to put the finishing touches on [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade].&lt;br /&gt;
&lt;br /&gt;
[http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/11658 jUpgrade] allows you to migrate from Joomla 1.5 to 1.6.&lt;br /&gt;
Lets get started!&lt;br /&gt;
==Review the Requirements==&lt;br /&gt;
Please, please save yourself (and possibly your clients) a lot of headaches and make sure that your server (and in the case of jUpgrade, your browser too) is up for the task.  please review the [http://docs.joomla.org/Joomla_1.6_technical_requirements technical requirements for Joomla! 1.6].  Please review the [http://www.matware.com.ar/joomla/jupgrade.html requirements for jUpgrade] as well.&lt;br /&gt;
==Before You Get Started==&lt;br /&gt;
Before you get started, there are a few things that you are going to have to check and/or think about:&lt;br /&gt;
# Is your Joomla 1.5 version up to date? The most up-to-date version of Joomla 1.5 is 1.5.23. If your version is not up-to-date, upgrade to 1.5.23 before migrating, especially if you are running Joomla 1.5.11 or lower.&lt;br /&gt;
# Do all your extensions have Joomla 1.6 native versions? At the time of the writing of this tutorial there are 108 available on the JED. Please note that jUpgrade is not currently able to upgrade Joomla 3rd party extensions, so those will have to be done via their respective upgrade procedures. This is however a work in progress.&lt;br /&gt;
# Have you modified any core files? Any changes that you have made to core files in Joomla will be lost so please be forewarned.&lt;br /&gt;
# Is there a Joomla 1.6 compatible template available from your template provider? If not, do you feel comfortable making the changes yourself? There are a couple good resources:&lt;br /&gt;
## [http://community.joomla.org/blogs/community/1257-16-templates.html Chad Windnagle&#039;s Joomla Community blog]&lt;br /&gt;
## [http://www.slideshare.net/chrisdavenport/template-changes-for-joomla-16 Chris Davenport&#039;s &amp;quot;Template Changes for Joomla 1.6&amp;quot; presentation]&lt;br /&gt;
## [[Upgrading a Joomla 1.5 template to Joomla 1.6|Joomla&#039;s Docs Template Tutorial]] Please note that although jUpgrade is not able to currently upgrade templates, the developers are working hard at implementing the feature.&lt;br /&gt;
# Is your language pack available in Joomla 1.6?  [http://community.joomla.org/translations/joomla-16-translations.html Find your Joomla1 1.6 Translation].&lt;br /&gt;
# Do you have folder or file permissions issues in your Joomla 1.5 installation?&lt;br /&gt;
# Do you NEED to migrate to Joomla 1.6? Joomla 1.5 is powerful and very mature. For many people there is not a need to rush into Joomla 1.6. Joomla will continue to support Joomla 1.5 for at least another year and three months, releasing security updates and bug squashing updates when needed.&lt;br /&gt;
#: The two main features of Joomla 1.6 that makes it superior to Joomla 1.5 are: Access Control List (ACL) and nested categories. Gone are the days of simply having guests, registered users, authors, and editors, without being able to specify what they can and can&#039;t do in the frontend. Also, with 1.6 you can have more flexibility of organizing (and therefore displaying) your content with nicely organized categories within categories. No more being restricted to the section &amp;gt;&amp;gt; category structure. Those are all great things to have (especially the ACL), however, for many 1.5 users, it isn&#039;t needed. The main point is to decide for yourself.&lt;br /&gt;
#: For a massive list of changes from Joomla 1.5 to Joomla 1.6, please see [[What&#039;s new in Joomla 1.6]].&lt;br /&gt;
&lt;br /&gt;
==Backup, Backup, Backup==&lt;br /&gt;
Skipping this part is perhaps the biggest mistake you can make. If you have a proper backup (or several) you can always revert back if needed. However, if you don&#039;t properly backup your site and something goes wrong, you are going to waste a lot of valuable time, and sometimes a lot money, getting things back to the way they were. So please backup!&lt;br /&gt;
&lt;br /&gt;
==== Using Akeeba to backup ====&lt;br /&gt;
&lt;br /&gt;
* Akeeba Backup produces a .jpa file&lt;br /&gt;
&lt;br /&gt;
* The .jpa file contains all the folders/files and database files.&lt;br /&gt;
&lt;br /&gt;
* The .jpa file also contains an installer&lt;br /&gt;
&lt;br /&gt;
* Kickstart.php (from Akeeba) unpacks the .jpa file&lt;br /&gt;
&lt;br /&gt;
* You then run the installer and install your site like a Joomla install.&lt;br /&gt;
&lt;br /&gt;
* The installer has an option to change the configuration for restoring to a different location &lt;br /&gt;
&lt;br /&gt;
After you create the Database for your Joomla download and install Akeeba, it can be download from [http://extensions.joomla.org/extensions/access-a-security/site-security/backup/1606 Joomla extension directory].  There is a link to full instructions there as well.&lt;br /&gt;
&lt;br /&gt;
=Upgrading=&lt;br /&gt;
==Download jUpgrade==&lt;br /&gt;
Download the [http://www.matware.com.ar/downloads/joomla/jupgrade.html latest version of jUpgrade]. It is highly advisible, especially when development still is progressing, to always use the latest available version!&lt;br /&gt;
&lt;br /&gt;
==Optional Testing Environment==&lt;br /&gt;
If you are really nervous by this point and your heart is beating fast, then you should probably set up a testing environment.&lt;br /&gt;
&lt;br /&gt;
=== Install XAMPP ===&lt;br /&gt;
XAMPP is an easy-to-install package that bundles the Apache web server, PHP, XDEBUG, and the MySql database. This allows you to create the environment you need to run Joomla! on your local machine. The latest version of XAMPP is available at [http://www.apachefriends.org/en/xampp.html the XAMPP web site]. Downloads are available for Linux, Windows, Mac OS X and Solaris. Download the package for your platform. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important Note Regarding XAMPP and Skype:&#039;&#039; Apache and Skype both use port 80 as an alternative for incoming connections. If you use Skype, go into the Tools-Options-Advanced-Connection panel and deselect the &amp;quot;Use 80 and 443 as alternatives for incoming connections&amp;quot; option. If Apache starts as a service, it will take 80 before Skype starts and you will not see a problem. But, to be safe, disable the option in Skype.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Update&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;As of August 5, 2010, XDebug has been updated (to version 2.1) which fixes some important bugs (for example, watching local variables for nesting functions). The latest XAMPP package (1.7.3) now includes this new version of XDebug. If you just want to update XDebug, you can download the latest module from [http://www.xdebug.org]. There is a handy website that tells you which XDebug binary you need, depending on your phpinfo() information [http://xdebug.org/find-binary.php here]. To use it, you just copy the output of your phpinfo() display and paste it into the form on the site.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Installation on Windows =====&lt;br /&gt;
&lt;br /&gt;
Installation for Windows is very simple. You can use the XAMPP installer executable (for example, &amp;quot;xampp-win32-1.7.3-installer.exe&amp;quot;). Detailed installation instructions for Windows are available [http://www.apachefriends.org/en/xampp-windows.html here]. &lt;br /&gt;
&lt;br /&gt;
For Windows, it is recommended to install XAMPP in &amp;quot;c:\xampp&amp;quot; (not in &amp;quot;c:\program files&amp;quot;). If you do this, your Joomla! (and any other local web site folders) will go into the folder &amp;quot;c:\xampp\htdocs&amp;quot;. (By convention, all web content goes under the &amp;quot;htdocs&amp;quot; folder.)&lt;br /&gt;
&lt;br /&gt;
If you have multiple http servers (like IIS) you can change the xampp listening port. In &amp;lt;xamppDir&amp;gt;\apache\conf\httpd.conf, modify the line Listen 80 to Listen [portnumber] (ex: &amp;quot;Listen 8080&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
===== Installation on Linux =====&lt;br /&gt;
&lt;br /&gt;
Install xammp&lt;br /&gt;
Open Terminal and enter: &lt;br /&gt;
 sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt&lt;br /&gt;
(replace &#039;&#039;xampp-linux-1.7.3a.tar.gz&#039;&#039; with the version of xammp you downloaded).&lt;br /&gt;
It has been reported that the MYSQL database of xampp 1.7.4 does not work with Joomla 1.5.22&lt;br /&gt;
&lt;br /&gt;
This installs ... Apache2, mysql and php5 as well as an ftp server.&lt;br /&gt;
 &lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp start&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
 &#039;&#039;sudo /opt/lampp/lampp stop&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
starts/stops all the services&lt;br /&gt;
&lt;br /&gt;
==== Test your xammp localhost server ====&lt;br /&gt;
Open your Browser and point it to&lt;br /&gt;
 http://localhost&lt;br /&gt;
The index.php will redirect to&lt;br /&gt;
 http://localhost/xammp&lt;br /&gt;
&lt;br /&gt;
There you will find instructions on how to change default usernames/passwords.  On a PC that does not serve files to the Internet or LAN then changing the defaults is personal choice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install jUpgrade ==&lt;br /&gt;
Go to your Joomla backend. e.g. www.yoursite.com/administrator&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Extensions&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Install/Uninstall&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Browse&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Select com_jupgrade&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;Upload File &amp;amp; Install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:browse.png|Browse and Upload Component]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Installjupgrade2.png|alt=Installing jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
== Enable Mootools Upgrade Plugin ==&lt;br /&gt;
# Go to Extensions | Plugin Manager&lt;br /&gt;
# Search for &amp;quot;System - Mootools Upgrade&amp;quot;&lt;br /&gt;
# Enable the plugin&lt;br /&gt;
It is important that this plugin is installed and that it has been set to enabled, as the proper functioning of jUpgrade depends on it.&lt;br /&gt;
&lt;br /&gt;
== Configure Options ==&lt;br /&gt;
As of jUpgrade version 1.1.1, support is present to migrate to Joomla! 1.6, Joomla! 1.7, and an old Molajo build.  As well, for jUpgrade to be successful, you must configure your current table prefix prior to beginning the migration.  The following are the options that can be configured with jUpgrade:&lt;br /&gt;
&lt;br /&gt;
Global:&lt;br /&gt;
* Distribution - Select whether to migrate to Joomla! 1.6, 1.7, or Molajo&lt;br /&gt;
* Prefix for old database - Your current table prefix&lt;br /&gt;
* Prefix for new database - Your selected table prefix for your migrated site&lt;br /&gt;
&lt;br /&gt;
Skips:&lt;br /&gt;
* Skip checks - Skip pre-migration checks&lt;br /&gt;
* Skip download - Skip downloading the package (Note: Must have a package already downloaded to your temp folder or set this and Skip Decompress if set to yes)&lt;br /&gt;
* Skip decompress - Skip decompressing the downloaded package (Note: Must have a package already downloaded and decompressed to site_root/jupgrade if set to Yes)&lt;br /&gt;
&lt;br /&gt;
Templates:&lt;br /&gt;
* Keep original positions - Keep the currently defined positions for modules&lt;br /&gt;
&lt;br /&gt;
Debug:&lt;br /&gt;
* Enable Debug - Enable this to have messages displayed below the migration process concerning the progress, helpful if having issues&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgrade_options.png|alt=jUpgrade 1.1.1 Options]]&lt;br /&gt;
&lt;br /&gt;
== Migration ==&lt;br /&gt;
&#039;&#039;&#039;Components&#039;&#039;&#039; &amp;gt;&amp;gt; &#039;&#039;&#039;jUpgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Accessjupgrade.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Start Upgrade&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Startjupgrade.png|alt=Start jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Runjupgrade.png|alt=Run jUpgrade]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do not exit the screen&#039;&#039;&#039; until everything has finished loading. Scroll down to check if finished.&lt;br /&gt;
&lt;br /&gt;
[[Image:Jupgradefinished.png|alt=jUpgrade Finished]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Success!!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Please note that jUpgrade currently does not migrate templates, only default templates.&lt;br /&gt;
&lt;br /&gt;
==Behind the Scenes==&lt;br /&gt;
As explained in the background information, the changes from Joomla 1.5 and 1.6 are quite significant.  The fact that jUpgrade creates a new Joomla 1.6 installation for us is, in my opinion, pure genius. If the migration process was not 100% successful, your Joomla 1.5 is still perfectly intact and none of your users are affected. You have an opportunity to check out your site both in the frontend and the backend to make sure everything is up to par.  So what actually happens? jUpgrade downloads the latest version of Joomla 1.6 for you to the jupgrade directory (which it creates) in the root folder of your Joomla 1.5 installation. It then extracts all the files from the download. Once extraction has completed, jUpgrade installs Joomla 1.6 and then proceeds to migrate your old database to the new Joomla 1.6 database which it has created.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
==Check Your Joomla! 1.6==&lt;br /&gt;
Please do a full site review of your Joomla 1.6 installation and make sure everything is set up properly.&lt;br /&gt;
Your Joomla 1.6 site will be installed in www.mysites.com/jupgrade assuming that your Joomla 1.5 installation is in your html root.&lt;br /&gt;
Here is a general checklist to check:&lt;br /&gt;
* Banners&lt;br /&gt;
* Categories&lt;br /&gt;
* Contacts&lt;br /&gt;
* Content&lt;br /&gt;
* Menus&lt;br /&gt;
* Modules&lt;br /&gt;
* Newsfeeds&lt;br /&gt;
* Users&lt;br /&gt;
* Weblinks&lt;br /&gt;
* Templates - Work is currently being done on the template upgrade feature of jUpdate and it is not yet fully functional. Your module positions may have to be adjusted in module manager.&lt;br /&gt;
==Backup Joomla! 1.6==&lt;br /&gt;
If everything looks good to go, then let&#039;s backup the new Joomla 1.6 installation.&lt;br /&gt;
==Overview of the Rest of the Process==&lt;br /&gt;
Quick overview of what we are going to try to do now:&lt;br /&gt;
# Relocate our Joomla 1.5 installation to a subfolder as a &amp;quot;just in case&amp;quot;.&lt;br /&gt;
# Relocate our Joomla 1.6 installation to the html folder.&lt;br /&gt;
&#039;It should happen in this order&#039; If you do it in reverse order, the Joomla 1.6 files will get mixed with the Joomla 1.5 files (many of 1.5 files will be overwritten) and you will have a big mess!  Your site will likely still work, but it&#039;s a security ticking time bomb waiting to go off.&lt;br /&gt;
&lt;br /&gt;
=Going Live=&lt;br /&gt;
Next log onto your host&#039;s file manager (e.g. cPanel, Plesk, etc) or an FTP Client, however, preferably a file manager.&lt;br /&gt;
The general procedure is (it should take about 30 seconds if you review the steps before you start):&lt;br /&gt;
# Create a subfolder (e.g. myoldsite) for the Joomla 1.5 installation in your html root, e.g. public_html/myoldsite&lt;br /&gt;
# Select all the folders (***except the jupgrade folder***) and files in the html root and move them into the Joomla 1.5 subfolder (e.g. myoldsite)&lt;br /&gt;
# Select all the folders and files in the jupgrade folder and move them to the html root&lt;br /&gt;
# Double check the frontend and backend&lt;br /&gt;
&lt;br /&gt;
=How to Manually Upgrade Joomla=&lt;br /&gt;
If Jupgrade did not work out for you like many of us, don&#039;t worry there is an alternative method to upgrading. Unfortunately it is indeed rather tedious (especially step 6), but works perhaps 99% of the time. So just like the Jupgrade method, you will want to backup your database just in case. Before upgrading you should check to make sure every extension you want is joomla 1.6/1.7 compatible. Also back up your directory files just in case and keep a list of the extensions you used.&lt;br /&gt;
&lt;br /&gt;
Now onto the upgrade:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 0:&#039;&#039;&#039; First of all, as always before big changes, backup all your data; that includes all files as well as exporting all database tables.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1:&#039;&#039;&#039; If you want, you can convert the prefixes of all the tables in your database. This is especially useful if you would like to keep your 1.5 database in parallel to your 1.6/1.7 installation, at least for the transition period. It is best done using a script, here is one that worked pretty well as seen on [http://www.nilpo.com/2009/01/web-development/mysql-table-prefix-changer-tool/ Nilop]. Beware, however, that executing this script will stop your old site from working because after the prefix conversion, your old installation can&#039;t access the database anymore (it will still try to access the tables by their old prefix)! To enable it again, import the database export created in step 0 after the script has finished running. Joomla 1.5 usually has the prefix of &amp;quot;jos&amp;quot; which you can convert to the prefix &amp;quot;jml&amp;quot; or &amp;quot;j16&amp;quot;, for example. So using your ftp install the php converter script onto the root of your site. It should be at the url &#039;&#039;&#039;Mysite.com&#039;&#039;&#039;/prefix.php which all you need to do is fill in the database information. After this you have all the tables nicely converted to the new prefix.&lt;br /&gt;
&lt;br /&gt;
[[File:Changer.JPG|center]]&lt;br /&gt;
&lt;br /&gt;
Notice in the following screen shot that the sql data is &amp;quot;jos&amp;quot;:&lt;br /&gt;
[[File:Tables.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
You want it converted to &amp;quot;jml&amp;quot; as seen here:&lt;br /&gt;
[[File:Prefix.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2:&#039;&#039;&#039; Export all the database tables you would like to use on your joomla 1.6+ site. Usually this is things like content and components.&lt;br /&gt;
&lt;br /&gt;
[[File:Export.JPG|thumb|center|500px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3:&#039;&#039;&#039; Uninstall your old site including the database, files, and directories that are associated with joomla. Or if you would rather just test the upgrade, skip step this step and create a new directory for your joomla 1.6+ site.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4:&#039;&#039;&#039; Install the new joomla which is done through a ftp or a cpanel. If you have no database associated with it, install a new database and user.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5:&#039;&#039;&#039; Install the components and other extensions you would have used before onto your new joomla 1.6+ site. This is done first in order for non of your old database tables to be over written later.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6: &#039;&#039;&#039; Convert the .sql file with your 1.5 tables to an sql file compatible with the version you want to upgrade to. That is a very tedious step - you&#039;ll have to check the database schema changes between the 1.5 you&#039;re upgrading from and the 1.6.+ version you&#039;re upgrading to, and adapt the sql file accordingly. &#039;&#039;&#039;Note:&#039;&#039;&#039; This step could use a more detailed description, if you have ever done a manual Joomla migration, please help and share your experiences and knowledge here!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 7:&#039;&#039;&#039; Import the .sql file from your computer onto your joomla 1.6+ database. It is also possible that some extensions may have the possibility of changes to the sql tables when they upgraded there extension to joomla 1.6+. If this is the case, it is recommended that you ask the developer of that extension for help with knowing what changes to the sql were made.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keep in mind!&#039;&#039;&#039; It is possible for settings to be lost based on how the component stored the settings. From personal experience it worked just fine, but you may want to review the settings of each component.&lt;br /&gt;
&lt;br /&gt;
For an easier way to migrate articles, categories/sections, contacts, images, and users, be sure to use [http://extensions.joomla.org/extensions/migration-a-conversion/data-import-a-export/12816 J2XML] for exporting and [http://extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/15807 J2XML Importer] for importing the data.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
* first check, if you have php5 at least. (use phpinfo() or /usr/bin/php --version)&lt;br /&gt;
* &#039;&#039;&#039;jUpgrade cannot download Joomla 1.6 package?&#039;&#039;&#039; - When the download fails (timeouts, javascript issues, etc) you can download it manually here: http://anonymous:@joomlacode.org/svn/joomla/development/branches/jupgrade/pack/joomla16.zip and put this file into your ROOT/tmp directory. Then, in the preferences of jUpgrade, you must set &#039;Skip Download&#039; to &#039;Yes&#039;. After that, run the upgrade again.&lt;br /&gt;
* &#039;&#039;&#039;Are you getting errors with the progress bar in Internet Explorer (Windows XP)?&#039;&#039;&#039; - Use Firefox: http://www.mozilla.com/en-US/firefox/&lt;br /&gt;
* Go through the Requirements and Before You Get Started sections above and double check everything!&lt;br /&gt;
* &#039;&#039;&#039;Report Bugs:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* &#039;&#039;&#039;Support:&#039;&#039;&#039; http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
==How You can Contribute &amp;amp; Help==&lt;br /&gt;
Creating an extension as significant as jUpgrade requires an enormous amount of time and effort considering the major structural changes between Joomla 1.5 and 1.6. Add to this the fact that during each release of Joomla 1.6 betas, the extension would have to be modified to work with the new changes between releases, and all of a sudden it&#039;s too hard for any one person to complete in a short period of time (especially when you are not being paid).&lt;br /&gt;
With this being said, it&#039;s time to step up and make a difference, whether big or small. Have you profited from Joomla in the last year? Are you excited about the future of Joomla? Would you like to contribute back and show your gratitude? Now you can in this project!&lt;br /&gt;
We, as part of the Joomla community, are calling on the entire Joomla community to help out in whatever way you can. You don&#039;t have to be a master developer, just go through this tutorial on a test site and if you come across any bugs, report it. If you know how to fix it, create a patch for it. If you are a master developer, step up to the challenge.&lt;br /&gt;
* You can report bugs here: http://matware.com.ar/foros/jupgrade.html&lt;br /&gt;
* You can volunteer and ask questions about volunteering here: http://www.matware.com.ar/forum/projects/jupgrade/volunteer-information.html&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Migration]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62652</id>
		<title>Talk:Migrating from Joomla 1.5 to Joomla 1.6+</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Migrating_from_Joomla_1.5_to_Joomla_1.6%2B&amp;diff=62652"/>
		<updated>2011-10-18T11:00:15Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: note on manual database migration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please add PHP check to the update script. If version==4, then prompt &amp;quot;Please upgrade your PHP&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Otherwise the error message is &amp;quot;Fatal error: Only variables can be passed by reference in /var/www/html/administrator/components/com_jupgrade/views/cpanel/view.html.php on line 35&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- THANKS -- [[User:MichaelJanich|MichaelJanich]] 06:41, 19 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== install mootools plugin, switch to a default template ==&lt;br /&gt;
&lt;br /&gt;
you might want to add two requirements:&lt;br /&gt;
&lt;br /&gt;
# install the mootools plugin&lt;br /&gt;
# switch to a default template first&lt;br /&gt;
&lt;br /&gt;
Without mootools the installation process got stuck (from 1.5.2), using a custom made template, too. --[[User:Marek|Marek]] 17:27, 7 February 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== mootols ===&lt;br /&gt;
&lt;br /&gt;
I added the install the mootools plugin section (without screenshots) --[[User:Weissollo|Weissollo]] 22:09, 9 February 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added a section that describes how to manually upgrade joomla. If anyone has anything to add to it, please feel free.&lt;br /&gt;
&lt;br /&gt;
:To the previous poster here: I don&#039;t want to play down your efforts - but as far as I can tell, the database part of the migration definitely does NOT work that way. First off, there&#039;s actually no need to change the prefix; and second (and far more importantly): you can&#039;t simply import a 1.5 table dump into 1.6 tables! They have completely different structures; I can&#039;t really tell for 1.6 at the moment, but 1.7 e.g. has no name column in article anymore, but an asset_id... and many more changes to the columns! So you&#039;ll definitely need some kind of migration script here! Since I did the migration via JUpgrade, I don&#039;t have any working manual upgrade instructions at hand either at the moment, so I unfortunately can&#039;t contribute much constructively here, but I&#039;ll change the section so that it becomes clear that it still needs work to be complete. [[User:Munchkin|Munchkin]] 06:00, 18 October 2011 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Supporting_SEF_URLs_in_your_component&amp;diff=61806</id>
		<title>J2.5 talk:Supporting SEF URLs in your component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Supporting_SEF_URLs_in_your_component&amp;diff=61806"/>
		<updated>2011-09-06T09:57:53Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: /* BuildRoute not working as expected */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi there,&lt;br /&gt;
for me the following statement does not really makes sense:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function check()&lt;br /&gt;
{&lt;br /&gt;
       jimport( &#039;joomla.filter.output&#039; );&lt;br /&gt;
       $alias = JFilterOutput::stringURLSafe( $this-­&amp;gt;title );&lt;br /&gt;
       if (empty( $this-­&amp;gt;alias ) || $this-­&amp;gt;alias === $alias ) {&lt;br /&gt;
               $this-&amp;gt;alias = $alias;&lt;br /&gt;
       }&lt;br /&gt;
       /* All your other checks */&lt;br /&gt;
       return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As I read it, the filtered $alias is only asigned to the table property, if $table-&amp;gt;alias is empty OR $table-&amp;gt;alias is exactly the same. So in case $this-&amp;gt;alias is not empty, the property will not even be checked or reasigned.&lt;br /&gt;
&lt;br /&gt;
What I find more logical is the method used in the Joomla components&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(empty($this-&amp;gt;alias)) {&lt;br /&gt;
	$this-&amp;gt;alias = $this-&amp;gt;title;&lt;br /&gt;
}&lt;br /&gt;
$this-&amp;gt;alias = JFilterOutput::stringURLSafe($this-&amp;gt;alias);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is this supposed to mean ==&lt;br /&gt;
&lt;br /&gt;
This sentence is confusing me quite a bit:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The alias is used in the URL instead of the title (the title is the text you want to have in the url).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Is this a mistake, or do I just not understand. If so, could anybody explain?&lt;br /&gt;
&lt;br /&gt;
== Explaination does not match with the example ==&lt;br /&gt;
&lt;br /&gt;
The following sentence explains the example: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;In the function [Componentname]BuildRoute we arranged the items in the $query array in a specific sequence. This means that in this example the view is first, the catid is second and the id is third in the array.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the example this refers to, the route has only two segments. &amp;quot;view&amp;quot; and &amp;quot;id&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BuildRoute not working as expected ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m having trouble getting the JRoute::_ function working; it should call the [extensionname]BuildRoute function, right? It seems it currently doesn&#039;t do that at my system (1.7). Were there maybe any changes between Joomla 1.5 and Joomla 1.7? Any hints?&lt;br /&gt;
[[User:Munchkin|Munchkin]] 04:57, 6 September 2011 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Supporting_SEF_URLs_in_your_component&amp;diff=61805</id>
		<title>J2.5 talk:Supporting SEF URLs in your component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5_talk:Supporting_SEF_URLs_in_your_component&amp;diff=61805"/>
		<updated>2011-09-06T09:57:20Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: JRoute::_/BuildRoute problem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi there,&lt;br /&gt;
for me the following statement does not really makes sense:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function check()&lt;br /&gt;
{&lt;br /&gt;
       jimport( &#039;joomla.filter.output&#039; );&lt;br /&gt;
       $alias = JFilterOutput::stringURLSafe( $this-­&amp;gt;title );&lt;br /&gt;
       if (empty( $this-­&amp;gt;alias ) || $this-­&amp;gt;alias === $alias ) {&lt;br /&gt;
               $this-&amp;gt;alias = $alias;&lt;br /&gt;
       }&lt;br /&gt;
       /* All your other checks */&lt;br /&gt;
       return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As I read it, the filtered $alias is only asigned to the table property, if $table-&amp;gt;alias is empty OR $table-&amp;gt;alias is exactly the same. So in case $this-&amp;gt;alias is not empty, the property will not even be checked or reasigned.&lt;br /&gt;
&lt;br /&gt;
What I find more logical is the method used in the Joomla components&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(empty($this-&amp;gt;alias)) {&lt;br /&gt;
	$this-&amp;gt;alias = $this-&amp;gt;title;&lt;br /&gt;
}&lt;br /&gt;
$this-&amp;gt;alias = JFilterOutput::stringURLSafe($this-&amp;gt;alias);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is this supposed to mean ==&lt;br /&gt;
&lt;br /&gt;
This sentence is confusing me quite a bit:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The alias is used in the URL instead of the title (the title is the text you want to have in the url).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Is this a mistake, or do I just not understand. If so, could anybody explain?&lt;br /&gt;
&lt;br /&gt;
== Explaination does not match with the example ==&lt;br /&gt;
&lt;br /&gt;
The following sentence explains the example: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;In the function [Componentname]BuildRoute we arranged the items in the $query array in a specific sequence. This means that in this example the view is first, the catid is second and the id is third in the array.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the example this refers to, the route has only two segments. &amp;quot;view&amp;quot; and &amp;quot;id&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BuildRoute not working as expected ==&lt;br /&gt;
&lt;br /&gt;
I&#039;m having trouble getting the JRoute::_ function working; it should call the [extensionname]BuildRoute function, right? It seems it currently doesn&#039;t do that at my system (1.7). Any hints?&lt;br /&gt;
[[User:Munchkin|Munchkin]] 04:57, 6 September 2011 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5_talk:Using_the_editor_in_a_component&amp;diff=61748</id>
		<title>J1.5 talk:Using the editor in a component</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5_talk:Using_the_editor_in_a_component&amp;diff=61748"/>
		<updated>2011-09-02T12:25:48Z</updated>

		<summary type="html">&lt;p&gt;Munchkin: Documenting some problems while following this HowTo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I used a test site and implemented the editor in the frontend.  The edit and display functions worked fine however the Save and Cancel do not execute anything.  The Save and Cancel buttons that have been added to the form call a javascript function submitbutton.  The submitbutton is executed however the documentation states that the editor&#039;s save method will trigger the save function in the controller which in turn calls the model&#039;s store method.  This is not actually true.  I am new to Joomla development so I thought maybe I typed it in wrong so I downloaded the completed example and it does not work either.  The editor&#039;s save method does not trigger the controller which I believe is necessary.  SO I think in order to make it work you need to trigger the controller directly from the button and bypass the javascript -submitbutton. I haven&#039;t tried it yet so if there any other suggestions.  That would be great.&lt;br /&gt;
&lt;br /&gt;
== The tutorial is not complete ==&lt;br /&gt;
&lt;br /&gt;
Well what is happening is the following. The person who wrote the tutorial forgot one thing. &lt;br /&gt;
&lt;br /&gt;
In order to use the proposed javascripts the library file /includes/js/joomla.javascript.js had to be included. This is standard in de Joomla backend but not in many frontend templates. &lt;br /&gt;
&lt;br /&gt;
You have to manually add the following. This can for example be done view.html.php&lt;br /&gt;
$document =&amp;amp; JFactory::getDocument();&lt;br /&gt;
$document-&amp;gt;addScript(&#039;includes/js/joomla.javascript.js&#039;);&lt;br /&gt;
&lt;br /&gt;
I have modified the tutorial but I at this point I don&#039;t know how to replace the included download files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible Problems/Pitfalls ==&lt;br /&gt;
When following this HowTo, I encountered these problems:&lt;br /&gt;
* The string &amp;quot;description&amp;quot; for one reason or the other doesn&#039;t seem to work as editor name. In the javascript created by the editor component for saving the editor content, using &amp;quot;description&amp;quot; leads to a javascript error (tinymce.get(&#039;description&#039;) is undefined). Another, (shorter?) name (desc) worked fine. I didn&#039;t check whether it was the length, or if the string itself has some significance...&lt;br /&gt;
* The user I tried it with first had CodeMirror configured as its default editor; with that it didn&#039;t work, I wrote about what the result looks like here (http://forum.joomla.org/viewtopic.php?f=620&amp;amp;t=644689&amp;amp;p=2604202#p2604202)&lt;br /&gt;
* My component is running under Joomla 1.7, here the script (includes/js/joomla.javascript.js) include doesn&#039;t seem to be necessary anymore&lt;br /&gt;
* The input filtering stuff doesn&#039;t work the way I expected; when doing the following, the database afterwards still holds an encoded string (e.g. &amp;amp;gt; for &amp;gt;), instead of the &amp;quot;raw&amp;quot; html string, meaning I have to convert it back when displaying it (funnily enough I can just pass that string to the editor and it will show it formatted again, so it seems to do the back-converting by itself)&lt;br /&gt;
 $post[&#039;content&#039;] = JRequest::getVar(&#039;content&#039;, &#039;&#039;, &#039;post&#039;, &#039;string&#039;, JREQUEST_ALLOWRAW);&lt;br /&gt;
[[User:Munchkin|Munchkin]] 07:25, 2 September 2011 (CDT)&lt;/div&gt;</summary>
		<author><name>Munchkin</name></author>
	</entry>
</feed>