<?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=Efduggan</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=Efduggan"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Efduggan"/>
	<updated>2026-07-10T02:49:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Online_Poker_Strategi-3_Golden_Rules_Untuk_Winning_Online_Poker&amp;diff=705802</id>
		<title>Talk:Online Poker Strategi-3 Golden Rules Untuk Winning Online Poker</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Online_Poker_Strategi-3_Golden_Rules_Untuk_Winning_Online_Poker&amp;diff=705802"/>
		<updated>2020-07-31T19:40:20Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Created page with &amp;quot;Is there a better way to keep this type of spam from appearing. This is the 4th page I’ve “revised” in the week.!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is there a better way to keep this type of spam from appearing. This is the 4th page I’ve “revised” in the week.!&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Dengan_Cara_Apa_Turnamen_Poker_Freeroll_Merupakan_Pilihan_Ideal_Untuk_Berlagak_Poker_Online_Gratis&amp;diff=704509</id>
		<title>Talk:Dengan Cara Apa Turnamen Poker Freeroll Merupakan Pilihan Ideal Untuk Berlagak Poker Online Gratis</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Dengan_Cara_Apa_Turnamen_Poker_Freeroll_Merupakan_Pilihan_Ideal_Untuk_Berlagak_Poker_Online_Gratis&amp;diff=704509"/>
		<updated>2020-07-29T16:26:39Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Created page with &amp;quot;Spam! - delete please.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Spam! - delete please.&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Buletin_Tentang_Balkon_Poker_Online&amp;diff=699991</id>
		<title>Talk:Buletin Tentang Balkon Poker Online</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Buletin_Tentang_Balkon_Poker_Online&amp;diff=699991"/>
		<updated>2020-07-24T02:08:46Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Created page with &amp;quot;seems to be spam!&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;seems to be spam!&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Range_form_field_type&amp;diff=647943</id>
		<title>Range form field type</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Range_form_field_type&amp;diff=647943"/>
		<updated>2020-02-19T18:10:14Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Fixed description of the example to cover the full range and explains the initial/default value&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The ‘&#039;&#039;range&#039;&#039;&#039; form field type provides a horizontal slider for numeric input. While the default value can be set, there is no indication of the actual value being chosen, just the position of the slider’s thumb. Available from {{JVer|3.2}} &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; (mandatory) must be &#039;&#039;range&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (mandatory) is the unique name of the field.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;label&#039;&#039;&#039; (optional) (translatable) is the descriptive title of the field, and will appear in the pop-up when hovering over label as well.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;default&#039;&#039;&#039; (optional) (translatable) is the initial default value.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;class&#039;&#039;&#039; (optional) is a CSS class name for the HTML form field.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;min&#039;&#039;&#039; (optional)  this value is the lowest that can be chosen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;max&#039;&#039;&#039; (optional) this value is the highest that can be chosen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;step&#039;&#039;&#039; (optional) if user click up/down arrow current value will change by this attribute (this attribute value will be added or subtracted to current field value).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;required&#039;&#039;&#039; (optional) should the user be required to enter data in this field?&lt;br /&gt;
&lt;br /&gt;
Example XML field definition which would create a slider having the initial value of 0, with possibility to choose values between -0.5 and 0.5. The slider’s value changes by 0.1 as the slider is moved left or right.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;field name=&amp;quot;myrange&amp;quot; type=&amp;quot;range&amp;quot; default=&amp;quot;0&amp;quot; label=&amp;quot;Range from -0.5 to 0.5 step 0.1&amp;quot; description=&amp;quot;&amp;quot; min=&amp;quot;-0.5&amp;quot; max=&amp;quot;0.5&amp;quot; step=&amp;quot;0.1&amp;quot; /&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== See also === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Standard form field types]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=JDOC_talk:Joomla_4_Tutorials_Project&amp;diff=645892</id>
		<title>JDOC talk:Joomla 4 Tutorials Project</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=JDOC_talk:Joomla_4_Tutorials_Project&amp;diff=645892"/>
		<updated>2020-01-23T23:56:49Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:GregJPreece|GregJPreece]] ([[User talk:GregJPreece|talk]]) 21:01, 3 January 2020 (CST) MVC Component Tutorial&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been considering rewriting the component tutorial for Joomla 3.x, as many elements of it need modernising, and I really don&#039;t like the way it still uses legacy class names. If J4 is on the way and needs a similar tutorial, it seems sensible to start there.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Yes, please do. I’ve been holding off working my way through it as it seamed dated to a degree.&lt;br /&gt;
&lt;br /&gt;
If you want a reviewer for the changes, I’d be up for it.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Cool, thank you. I&#039;ll get started soon. My first component is making its way into the JED right now, so I&#039;ll be working on J4 compatibility for that in the next release. I&#039;ll write the docs here as I go.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
Great - I look forward to helping out!&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=JDOC_talk:Joomla_4_Tutorials_Project&amp;diff=645443</id>
		<title>JDOC talk:Joomla 4 Tutorials Project</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=JDOC_talk:Joomla_4_Tutorials_Project&amp;diff=645443"/>
		<updated>2020-01-05T19:45:12Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[User:GregJPreece|GregJPreece]] ([[User talk:GregJPreece|talk]]) 21:01, 3 January 2020 (CST) MVC Component Tutorial&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been considering rewriting the component tutorial for Joomla 3.x, as many elements of it need modernising, and I really don&#039;t like the way it still uses legacy class names. If J4 is on the way and needs a similar tutorial, it seems sensible to start there.&lt;br /&gt;
&lt;br /&gt;
Yes, please do. I’ve been holding off working my way through it as it seamed dated to a degree.&lt;br /&gt;
&lt;br /&gt;
If you want a reviewer for the changes, I’d be up for it.&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User_talk:GregJPreece&amp;diff=640726</id>
		<title>User talk:GregJPreece</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User_talk:GregJPreece&amp;diff=640726"/>
		<updated>2019-10-24T18:46:03Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Created page with &amp;quot;The last code example looks to be off in that it suggests the toSQL function would return a Unix second string. I’m assuming it’s a small typo. Unfortunately I don’t cur...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The last code example looks to be off in that it suggests the toSQL function would return a Unix second string. I’m assuming it’s a small typo. Unfortunately I don’t currently have the ability to fix it yet, and hopefully this entry is a reasonable way of addressing the issue.&lt;br /&gt;
	&lt;br /&gt;
=== Outputting Dates as Unix Timestamps ===&lt;br /&gt;
	&lt;br /&gt;
A Unix timestamp is expressed as the number of seconds that have passed since the Unix Epoch (the first second of Jan 1st 1970).&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
$date = new Date(&#039;20121201T152000Z&#039;);&lt;br /&gt;
	&lt;br /&gt;
$date-&amp;gt;toSQL(); // 1354375200&lt;br /&gt;
 	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from https://docs.joomla.org/index.php?title=How_to_use_JDate&amp;amp;diff=640698&amp;amp;oldid=635076&lt;br /&gt;
 	&lt;br /&gt;
[[User:Efduggan|Efduggan]] ([[User talk:Efduggan|talk]]) 13:46, 24 October 2019 (CDT)&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Efduggan&amp;diff=588386</id>
		<title>User:Efduggan</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Efduggan&amp;diff=588386"/>
		<updated>2019-01-19T19:30:29Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Brief personal statement about Joomla and me.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla’s open source philosophy appeals to me; that’s why I use it, promote it and support it :-)&lt;br /&gt;
I’ve helped out with EventList (now JEM) https://extensions.joomla.org/extensions/extension/calendars-a-events/events/jem/ in the past, and do contribute OSModul https://extensions.joomla.org/extension/osmodul/  &lt;br /&gt;
&lt;br /&gt;
As I move into development with Joomla, my aim is to help improve the documentation for beginners like myself with this task.&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Range_form_field_type&amp;diff=586788</id>
		<title>Range form field type</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Range_form_field_type&amp;diff=586788"/>
		<updated>2019-01-13T19:56:43Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: added a brief description with options for this field.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The ‘&#039;&#039;range&#039;&#039;&#039; form field type provides a horizontal slider for numeric input. While the default value can be set, there is no indication of the actual value being chosen, just the position of the slider’s thumb. Available from {{JVer|3.2}} &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;type&#039;&#039;&#039; (mandatory) must be &#039;&#039;range&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; (mandatory) is the unique name of the field.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;label&#039;&#039;&#039; (optional) (translatable) is the descriptive title of the field, and will appear in the pop-up when hovering over label as well.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;description&#039;&#039;&#039; (optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;default&#039;&#039;&#039; (optional) (translatable) is the initial default value.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;class&#039;&#039;&#039; (optional) is a CSS class name for the HTML form field.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;min&#039;&#039;&#039; (optional)  this value is the lowest that can be chosen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;max&#039;&#039;&#039; (optional) this value is the highest that can be chosen.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;step&#039;&#039;&#039; (optional) if user click up/down arrow current value will change by this attribute (this attribute value will be added or subtracted to current field value).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;required&#039;&#039;&#039; (optional) should the user be required to enter data in this field?&lt;br /&gt;
&lt;br /&gt;
Example XML field definition which would create a slider with possibility to choose values between 0 and 0.5 and change current value by 0.1 as the slider is moved left or right.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;field name=“myrange&amp;quot; type=&amp;quot;range&amp;quot; default=“0&amp;quot; label=&amp;quot;Range from -0.5 to 0.5 step 0.1&amp;quot; description=&amp;quot;&amp;quot; min=“-0.5&amp;quot; max=“0.5&amp;quot; step=&amp;quot;0.1&amp;quot; /&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== See also === &lt;br /&gt;
&lt;br /&gt;
Category:Standard form field types&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Accessing_the_current_user_object&amp;diff=586206</id>
		<title>Accessing the current user object</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Accessing_the_current_user_object&amp;diff=586206"/>
		<updated>2019-01-06T23:45:30Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: /* External Links */ - URL updated - old target has ben deleted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.x}}&lt;br /&gt;
== Basics ==&lt;br /&gt;
&lt;br /&gt;
For every request in Joomla!, there is one user. Information about this user is readily available through the Joomla! framework in the form of an object. To get this object for the current user, use the following member function of JFactory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = JFactory::getUser();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or, to get information about any other registered user you can call the function with a user &#039;id&#039;, e.g. for user &#039;99&#039;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = JFactory::getUser(99);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Getting a reference through getUser() ensures that only one user object is created during any one Joomla! request, saving on memory and processing time. Most of the information about the user is available through public member variables of the user object. This code displays the current user&#039;s name, email, user name and user type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;&amp;lt;p&amp;gt;Your name is {$user-&amp;gt;name}, your email is {$user-&amp;gt;email}, and your username is {$user-&amp;gt;username}&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Since version 1.6 Joomla has a flexible ACL system, which makes $user-&amp;gt;usertype deprecated! &lt;br /&gt;
&lt;br /&gt;
The usertype field in #__users will only contain values for users that have been migrated from Joomla 1.5, but for new created users the field will be empty. &lt;br /&gt;
&lt;br /&gt;
Use $user-&amp;gt;groups to retrieve an array with all the IDs that refer to the groups (from #__usergroups table) of a user.&lt;br /&gt;
&lt;br /&gt;
== Object Member Variables and Parameters ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the relevant member variables automatically generated on a call to getUser():&lt;br /&gt;
* id - The unique, numerical user id. Use this when referencing the user record in other database tables.&lt;br /&gt;
* name - The name of the user. (e.g. Vint Cerf)&lt;br /&gt;
* username - The login/screen name of the user. (e.g. shmuffin1979)&lt;br /&gt;
* email - The email address of the user. (e.g. crashoverride@hackers.com)&lt;br /&gt;
* password - The encrypted version of the user&#039;s password&lt;br /&gt;
* password_clear - Set to the user&#039;s password only when it is being changed. Otherwise, remains blank.&lt;br /&gt;
* usertype - &amp;lt;strike&amp;gt;The role of the user within Joomla!. (Super Administrator, Editor, etc...)&amp;lt;/strike&amp;gt; Has been deprecated since Joomla 1.6. Use $user-&amp;gt;groups to retrieve an array with all the roles of a user.&lt;br /&gt;
* groups - Set to the user&#039;s group ids.&lt;br /&gt;
* block - Set to &#039;1&#039; when the user is set to &#039;blocked&#039; in Joomla!.&lt;br /&gt;
* registerDate - Set to the date when the user was first registered.&lt;br /&gt;
* lastvisitDate - Set to the date the user last visited the site.&lt;br /&gt;
* guest - If the user is not logged in, this variable will be set to &#039;1&#039;. The other variables will be unset or default values.&lt;br /&gt;
* lastResetTime - Set to the last time the password was reset.&lt;br /&gt;
* resetCount - Counts the number of password resets.&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
In addition to the member variables (which are stored in the database in columns), there are parameters for the user that hold preferences. To get one of these parameters, call the getParam() member function of the user object, passing in the name of the parameter you want along with a default value in case it is blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$user = JFactory::getUser();&lt;br /&gt;
$language = $user-&amp;gt;getParam(&#039;language&#039;, &#039;the default&#039;);&lt;br /&gt;
	&lt;br /&gt;
echo &amp;quot;&amp;lt;p&amp;gt;Your language is set to {$language}.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Determining Status ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Frequently, you will just want to make sure the user is logged in before continuing. The &#039;guest&#039; property will be set to &#039;1&#039; when the current user is not logged in. When the user is authenticated, &#039;guest&#039; will be set to &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	$user = JFactory::getUser();&lt;br /&gt;
	&lt;br /&gt;
	if ($user-&amp;gt;guest) {&lt;br /&gt;
		echo &amp;quot;&amp;lt;p&amp;gt;You must login to see the content. I want your email address.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;h1&amp;gt;Impromptu leftovers salad that goes well with fish&amp;lt;/h1&amp;gt;&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;1/2 cup chopped celery&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;1/4 cup raisins&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;1 teaspoon Extra Virgin Olive Oil&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;2 tablespoons of faux Thai lemongrass marinade&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;1/4 cup shredded fresh basil&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;Sprinkling of dill weed&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;Big pinch of kosher salt&amp;lt;/li&amp;gt;&lt;br /&gt;
			&amp;lt;li&amp;gt;Several lettuce leaves&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;p&amp;gt;Wash the lettuce and basil and place in a salad bowl.&lt;br /&gt;
			Get out a much smaller bowl and swish around all of the remaining ingredients. &lt;br /&gt;
			Pour this over the greens and toss.&lt;br /&gt;
			Serves two.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Privileges ==&lt;br /&gt;
Not all users are given equal rights. For instance, a Super Administrator may be able to edit anyone&#039;s content, while a Publisher may only be able to edit their own. The authorise() member function can be used to determine if the current user has permission to do a certain task. The first parameter is used to identify which task we wish to check being allowed. The second represents the component we wish to retrieve the ACL information from.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	$user = JFactory::getUser();&lt;br /&gt;
	&lt;br /&gt;
	if ($user-&amp;gt;authorise(&#039;core.edit&#039;, &#039;com_content&#039;))&lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot;&amp;lt;p&amp;gt;You may edit all content.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot;&amp;lt;p&amp;gt;You may not edit all content.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if ($user-&amp;gt;authorise(&#039;core.edit.own&#039;, &#039;com_content&#039;))&lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot;&amp;lt;p&amp;gt;You may edit your own content.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		echo &amp;quot;&amp;lt;p&amp;gt;You may not edit your own content.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Information about the current user is readily available in any part of your Joomla! extension. You need only fetch the object and access the member variables. You can authorise the user against the core permissions set, or create your own to suit your needs.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
[https://api.joomla.org/cms-3/classes/Joomla.CMS.Factory.html#method_getUser Joomla 3.9 API reference] &lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Tutorials]][[Category:Framework]]&lt;br /&gt;
[[Category:Module Development]]&lt;br /&gt;
[[Category:Plugin Development]][[Category:Component Development]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=How_do_you_list_your_extension_in_the_extensions_site%3F&amp;diff=586205</id>
		<title>How do you list your extension in the extensions site?</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=How_do_you_list_your_extension_in_the_extensions_site%3F&amp;diff=586205"/>
		<updated>2019-01-06T23:30:15Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Fixed broken link to hopefully point at correct page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|2.5,3.x}}Information on how to list extensions in the extensions site is available here:&lt;br /&gt;
https://extensions.joomla.org/support/knowledgebase/item/submitting-an-extension/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before submitting an extension to JED you should read the 4 steps checklist process&lt;br /&gt;
* [[JED_Entries_Submission_Checklist|Submission Checklist]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:FAQ]]&lt;br /&gt;
[[Category:Getting Started FAQ]]&lt;br /&gt;
[[Category:Version 3.x FAQ]]&lt;br /&gt;
[[Category:Version 2.5 FAQ]]&lt;br /&gt;
[[Category:JED]]&lt;br /&gt;
[[Category:Template Development]]&lt;br /&gt;
[[Category:Module Development]]&lt;br /&gt;
[[Category:Plugin Development]]&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Language Development]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Register_globals&amp;diff=62941</id>
		<title>Register globals</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Register_globals&amp;diff=62941"/>
		<updated>2011-11-14T18:00:12Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: /* How do I find the state of register_globals on my Joomla! install? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;register_globals&amp;lt;/tt&amp;gt; is a PHP environment setting that has been the subject of controversy for sometime.  Older versions of PHP often have this variable set to on and that setting is known to leave a site vulnerable to hacking.  Further information is available at [http://us.php.net/register_globals the PHP website]. Current Joomla! releases do not require this setting to be on, and best practices dictate that it should be changed to off.  (Joomla! 1.0.x releases also have a related emulator for this setting, which was implemented for backward compatibility with older components and extensions.  &#039;&#039;It is generally preferred not to enable this capability&#039;&#039;.)  If you have a component that requires this setting, you should look for an update, or find an alternative component.&lt;br /&gt;
&lt;br /&gt;
== How do I find the state of register_globals on my Joomla! install? ==&lt;br /&gt;
J 1.5     Log in to Joomla! administration, go to Help -&amp;gt; System Info, click on the PHP Settings tab, and look for the Register Globals entry.&lt;br /&gt;
&lt;br /&gt;
J1.6+    Log in to Joomla! administration, go to Site -&amp;gt; System Information, click on the PHP Settings tab, and look for the Register Globals entry.&lt;br /&gt;
&lt;br /&gt;
== Can I change it? ==&lt;br /&gt;
Yes, maybe.  Depending on how much control you have over your server, there are several approaches to addressing this setting.&lt;br /&gt;
&lt;br /&gt;
If you have complete control of your server, then you probably want to make sure that your main PHP configuration file (which is typically found in /usr/local/lib/php.ini) has the directive &#039;&#039;register_globals&#039;&#039; set to 0(zero).  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re in a shared web environment, most likely your hosting provider will not let you modify the global php.ini file.  You have a couple of options in this case.&lt;br /&gt;
&lt;br /&gt;
== Where do I change it? ==&lt;br /&gt;
Possibly the easiest thing to do is to ask your hosting provider to make this change for your domain.  (Often this is accomplished by logging a technical support request.)  But not all providers will make this change for you.  So you may not be so lucky.  The good news is that there are likely other options available to you, and here are some of them.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Local php configuration file:&#039;&#039;&#039;&lt;br /&gt;
If you have access to your web site&#039;s root directory, you should be able to include your own copy of a php.ini file.  Your copy only needs to include the settings that you want to alter from the global settings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Change to .htaccess:&#039;&#039;&#039;&lt;br /&gt;
Another option is to introduce the preferred setting by making an entry in the .htaccess file at the root directory of your web site.  In this case, you should add the following line to .htaccess&lt;br /&gt;
: &#039;&#039;&#039;Important&#039;&#039;&#039;: This method is only suitable for the Apache PHP &#039;&#039;module&#039;&#039; and will not work if PHP runs in CGI-mode.&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla&#039;s Global Register Emulator:&#039;&#039;&#039;&lt;br /&gt;
In the case where you have an extension that absolutely needs to have register_globals on, Joomla! 1.0.x provides an alternative approach that does not require a change to your global settings.  The &#039;&#039;globals.php&#039;&#039; file in your site&#039;s root directory has an entry that lets Joomla! emulate a change to the register_globals site setting.  You will find a line that looks as such:&lt;br /&gt;
&lt;br /&gt;
 define( &#039;RG_EMULATION&#039;, 0 );&lt;br /&gt;
&lt;br /&gt;
You can change the zero to a one, if you want Joomla to emulate &#039;&#039;register_globals = on&#039;&#039;.&lt;br /&gt;
[[Category:Landing Pages]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Register_globals&amp;diff=62940</id>
		<title>Register globals</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Register_globals&amp;diff=62940"/>
		<updated>2011-11-14T17:58:56Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: /* How do I find the state of register_globals on my Joomla! install? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;register_globals&amp;lt;/tt&amp;gt; is a PHP environment setting that has been the subject of controversy for sometime.  Older versions of PHP often have this variable set to on and that setting is known to leave a site vulnerable to hacking.  Further information is available at [http://us.php.net/register_globals the PHP website]. Current Joomla! releases do not require this setting to be on, and best practices dictate that it should be changed to off.  (Joomla! 1.0.x releases also have a related emulator for this setting, which was implemented for backward compatibility with older components and extensions.  &#039;&#039;It is generally preferred not to enable this capability&#039;&#039;.)  If you have a component that requires this setting, you should look for an update, or find an alternative component.&lt;br /&gt;
&lt;br /&gt;
== How do I find the state of register_globals on my Joomla! install? ==&lt;br /&gt;
J 1.5     Log in to Joomla! administration, go to Help -&amp;gt; System Info, click on the PHP Settings tab, and look for the Register Globals entry.&lt;br /&gt;
J1.6+    Log in to Joomla! administration, go to Site -&amp;gt; System Information, click on the PHP Settings tab, and look for the Register Globals entry.&lt;br /&gt;
&lt;br /&gt;
== Can I change it? ==&lt;br /&gt;
Yes, maybe.  Depending on how much control you have over your server, there are several approaches to addressing this setting.&lt;br /&gt;
&lt;br /&gt;
If you have complete control of your server, then you probably want to make sure that your main PHP configuration file (which is typically found in /usr/local/lib/php.ini) has the directive &#039;&#039;register_globals&#039;&#039; set to 0(zero).  &lt;br /&gt;
&lt;br /&gt;
If you&#039;re in a shared web environment, most likely your hosting provider will not let you modify the global php.ini file.  You have a couple of options in this case.&lt;br /&gt;
&lt;br /&gt;
== Where do I change it? ==&lt;br /&gt;
Possibly the easiest thing to do is to ask your hosting provider to make this change for your domain.  (Often this is accomplished by logging a technical support request.)  But not all providers will make this change for you.  So you may not be so lucky.  The good news is that there are likely other options available to you, and here are some of them.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Local php configuration file:&#039;&#039;&#039;&lt;br /&gt;
If you have access to your web site&#039;s root directory, you should be able to include your own copy of a php.ini file.  Your copy only needs to include the settings that you want to alter from the global settings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Change to .htaccess:&#039;&#039;&#039;&lt;br /&gt;
Another option is to introduce the preferred setting by making an entry in the .htaccess file at the root directory of your web site.  In this case, you should add the following line to .htaccess&lt;br /&gt;
: &#039;&#039;&#039;Important&#039;&#039;&#039;: This method is only suitable for the Apache PHP &#039;&#039;module&#039;&#039; and will not work if PHP runs in CGI-mode.&lt;br /&gt;
 php_flag register_globals off&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joomla&#039;s Global Register Emulator:&#039;&#039;&#039;&lt;br /&gt;
In the case where you have an extension that absolutely needs to have register_globals on, Joomla! 1.0.x provides an alternative approach that does not require a change to your global settings.  The &#039;&#039;globals.php&#039;&#039; file in your site&#039;s root directory has an entry that lets Joomla! emulate a change to the register_globals site setting.  You will find a line that looks as such:&lt;br /&gt;
&lt;br /&gt;
 define( &#039;RG_EMULATION&#039;, 0 );&lt;br /&gt;
&lt;br /&gt;
You can change the zero to a one, if you want Joomla to emulate &#039;&#039;register_globals = on&#039;&#039;.&lt;br /&gt;
[[Category:Landing Pages]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_CSS_Drop_down_Menu&amp;diff=37418</id>
		<title>J1.5:Creating a CSS Drop down Menu</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J1.5:Creating_a_CSS_Drop_down_Menu&amp;diff=37418"/>
		<updated>2011-02-20T06:04:50Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: got rid of duplicate paragraph.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To emphasize W3C valid code and lean pages, neither Flash nor JavaScript are generally considered to be favourable. Many (drop down) menu solutions make use of one of these two. There are a number of techniques one can use to get more visually attractive (drop down) menus, almost solely using cascading style sheet (CSS) and limiting the use of Javascript.&lt;br /&gt;
&lt;br /&gt;
All use unordered lists (ul) to create the menu. An often-used solution is the drop down menus called “Suckerfish” or &amp;quot;Son of Suckerfish.&amp;quot; It&#039;s pure CSS, very lean, hack free and employs just 12 lines of JavaScript to fix some problems with Microsoft Internet Explorer 6 and earlier. You can see a [http://www.htmldog.com/articles/suckerfish/dropdowns/example/ demo] of what can be created with Suckerfish. More detailed guides about the Suckerfish technique can be found at [http://www.htmldog.com/articles/suckerfish/dropdowns/ htmldog.com] and [http://www.alistapart.com/articles/dropdowns/ alistapart.com]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__toc__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__toc__&lt;br /&gt;
==Suckerfish Combined with the Extended Menu Module==&lt;br /&gt;
In order to let Suckerfish function well, you need your menu in the form of a good clean list. It just so happens that there is a module out there to do this. It&#039;s called Extended Menu (Module Type: mod_exmenu-j15). You can find it [http://extensions.joomla.org/extensions/163/details Extended menu] and in the [http://extensions.joomla.org JED].&lt;br /&gt;
&lt;br /&gt;
Download and install the module. Now let’s set it up:&lt;br /&gt;
&lt;br /&gt;
In the main Joomla interface, open the &#039;&#039;&#039;Extensions&#039;&#039;&#039; menu and choose the &#039;&#039;&#039;&#039;&#039;Module Manager&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Select your newly added Extended Menu Module by clicking on its name - it&#039;ll probably be fairly close to the bottom of the list.&lt;br /&gt;
&lt;br /&gt;
• Assign a &#039;&#039;&#039;Menu suffix&#039;&#039;&#039; and a &#039;&#039;&#039;Module class suffix&#039;&#039;&#039; of &amp;quot;mainnav&amp;quot; (unless you change the CSS, below)&lt;br /&gt;
&lt;br /&gt;
• Set &#039;&#039;&#039;Menu style&#039;&#039;&#039;: Tree List&lt;br /&gt;
&lt;br /&gt;
• Set &#039;&#039;&#039;Expand Menu&#039;&#039;&#039;: Yes  (don&#039;t worry about the tooltip description here - the CSS code takes care of hiding and showing the sub-menus, so they need to always be visible.)&lt;br /&gt;
&lt;br /&gt;
• You can leave the other settings here at their defaults.&lt;br /&gt;
&lt;br /&gt;
In order to see it in action, you will likely want to select a set of menus for it to display.  &lt;br /&gt;
&lt;br /&gt;
===The Cascading Style Sheet===&lt;br /&gt;
You can either add these CSS selectors to your existing template.css or create a new CSS file. If you create a new file be sure to include a reference to it inside the &amp;lt;head&amp;gt;..&amp;lt;/head&amp;gt; section of your template&#039;s index.php file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#twocols{ /* The columns that gets dropped down over yours might be different. */&lt;br /&gt;
  z-index:20;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#leftcol{  /* The columns that gets dropped down over yours might be different. */&lt;br /&gt;
  z-index:10;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.moduletablemainnav { /* I have absolutely positioned the module, you might have a different scheme. */&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  top:187px;&lt;br /&gt;
  left:20px;&lt;br /&gt;
  z-index:100;&lt;br /&gt;
  font:0.9em Verdana, Arial, Helvetica, sans-serif;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav,#mainlevelmainnav ul {&lt;br /&gt;
  float:left;&lt;br /&gt;
  list-style:none;&lt;br /&gt;
  line-height:1em;&lt;br /&gt;
  background:transparent;&lt;br /&gt;
  font-weight:700;&lt;br /&gt;
  margin:0;&lt;br /&gt;
  padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav a {&lt;br /&gt;
  display:block;&lt;br /&gt;
  color:#f90;&lt;br /&gt;
  text-decoration:none;&lt;br /&gt;
  margin-right:15px;&lt;br /&gt;
  padding:0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li {&lt;br /&gt;
  float:left;&lt;br /&gt;
  padding:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li ul  {&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  left:-999em;&lt;br /&gt;
  height:auto;&lt;br /&gt;
  width:11em;&lt;br /&gt;
  font-weight:400;&lt;br /&gt;
  background:#36f;&lt;br /&gt;
  border:#00C 1px solid;&lt;br /&gt;
  margin:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li li {&lt;br /&gt;
  width:11em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li ul a {&lt;br /&gt;
  width:11em;&lt;br /&gt;
  color:#fff;&lt;br /&gt;
  font-size:0.9em;&lt;br /&gt;
  line-height:1em;&lt;br /&gt;
  font-weight:400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li:hover ul ul,#mainlevelmainnav li:hover ul ul ul,#mainlevelmainnav li.sfhover ul ul,#mainlevelmainnav li.sfhover ul ul ul{&lt;br /&gt;
  left:-999em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li:hover ul,#mainlevelmainnav li li:hover ul,#mainlevelmainnav li li li:hover ul,#mainlevelmainnav li.sfhover&lt;br /&gt;
  ul,#mainlevelmainnav li li.sfhover ul,#mainlevelmainnav li li li.sfhover ul {&lt;br /&gt;
  left:auto;&lt;br /&gt;
  z-index:6000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mainlevelmainnav li li:hover,#mainlevelmainnav li li.sfhover {&lt;br /&gt;
  background:#039 url(../images/soccerball.gif) 98% 50% no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you have the z-indexes set up properly. Also remember, in order to have a z-index, the element needs some sort of positioning. If not absolute, then relative.&lt;br /&gt;
&lt;br /&gt;
===The JavaScript File===&lt;br /&gt;
You need to insert a reference to the JavaScript file for early versions of Microsoft Internet Explorer into the head of your template&#039;s index.php file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
  sfHover = function() {&lt;br /&gt;
     var sfEls = document.getElementById(&amp;quot;mainlevelmainnav&amp;quot;).getElementsByTagName(&amp;quot;LI&amp;quot;);&lt;br /&gt;
     for (var i=0; i&amp;lt;sfEls.length; i++) {&lt;br /&gt;
        sfEls[i].onmouseover=function() {&lt;br /&gt;
           this.className+=&amp;quot; sfhover&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sfEls[i].onmouseout=function() {&lt;br /&gt;
           this.className=this.className.replace(new RegExp(&amp;quot; sfhover\\b&amp;quot;), &amp;quot;&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
  if (window.attachEvent) window.attachEvent(&amp;quot;onload&amp;quot;, sfHover);&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Suckerfish Combined with the Default Joomla! Menu Module==&lt;br /&gt;
The second approach is to implement a Drop Down menu using the mod_mainmenu module that comes with Joomal 1.5. I&#039;ve played around with the “suckerfish” and CSS to make this work. This work perfectly in IE 7 as well as Netscape.&lt;br /&gt;
&lt;br /&gt;
1. Create your Menu with the following Hierarchy:&lt;br /&gt;
&lt;br /&gt;
Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
2. Make sure the parameters are set to:&lt;br /&gt;
&lt;br /&gt;
• Menu Style is set to List.&lt;br /&gt;
&lt;br /&gt;
• Always show sub-menu Items is set to Yes.&lt;br /&gt;
&lt;br /&gt;
• Menu Class Suffix is set to &amp;lt;b&amp;gt;san&amp;lt;/b&amp;gt; - you can pick you own, but then make sure you change it in CSS &amp;amp; JS files.&lt;br /&gt;
&lt;br /&gt;
3.  Insert this piece of JS in your template index.php &amp;lt;head&amp;gt; tag, or in Javascript file that’s called from index.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* ********* drop down menu Java script code - start **********/&lt;br /&gt;
&amp;lt;script type=”text/javascript”&amp;gt;&amp;lt;!–//–&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!– // don’t need this line if using .JS file&lt;br /&gt;
sfHover = function()&lt;br /&gt;
{&lt;br /&gt;
 var sfEls = document.menusan.getElementsByTagName(”LI”);&lt;br /&gt;
&lt;br /&gt;
 for (var j=0; j&amp;lt;sfEls.length; j++)&lt;br /&gt;
 {&lt;br /&gt;
  sfEls[j].onmouseover=function()&lt;br /&gt;
  {&lt;br /&gt;
   this.className+=” sfhover”;&lt;br /&gt;
  }&lt;br /&gt;
  sfEls[j].onmouseout=function()&lt;br /&gt;
  {&lt;br /&gt;
   this.className=this.className.replace(new RegExp(” sfhover\\b”), “”);&lt;br /&gt;
  }&lt;br /&gt;
 } &lt;br /&gt;
}&lt;br /&gt;
if (window.attachEvent) window.attachEvent(”onload”, sfHover);&lt;br /&gt;
//–&amp;gt;&amp;lt;!]]&amp;gt;&amp;lt;/script&amp;gt; // don’t need this line if using .JS file&lt;br /&gt;
&lt;br /&gt;
/* ********* drop down menu Java script code – end  **********/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Here&#039;s the corresponding CSS &lt;br /&gt;
&lt;br /&gt;
Either add these CSS selectors to your template&#039;s existing template.css file or create a new CSS file, name it and include it between the &amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt; section of the index.php.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/****************** Dropdown Menu styling starts here **************/&lt;br /&gt;
.menusan&lt;br /&gt;
{&lt;br /&gt;
 /* Use these parameters to positions your menu. */&lt;br /&gt;
 position: relative;&lt;br /&gt;
 left: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan, .menusan li, .menusan li ul { /* all lists */&lt;br /&gt;
 padding: 0;&lt;br /&gt;
 margin: 0;&lt;br /&gt;
 list-style: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li a {&lt;br /&gt;
 display: block;&lt;br /&gt;
 width: 10em;&lt;br /&gt;
 color:#FFFFFF ;&lt;br /&gt;
 background-color:#BC031F;&lt;br /&gt;
 border:2px solid #BC031F;&lt;br /&gt;
 text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li { /* all list items */&lt;br /&gt;
 float: left;&lt;br /&gt;
 width: 10em; /* The width is needed by the Opera browser. */&lt;br /&gt;
 border-bottom:1px solid #ccc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li ul { /* second-level lists */&lt;br /&gt;
 position: absolute;&lt;br /&gt;
 width: 10em;&lt;br /&gt;
 left: -98%; /* Use left instead of display to hide menus; display: none isn’t read by screen readers. */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li a:hover {&lt;br /&gt;
 border:2px solid #8C7AD6;&lt;br /&gt;
 background-color:#8C7AD6;&lt;br /&gt;
 color:#fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li:hover ul, .menusan li.sfhover ul  { /* lists nested under hovered list items */&lt;br /&gt;
 left: auto; /* change is to 10px, 20px, etc for indenting the sub menu */&lt;br /&gt;
}&lt;br /&gt;
/* **************** Dropdown Menu styling end here ***************/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Save all.&lt;br /&gt;
&lt;br /&gt;
===Hint===&lt;br /&gt;
You can use a single menu to create multiple drop downs menus. Just create the menu in the following hierarchy and you’ll have 2 drop down menus, Menu 1 &amp;amp; Menu 2. &lt;br /&gt;
&lt;br /&gt;
Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
You might have to play with CSS a bit to work out the positions of the second menu etc. (Note: This did not work on the Chrome Browser 5.0.)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tips and tricks]]&lt;br /&gt;
[[Category:Tips and tricks 1.0]]&lt;br /&gt;
[[Category:Tips and tricks 1.5]]&lt;br /&gt;
[[Category:Tutorials]][[Category:Templates]]&lt;br /&gt;
&lt;br /&gt;
==Suckerfish Combined with the Default Joomla! Menu Module==&lt;br /&gt;
The second approach is to implement a Drop Down menu using the mod_mainmenu module that comes with Joomal 1.5. I&#039;ve played around with the “suckerfish” and CSS to make this work. This work perfectly in IE 7 as well as Netscape.&lt;br /&gt;
&lt;br /&gt;
1. Create your Menu with the following Hierarchy:&lt;br /&gt;
&lt;br /&gt;
Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
2. Make sure the parameters are set to:&lt;br /&gt;
&lt;br /&gt;
• Menu Style is set to List.&lt;br /&gt;
&lt;br /&gt;
• Always show sub-menu Items is set to Yes.&lt;br /&gt;
&lt;br /&gt;
• Menu Class Suffix is set to &amp;lt;b&amp;gt;san&amp;lt;/b&amp;gt; - you can pick you own, but then make sure you change it in CSS &amp;amp; JS files.&lt;br /&gt;
&lt;br /&gt;
3.  Insert this piece of JS in your template index.php &amp;lt;head&amp;gt; tag, or in Javascript file that’s called from index.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/* ********* drop down menu Java script code - start **********/&lt;br /&gt;
&amp;lt;script type=”text/javascript”&amp;gt;&amp;lt;!–//–&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!– // don’t need this line if using .JS file&lt;br /&gt;
sfHover = function()&lt;br /&gt;
{&lt;br /&gt;
 var sfEls = document.menusan.getElementsByTagName(”LI”);&lt;br /&gt;
&lt;br /&gt;
 for (var j=0; j&amp;lt;sfEls.length; j++)&lt;br /&gt;
 {&lt;br /&gt;
  sfEls[j].onmouseover=function()&lt;br /&gt;
  {&lt;br /&gt;
   this.className+=” sfhover”;&lt;br /&gt;
  }&lt;br /&gt;
  sfEls[j].onmouseout=function()&lt;br /&gt;
  {&lt;br /&gt;
   this.className=this.className.replace(new RegExp(” sfhover\\b”), “”);&lt;br /&gt;
  }&lt;br /&gt;
 } &lt;br /&gt;
}&lt;br /&gt;
if (window.attachEvent) window.attachEvent(”onload”, sfHover);&lt;br /&gt;
//–&amp;gt;&amp;lt;!]]&amp;gt;&amp;lt;/script&amp;gt; // don’t need this line if using .JS file&lt;br /&gt;
&lt;br /&gt;
/* ********* drop down menu Java script code – end  **********/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Here&#039;s the corresponding CSS &lt;br /&gt;
&lt;br /&gt;
Either add these CSS selectors to your template&#039;s existing template.css file or create a new CSS file, name it and include it between the &amp;lt;head&amp;gt;...&amp;lt;/head&amp;gt; section of the index.php.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/****************** Dropdown Menu styling starts here **************/&lt;br /&gt;
.menusan&lt;br /&gt;
{&lt;br /&gt;
 /* Use these parameters to positions your menu. */&lt;br /&gt;
 position: relative;&lt;br /&gt;
 left: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan, .menusan li, .menusan li ul { /* all lists */&lt;br /&gt;
 padding: 0;&lt;br /&gt;
 margin: 0;&lt;br /&gt;
 list-style: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li a {&lt;br /&gt;
 display: block;&lt;br /&gt;
 width: 10em;&lt;br /&gt;
 color:#FFFFFF ;&lt;br /&gt;
 background-color:#BC031F;&lt;br /&gt;
 border:2px solid #BC031F;&lt;br /&gt;
 text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li { /* all list items */&lt;br /&gt;
 float: left;&lt;br /&gt;
 width: 10em; /* The width is needed by the Opera browser. */&lt;br /&gt;
 border-bottom:1px solid #ccc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li ul { /* second-level lists */&lt;br /&gt;
 position: absolute;&lt;br /&gt;
 width: 10em;&lt;br /&gt;
 left: -98%; /* Use left instead of display to hide menus; display: none isn’t read by screen readers. */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li a:hover {&lt;br /&gt;
 border:2px solid #8C7AD6;&lt;br /&gt;
 background-color:#8C7AD6;&lt;br /&gt;
 color:#fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.menusan li:hover ul, .menusan li.sfhover ul  { /* lists nested under hovered list items */&lt;br /&gt;
 left: auto; /* change is to 10px, 20px, etc for indenting the sub menu */&lt;br /&gt;
}&lt;br /&gt;
/* **************** Dropdown Menu styling end here ***************/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Save all.&lt;br /&gt;
&lt;br /&gt;
===Hint===&lt;br /&gt;
You can use a single menu to create multiple drop downs menus. Just create the menu in the following hierarchy and you’ll have 2 drop down menus, Menu 1 &amp;amp; Menu 2. &lt;br /&gt;
&lt;br /&gt;
Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 1 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 1.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 2.&lt;br /&gt;
&lt;br /&gt;
– Menu 2 Sub Menu 3.&lt;br /&gt;
&lt;br /&gt;
You might have to play with CSS a bit to work out the positions of the second menu etc. (Note: This did not work on the Chrome Browser 5.0.)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tips and tricks]]&lt;br /&gt;
[[Category:Tips and tricks 1.0]]&lt;br /&gt;
[[Category:Tips and tricks 1.5]]&lt;br /&gt;
[[Category:Tutorials]][[Category:Templates]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=32355</id>
		<title>J2.5:What&#039;s new in Joomla 2.5</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=32355"/>
		<updated>2010-11-30T02:07:06Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Added Beta 15 release date&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The principal changes introduced in Joomla 1.6 are:-&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New Access Control System&#039;&#039;&#039; - Allows site administrators control over who can view and manage content.&lt;br /&gt;
* &#039;&#039;&#039;Unlimited Depth Organizational Model&#039;&#039;&#039; - Gives site administrators and content creators user-defined category levels that allow for the creation of a category tree with as many or as few levels for organizing articles and other content as needed.&lt;br /&gt;
* &#039;&#039;&#039;One-Click Extension Updates&#039;&#039;&#039; - Allows users to keep sites secure and controlled by simplifying the process of updating extensions.&lt;br /&gt;
* &#039;&#039;&#039;Semantic XHTML Layouts&#039;&#039;&#039; - Provides a better baseline for content presentation.&lt;br /&gt;
&lt;br /&gt;
The following is a more complete list of changes.&lt;br /&gt;
==Administrators==&lt;br /&gt;
===Introduction===&lt;br /&gt;
*Consistent UI&lt;br /&gt;
*Consistent Features&lt;br /&gt;
*Richer sample data&lt;br /&gt;
*IE 7+, Firefox 3.x, Safari 4.x&lt;br /&gt;
*PHP 5.2.4+&lt;br /&gt;
*MySQL 5.0.4 (allows for wide varchars)&lt;br /&gt;
&lt;br /&gt;
===Administrator===&lt;br /&gt;
*Menu Changes&lt;br /&gt;
*Submenu consistency&lt;br /&gt;
&lt;br /&gt;
====Toolbar Features====&lt;br /&gt;
*Save&lt;br /&gt;
*Save &amp;amp; Close&lt;br /&gt;
*Save &amp;amp; New&lt;br /&gt;
*Save as Copy&lt;br /&gt;
*Expired session will return to the page you were on then you got logged out (can be hit and miss)&lt;br /&gt;
*Most search filters allow you to search for a record id via [ id:123 ]&lt;br /&gt;
*&amp;quot;Parameters&amp;quot; are now referred to as &amp;quot;Options&amp;quot;&lt;br /&gt;
*Template Styles&lt;br /&gt;
*Integrated Trash Management&lt;br /&gt;
*Consistent archive support for most content&lt;br /&gt;
*Extension Installer Improvements&lt;br /&gt;
&lt;br /&gt;
===Module Enhancements===&lt;br /&gt;
*Publish up and down&lt;br /&gt;
*Add option to display on all pages &amp;quot;except&amp;quot; selected&lt;br /&gt;
*Expanded Category System&lt;br /&gt;
*404 Page Redirection&lt;br /&gt;
*Better Menu Management&lt;br /&gt;
*Alternative layouts for content, modules and menus (taken from the home template)&lt;br /&gt;
&lt;br /&gt;
===New Templates===&lt;br /&gt;
*Atomic&lt;br /&gt;
*Beez2&lt;br /&gt;
*(Administrator) Bluestork (replaces Khephri)&lt;br /&gt;
*(Administrator) Hathor&lt;br /&gt;
*Legacy layer in Milkyway&lt;br /&gt;
*Backend supports layout overrides&lt;br /&gt;
*New Modules&lt;br /&gt;
*New Plugins&lt;br /&gt;
*Content Languages&lt;br /&gt;
*User Login Permissions&lt;br /&gt;
*Activate selected users from the user list now (and filter)&lt;br /&gt;
*Administrator registration approval&lt;br /&gt;
*Polls component removed&lt;br /&gt;
*New codemirror editor&lt;br /&gt;
&lt;br /&gt;
===SEO Improvements===&lt;br /&gt;
*Meta decription and keywords for categories&lt;br /&gt;
*Articles can change the page title and page header separately&lt;br /&gt;
&lt;br /&gt;
===Global Configuration===&lt;br /&gt;
*Add site name to titles&lt;br /&gt;
*Default Access Level&lt;br /&gt;
*Set Metadata Language (buggy)&lt;br /&gt;
*Unicode Aliases&lt;br /&gt;
*Cookie domain and path&lt;br /&gt;
*User Setting moved to User Manager -&amp;gt; Options&lt;br /&gt;
*Media Settings moved to Media Manager -&amp;gt; Options&lt;br /&gt;
*Debug Modules - allows you to enabled to disable the tp=1 feature&lt;br /&gt;
*Server Timezone now a location, not an integer offset&lt;br /&gt;
*New Global Permissions tab&lt;br /&gt;
&lt;br /&gt;
===User Manager===&lt;br /&gt;
*Can activate a user from the list now&lt;br /&gt;
*User can be assigned to multiple groups&lt;br /&gt;
*Manage user groups&lt;br /&gt;
*Manager content access levels&lt;br /&gt;
&lt;br /&gt;
===Media Manager===&lt;br /&gt;
*Flash uploader fixed&lt;br /&gt;
&lt;br /&gt;
===Menu Manager===&lt;br /&gt;
====Menus List====&lt;br /&gt;
*Rebuild button to press when you brick the menu&lt;br /&gt;
*Clicking the menu name brings up the menu items list rather than going into Edit Menu. To edit the menu, click on the check box next to the name and click on the Edit icon in the toolbar.&lt;br /&gt;
&lt;br /&gt;
====Items List====&lt;br /&gt;
*Menus support the language filter&lt;br /&gt;
*Default now called Home&lt;br /&gt;
*Home is now clickable in the menu item list&lt;br /&gt;
*A separate home can be set for different languages&lt;br /&gt;
&lt;br /&gt;
=====New batch operations=====&lt;br /&gt;
*Set access level&lt;br /&gt;
*Copy or move to another part of this or another menu&lt;br /&gt;
&lt;br /&gt;
====Edit Item====&lt;br /&gt;
*Improved &amp;quot;Type&amp;quot; selector with human readable view and layout names&lt;br /&gt;
*Note field added&lt;br /&gt;
*New window target&lt;br /&gt;
*New Language assignment&lt;br /&gt;
*New Template style&lt;br /&gt;
*Ability to add &amp;amp; edit Module assignments from this page&lt;br /&gt;
&lt;br /&gt;
=====New options for the menu links and pages themselves=====&lt;br /&gt;
*Link title attribute&lt;br /&gt;
*Link CSS style&lt;br /&gt;
*Menu image is changed to a modal selector&lt;br /&gt;
*CSS class for page heading&lt;br /&gt;
*Page meta description&lt;br /&gt;
*Page meta keywords&lt;br /&gt;
*Robots options&lt;br /&gt;
&lt;br /&gt;
===Articles Manager===&lt;br /&gt;
*Frontpage is now referred to as Featured&lt;br /&gt;
*Article manager uses submenu to quickly skip between articles , categories and featured&lt;br /&gt;
*Sections and categories are now merged.&lt;br /&gt;
&lt;br /&gt;
====Articles List====&lt;br /&gt;
*&#039;&#039;&amp;quot;Missing move and copy; filter by author&amp;quot;&#039;&#039;&lt;br /&gt;
*New column to show language&lt;br /&gt;
*Filtering by language available&lt;br /&gt;
&lt;br /&gt;
====Article Edit====&lt;br /&gt;
*Created by user now selected by modal popup&lt;br /&gt;
*New ability to set the page title from the article&lt;br /&gt;
*Define create, delete, edit and publishing permissions&lt;br /&gt;
&lt;br /&gt;
====Archived Articles====&lt;br /&gt;
*In 1.5, Archived Articles had to first be changed to Published or Unpublished before update. &lt;br /&gt;
*In 1.6, an Article with an Archived Status *can* be changed without changing the State first.&lt;br /&gt;
&lt;br /&gt;
===Categories===&lt;br /&gt;
====Category List====&lt;br /&gt;
*Nested view&lt;br /&gt;
*Filtering on language&lt;br /&gt;
&lt;br /&gt;
====Edit Category====&lt;br /&gt;
*New note field&lt;br /&gt;
*Section replaced with ability to assign a parent category&lt;br /&gt;
*Ability to assign content language&lt;br /&gt;
&lt;br /&gt;
=====New Options (not previously available in 1.5)=====&lt;br /&gt;
*Assign alternate layout&lt;br /&gt;
*Define create, delete, edit and publishing permissions&lt;br /&gt;
*Meta description&lt;br /&gt;
*Meta keywords&lt;br /&gt;
*Alternative page title&lt;br /&gt;
*Meta author&lt;br /&gt;
*Meta robots&lt;br /&gt;
&lt;br /&gt;
===Banners===&lt;br /&gt;
====Banners list====&lt;br /&gt;
* Missing copy toolbar button&lt;br /&gt;
*New archive toolbar button&lt;br /&gt;
*New columns to show meta keywords, purchase type and language&lt;br /&gt;
*New filtering by client and language&lt;br /&gt;
&lt;br /&gt;
====Edit Banner====&lt;br /&gt;
*New type toggle for Image or Custom (dynamically changes the available form fields)&lt;br /&gt;
*New alt text field for image&lt;br /&gt;
*New language field&lt;br /&gt;
&lt;br /&gt;
=====New Options=====&lt;br /&gt;
*Ability to set the created date&lt;br /&gt;
*Ability to set start and finish publishing times&lt;br /&gt;
*Ability to set the purchase type&lt;br /&gt;
*Ability to track impressions&lt;br /&gt;
*Ability to track clicks&lt;br /&gt;
*Use own prefix ?&lt;br /&gt;
*Tags renamed to meta &lt;br /&gt;
*Contacts&lt;br /&gt;
*Messaging&lt;br /&gt;
*Newsfeeds&lt;br /&gt;
*Search&lt;br /&gt;
*Weblinks&lt;br /&gt;
*Redirect&lt;br /&gt;
&lt;br /&gt;
===Extensions Manager===&lt;br /&gt;
====Discover====&lt;br /&gt;
*Module mgr&lt;br /&gt;
*Plugin Mgr&lt;br /&gt;
*Template Mgr&lt;br /&gt;
*Language mgr&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
*Auto create linked contact when creating new user ??&lt;br /&gt;
&lt;br /&gt;
==Access Controls==&lt;br /&gt;
*Introduction&lt;br /&gt;
*User Groups&lt;br /&gt;
*Access Levels&lt;br /&gt;
*Permission Layers&lt;br /&gt;
*How Permissions are Inherited&lt;br /&gt;
*How to debrick your site&lt;br /&gt;
&lt;br /&gt;
==Developers==&lt;br /&gt;
===Introduction===&lt;br /&gt;
*PHP 5.2.4+&lt;br /&gt;
*MySQL 5.0.4 (allows for wide varchars)&lt;br /&gt;
*IE7+, Firefox 3+, Safari 4+&lt;br /&gt;
*Focus on code consistency&lt;br /&gt;
*Focus on code reduction&lt;br /&gt;
&lt;br /&gt;
Usage of PHP Native Functions where possible, for example:&lt;br /&gt;
*[[JXMLElement]] extends the native [http://php.net/manual/en/book.simplexml.php SimpleXML] class&lt;br /&gt;
*[[JDate]] extends the [http://www.php.net/manual/en/class.datetime.php DateTime] class&lt;br /&gt;
*Native INI parser to load languages&lt;br /&gt;
&lt;br /&gt;
===Removed features===&lt;br /&gt;
*ADODB compatibility methods in database classes&lt;br /&gt;
*DOMIT (unsupported XML library)&lt;br /&gt;
*Legacy mode (includes global $mainframe, etc)&lt;br /&gt;
*JTemplate (based on patTemplate)&lt;br /&gt;
*patTemplate (templating engine)&lt;br /&gt;
*PDF support&lt;br /&gt;
*PEAR libraries (due to license incompatibilities)&lt;br /&gt;
*phpgacl&lt;br /&gt;
*PHP 4.0 and 5.0 compatibility files&lt;br /&gt;
*XStandard Editor&lt;br /&gt;
&lt;br /&gt;
===Deprecated Features===&lt;br /&gt;
*JController::_acoSection&lt;br /&gt;
*JController::_acoSectionValue&lt;br /&gt;
*JController::authorize()&lt;br /&gt;
*JController::setAccessControl()&lt;br /&gt;
*JDatabase::stderr()&lt;br /&gt;
*JDate::offest&lt;br /&gt;
*JDate::setOffset()&lt;br /&gt;
*JDate::toFormat() - use JDate::format() instead&lt;br /&gt;
*JException::toString()&lt;br /&gt;
*JFactory::getXMLParser()&lt;br /&gt;
*JHtmlGird::access()&lt;br /&gt;
*JHtmlImage::administrator - use JHtml::image instead&lt;br /&gt;
*JHtmlImage::site - use JHtml::image instead&lt;br /&gt;
*JHtmlList::accesslevel()&lt;br /&gt;
*JHtmlList::specificordering() - use JHtml::_(&#039;list.ordering&#039;)&lt;br /&gt;
*JHtmlList::category()&lt;br /&gt;
*JHtmlSelect::optgroup() - see JHtmlSelect::groupedList()&lt;br /&gt;
*JLanguage::_parseLanguageFiles - renamed to parseLanguageFiles&lt;br /&gt;
*JLanguage::_parseXMLLanguageFile - renamed to parseXMLLanguageFile&lt;br /&gt;
*JLanguage::_parseXMLLanguageFiles - renamed to parseXMLLanguageFiles&lt;br /&gt;
*JObject::toString - replaced with magic method&lt;br /&gt;
*JRegistry::getNameSpaces()&lt;br /&gt;
*JRegistry::getValue()&lt;br /&gt;
*JRegistry::makeNameSpace()&lt;br /&gt;
*JRegistry::setValue()&lt;br /&gt;
*JPane - See JHtmlSliders&lt;br /&gt;
*JParameter - replaced by JForm&lt;br /&gt;
*JSimpleXML, JSimpleXMLElement - Use JXMLElement instead, based on the native SimpleXMLElement&lt;br /&gt;
*JTable::canDelete() - models or controllers should be doing the access checks&lt;br /&gt;
*JTable::toXML()&lt;br /&gt;
*JToolbarHelper customX(), addNewX(), editListX(), editHtmlX(), editCssX(), deleteListX()&lt;br /&gt;
*JUser::authorize() - Use JUser::authorise()&lt;br /&gt;
*JUtility::dump()&lt;br /&gt;
*JUtility::array_unshift_ref() - Not needed in PHP 5&lt;br /&gt;
*JUtility::getHash() - Use JApplication::getHash()&lt;br /&gt;
*JUtility::getToken() - Use JFactory::getSession()-&amp;gt;getFormToken()&lt;br /&gt;
*JUtility::isWinOS() - Use JApplication::isWinOS()&lt;br /&gt;
*JUtility::return_bytes() - See InstallerModelWarnings::return_bytes()&lt;br /&gt;
*JUtility::sendMail() - Use JFactory::getMailer()-&amp;gt;sendMail()&lt;br /&gt;
*JUtility::sendAdminMail() - Use JFactory::getMailer()-&amp;gt;sendMail()&lt;br /&gt;
*JXMLElement::data() - Provided for backward compatibility&lt;br /&gt;
*JXMLElement::getAttribute() - Provided for backward compatibility&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
*JTable now automatically looks up the fields from the database schema&lt;br /&gt;
*New JDatabaseQuery - A chained CRUD query builder&lt;br /&gt;
*New JDatabase::getNextRow&lt;br /&gt;
*New JDatabase::getNextObject&lt;br /&gt;
*JDatabase::loadAssocList  - Now takes a second argument to just return the value of a column&lt;br /&gt;
*JDatabase::setQuery  - Added chaining support&lt;br /&gt;
&lt;br /&gt;
====Important Schema Changes====&lt;br /&gt;
*New jos_extensions table to list all extensions&lt;br /&gt;
*Components table information moved and split between jos_extensions and jos_menu (special menu called _adminmenu)&lt;br /&gt;
&lt;br /&gt;
The old phpgacl (jos_core_acl*) and jos_groups tables have been reworked into:&lt;br /&gt;
*jos_assets&lt;br /&gt;
*jos_user_usergroup_map&lt;br /&gt;
*jos_usergroups&lt;br /&gt;
*jos_viewlevels&lt;br /&gt;
*Archived state changed from a value of -1 to +2&lt;br /&gt;
&lt;br /&gt;
===Improved MVC===&lt;br /&gt;
====Models====&lt;br /&gt;
*JModelList&lt;br /&gt;
*JModelForm&lt;br /&gt;
*JModelAdmin&lt;br /&gt;
*Format handling (eg JSON)&lt;br /&gt;
*Sub-controller handling&lt;br /&gt;
&lt;br /&gt;
====Controllers====&lt;br /&gt;
*JControllerForm&lt;br /&gt;
*JControllerAdmin&lt;br /&gt;
*JController::setMessage takes second arg to set the message type&lt;br /&gt;
*JController can set the default view&lt;br /&gt;
*Added chaining support to several JController methods&lt;br /&gt;
&lt;br /&gt;
====Views====&lt;br /&gt;
*Semantic core output&lt;br /&gt;
*Milkyway legacy layouts&lt;br /&gt;
*The old component parameters are not automatically added to the menu anymore. You need to explicitly put them in the layout XML files.&lt;br /&gt;
*The menu manager will now detect additional layouts for a given view in the default template.&lt;br /&gt;
&lt;br /&gt;
===Form API===&lt;br /&gt;
====Event manipulation====&lt;br /&gt;
*onContentPrepareForm&lt;br /&gt;
*onContentPrepareFormData&lt;br /&gt;
&lt;br /&gt;
===Translation and Language Support===&lt;br /&gt;
*Support for unicode slugs, eg, SEF URL&#039;s with Greek characters&lt;br /&gt;
*3-letter languages now supported, xxx-XX&lt;br /&gt;
*All existing language keys have been refactored&lt;br /&gt;
&lt;br /&gt;
====INI files must validate====&lt;br /&gt;
*Upper case key with no spaces, alphanumeric characters and underscores&lt;br /&gt;
*Quoted values&lt;br /&gt;
*Double quotes within literal strings must use _QQ_ in the form KEY=&amp;quot;&amp;lt;a href=&amp;quot;_QQ_&amp;quot;index.php&amp;quot;_QQ_&amp;quot;&amp;gt;Click&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Javascript translation layer====&lt;br /&gt;
*See the flash uploader script for an example&lt;br /&gt;
Local extension language files&lt;br /&gt;
&lt;br /&gt;
====Language file API====&lt;br /&gt;
*Pluralisation support&lt;br /&gt;
*Transliteration support for ASCII or Unicode slugs&lt;br /&gt;
*Ignore Search Words&lt;br /&gt;
*Minimum search word length&lt;br /&gt;
*Custom language overrides&lt;br /&gt;
*System language file to support administrator menu and installation (.sys.ini)&lt;br /&gt;
&lt;br /&gt;
====Language switcher====&lt;br /&gt;
*Language Filter plugin enables language switching&lt;br /&gt;
*Sets the automatic filtering via JFactory::getApplication()-&amp;gt;setLanguageFilter(true)&lt;br /&gt;
*A frontend component with language support would test JFactory::getApplication()-&amp;gt;getLanguageFilter(), which returns the selected language code from the Languages Module&lt;br /&gt;
*The language field can be a language code for a single language, or &amp;quot;*&amp;quot; to be displayed for all languages&lt;br /&gt;
*Community extension for language maintenance com_localise&lt;br /&gt;
&lt;br /&gt;
===Extension management===&lt;br /&gt;
====New installation types====&lt;br /&gt;
=====Libraries=====&lt;br /&gt;
*Must include an XML manifest where type=&amp;quot;library&amp;quot;&lt;br /&gt;
*Can only be installed into a sub-folder of /libraries/&lt;br /&gt;
*Can extend parts of an existing library, eg /libraries/joomla/database/database/oracle.php&lt;br /&gt;
&lt;br /&gt;
=====Packages multi-installer=====&lt;br /&gt;
*Must include an XML manifest where type=&amp;quot;package&amp;quot;&lt;br /&gt;
*A package is a zip of zip&#039;s&lt;br /&gt;
&lt;br /&gt;
New install script can be provided with 5 methods:&lt;br /&gt;
=====preflight=====&lt;br /&gt;
*Runs before anything is run and while the extracted files are in the uploaded temp folder&lt;br /&gt;
&lt;br /&gt;
======Could allow for:======&lt;br /&gt;
*secondary extraction of custom zip&#039;s&lt;br /&gt;
*version checks to be performed&lt;br /&gt;
*halting the installer on an error&lt;br /&gt;
&lt;br /&gt;
=====install / update=====&lt;br /&gt;
*Runs after the database scripts are executed&lt;br /&gt;
*If the extension is new, the install method is run&lt;br /&gt;
*If the extension exists then update method is run if method=&amp;quot;upgrade&amp;quot;, otherwise assumes that the extension is not meant to be upgradable&lt;br /&gt;
&lt;br /&gt;
=====postflight=====&lt;br /&gt;
*Runs after the extension is registered in the database&lt;br /&gt;
*Is not run for the uninstall process (nothing left to do obviously)&lt;br /&gt;
&lt;br /&gt;
====Discover====&lt;br /&gt;
*Does not do any file copying, only works with what it finds&lt;br /&gt;
*Performs preflight, install and postflight&lt;br /&gt;
*Developer of installer has two language files??&lt;br /&gt;
&lt;br /&gt;
====Update site====&lt;br /&gt;
*Can publish an XML manifest on your site that can include individual extensions and extension sets.&lt;br /&gt;
&lt;br /&gt;
====XML Manifest Changes====&lt;br /&gt;
*&amp;lt;install&amp;gt; is deprecated - use &amp;lt;extension&amp;gt;&lt;br /&gt;
*New &amp;lt;update&amp;gt; tag. Takes a &amp;lt;schemas&amp;gt; tag which can define &amp;lt;schemapath&amp;gt;&lt;br /&gt;
*&amp;lt;params&amp;gt; and &amp;lt;param&amp;gt; tags are deprecated, use &amp;lt;fields&amp;gt;, &amp;lt;fieldsets&amp;gt; and &amp;lt;field&amp;gt; instead&lt;br /&gt;
&lt;br /&gt;
====File changes====&lt;br /&gt;
*Installation manifest must be the same name as the extension, eg com_foobar/foobar.xml  This helps with discovery (otherwise the function has to go through all the files in the extension folder&lt;br /&gt;
*Plugins are now in folders like modules and components&lt;br /&gt;
*See SVN/tests/_data/installer_packages/ for complete examples of all extensions and manifests.&lt;br /&gt;
*The method=&amp;quot;upgrade&amp;quot; will compare individual files in the original and incoming manifests and will remove files as appropriate.  However, it will not remove differences in the &amp;lt;folder&amp;gt; tags.&lt;br /&gt;
*Future support for rollback&lt;br /&gt;
&lt;br /&gt;
===Events===&lt;br /&gt;
====New Events====&lt;br /&gt;
*onBeforeRender&lt;br /&gt;
*onContentBeforeDelete&lt;br /&gt;
*onContentAfterDelete&lt;br /&gt;
*onContentChangeState&lt;br /&gt;
*onContentPrepareForm&lt;br /&gt;
*onContentPrepareFormData&lt;br /&gt;
*onExtensionBeforeInstall&lt;br /&gt;
*onExtensionBeforeUpdate&lt;br /&gt;
*onExtensionBeforeUninstall&lt;br /&gt;
*onExtensionAfterInstall&lt;br /&gt;
*onExtensionAfterUpdate&lt;br /&gt;
*onExtensionAfterUninstall&lt;br /&gt;
&lt;br /&gt;
====Renamed Events====&lt;br /&gt;
*onContentAfterSave&lt;br /&gt;
*onContentAfterTitle&lt;br /&gt;
*onContentAfterDisplay&lt;br /&gt;
*onContentBeforeDisplay&lt;br /&gt;
*onContentBeforeSave&lt;br /&gt;
*onContentSearch&lt;br /&gt;
*onContentSearchAreas&lt;br /&gt;
*onUserAuthenticate&lt;br /&gt;
*onUserAfterDelete&lt;br /&gt;
*onUserAfterSave&lt;br /&gt;
*onUserBeforeDelete&lt;br /&gt;
*onUserBeforeSave&lt;br /&gt;
*onUserLogin&lt;br /&gt;
*onUserLogout&lt;br /&gt;
*All content events (except for search and search areas) now pass a &#039;context&#039; as the first argument to alert the plugin as to what type of content is being passed.  The plugin event may or may not heed this context.&lt;br /&gt;
&lt;br /&gt;
===Categories===&lt;br /&gt;
*Component can provide custom options for its own categories via optional category.xml&lt;br /&gt;
*Supported via JTableNested&lt;br /&gt;
&lt;br /&gt;
===Access Controls===&lt;br /&gt;
*A thing that can be controlled by permissions is registered in the assets table&lt;br /&gt;
*JTable handles this transparently via asset_id field&lt;br /&gt;
*For view permissions, support is as simple as adding&lt;br /&gt;
:::$user = JFactory::getUser();&lt;br /&gt;
:::$groups = implode(&#039;,&#039;, $user-&amp;gt;authorisedLevels());&lt;br /&gt;
:::$query-&amp;gt;where(&#039;a.access IN (&#039; . $groups . &#039;)&#039;);&lt;br /&gt;
&lt;br /&gt;
For action permissions, same format as in 1.5:&lt;br /&gt;
$user-&amp;gt;authorise($actionName, $assetName)&lt;br /&gt;
*OpenID library moved to plugin folder&lt;br /&gt;
*Geshi library moved to plugin folder&lt;br /&gt;
*JRegistry notes defaults to JSON (new format), dynamically converting existing data in INI format&lt;br /&gt;
*New JStream&lt;br /&gt;
*New JApplicationHelper::getComponentName&lt;br /&gt;
*Core icons moved to /media/&lt;br /&gt;
*Backward incompatible change to JEditor::display&lt;br /&gt;
*Added chaining support to JMail&lt;br /&gt;
*JFilterInput can no longer be called statically&lt;br /&gt;
*JHtml::image now supports relative paths&lt;br /&gt;
*All system images are overridable in the default template&lt;br /&gt;
*New JHtmlString&lt;br /&gt;
*Added wincache session handler for IIS&lt;br /&gt;
*New JFilterOutput::stripImages&lt;br /&gt;
*JPath::check takes second arg for separator (to pass to JPath::clean)&lt;br /&gt;
*Expanded configuration support through config.xml (multiple tabs)&lt;br /&gt;
&lt;br /&gt;
====Core actions====&lt;br /&gt;
*core.login.site&lt;br /&gt;
*core.login.admin&lt;br /&gt;
*core.admin&lt;br /&gt;
*core.manage&lt;br /&gt;
*core.create&lt;br /&gt;
*core.edit&lt;br /&gt;
*core.edit.state&lt;br /&gt;
*core.delete&lt;br /&gt;
*Miscellaneous changes&lt;br /&gt;
&lt;br /&gt;
===Debug Plugin===&lt;br /&gt;
*More tools for assisting with translation&lt;br /&gt;
&lt;br /&gt;
===Mootools 1.3===&lt;br /&gt;
*Need to use document.id instead of $&lt;br /&gt;
&lt;br /&gt;
==Cache changes ==&lt;br /&gt;
===API changes relevant to 3rd party developers===&lt;br /&gt;
====Component view cache==== &lt;br /&gt;
&lt;br /&gt;
Component view cache now takes an array of url parameters and their types to create Cacheid. This is a replacement for a previous unsafe way which took the whole URL for this and so opened the doors for DOS attacks via random url parameters added to request URL&#039;s. &lt;br /&gt;
&lt;br /&gt;
Com_contact example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$safeurlparams = array(&lt;br /&gt;
    &#039;id&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;catid&#039;=&amp;gt;&#039;INT&#039;, &#039;limit&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;limitstart&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;filter_order&#039;=&amp;gt;&#039;CMD&#039;, &lt;br /&gt;
    &#039;filter_order_Dir&#039;=&amp;gt;&#039;CMD&#039;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
parent::display($cachable,$safeurlparams);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old cacheid created from URL was retained for backwards compatibility and takes effect if there are no $safeurlparams.&lt;br /&gt;
&lt;br /&gt;
====Module cache====&lt;br /&gt;
This has been completly reconceptualized. Module cache now has 5 different modes of operation, 3 of them are to be set from module XML file, while 2 are meant to be used from within the module itself. Default is backwards compatible oldstatic mode that requires no changes to a module. &lt;br /&gt;
&lt;br /&gt;
Modes to be set in XML: &lt;br /&gt;
*&#039;&#039;&#039;static&#039;&#039;&#039; - one cache file for all pages with the same module parameters &lt;br /&gt;
*&#039;&#039;&#039;oldstatic&#039;&#039;&#039; - 1.5. definition of module caching, one cache file for all pages with the same module id and user aid. Default for backwards compatibility &lt;br /&gt;
*&#039;&#039;&#039;itemid&#039;&#039;&#039; - changes on itemid change &lt;br /&gt;
&lt;br /&gt;
In addition to cache field that was required in 1.5 there is now another hidden field called cachemode that sets any of the above modes. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;cachemode&amp;quot; type=&amp;quot;hidden&amp;quot; label=&amp;quot;&amp;quot; default=&amp;quot;static&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;option value=&amp;quot;static&amp;quot;&amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modes to be called from inside the module: &lt;br /&gt;
*&#039;&#039;&#039;safeuri&#039;&#039;&#039; - id is created from $cacheparams-&amp;gt;modeparams array, the same as in component view cache &lt;br /&gt;
*&#039;&#039;&#039;id&#039;&#039;&#039; - module sets own cache id&#039;s &lt;br /&gt;
&lt;br /&gt;
To use this modes one must rename cache field in xml to owncache field and call JModuleHelper::ModuleCache from within the module&#039;s main php file. This is actually a shortcut to cache callback to avoid code duplication in every module. &lt;br /&gt;
&lt;br /&gt;
An example that uses safeuri mode and replaces uncached&lt;br /&gt;
$list = modRelatedItemsHelper::getList($params) : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$cacheparams = new stdClass; &lt;br /&gt;
$cacheparams-&amp;gt;cachemode = &#039;safeuri&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;class = &#039;modRelatedItemsHelper&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;method = &#039;getList&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;methodparams = $params; &lt;br /&gt;
$cacheparams-&amp;gt;modeparams = array(&#039;id&#039;=&amp;gt;&#039;int&#039;,&#039;Itemid&#039;=&amp;gt;&#039;int&#039;); &lt;br /&gt;
$list = JModuleHelper::ModuleCache ($module, $params, $cacheparams);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Functional changes==== &lt;br /&gt;
&#039;&#039;&#039;Cache administration (Clean cache, Purge cache) now works with all drivers&#039;&#039;&#039;, not only with file cache. &lt;br /&gt;
&#039;&#039;&#039;New standalone garbage collect script&#039;&#039;&#039; that is to be called from crontab has been added. It can be found in libraries/joomla/utilities/garbagecron.php . For safety reasons it is recommended that it is renamed to something unique.&lt;br /&gt;
&lt;br /&gt;
====CMS and framework level functional changes==== &lt;br /&gt;
&#039;&#039;&#039;Caching is implemented in all components and modules&#039;&#039;&#039; that can potentially gain from cache.&lt;br /&gt;
Caching has also been added to some most expensive and frequent framework calls JComponentHelper::_load(), JModuleHelper::_load(),JMenuSite::load(); &lt;br /&gt;
&lt;br /&gt;
====Cache library changes====&lt;br /&gt;
Cache library has been completely refactored. &lt;br /&gt;
*Cache &#039;&#039;&#039;handlers have been renamed to controllers&#039;&#039;&#039; to better reflect their role and avoid confusion with cache storage handlers (referred to as drivers in following text). &lt;br /&gt;
*&#039;&#039;&#039;New JCacheController&#039;&#039;&#039; parent class has been added and inheritance has been changed to prevent bugs occurring from controller&#039;s and storage handler&#039;s get method clashes. &lt;br /&gt;
&lt;br /&gt;
====JCache==== &lt;br /&gt;
*&#039;&#039;&#039;getAll()&#039;&#039;&#039; method was added to JCache, JCacheStorage and all drivers, and it returns all cached items (this was previously possible only with file driver and hardcoded in administration) &lt;br /&gt;
*New &#039;&#039;&#039;lock and unlock&#039;&#039;&#039; methods were added to JCache, JCacheStorage and drivers. They enable cache item locking and unlocking to prevent errors on parallel accesses and double saves. This functionally was also implemented in controllers. &lt;br /&gt;
*Workarounds are now consolidated in new &#039;&#039;&#039;JCache getWorkarounds and setWorkarounds&#039;&#039;&#039; methods, are now used by all controllers and their use has been made optional. &lt;br /&gt;
*New makeId() method in JCache that creates cache id from registered url parameters set by components and system plugins&lt;br /&gt;
&lt;br /&gt;
====JCacheController==== &lt;br /&gt;
New parent class to Controllers that also functions as an intermediate to JCache. There is no JObject inheritance as otherwise magic __call doesn&#039;t work. &lt;br /&gt;
Change was needed to prevent bugs occurring from controller&#039;s and storage handler&#039;s get method clashes. They could be renamed but this would break backwards compatibility.&lt;br /&gt;
&lt;br /&gt;
====JCacheStorage==== &lt;br /&gt;
*_getCacheId method was moved from drivers to their parent JCacheStorage and all drives now use the same method by default &lt;br /&gt;
*CacheItem was moved from cache admin to framework JCacheStorageHelper, it is used by getAll &lt;br /&gt;
*There are new cachelite and wincache drivers. All other drivers have been fixed with missing functions (gc, clean) added, their code cleaned and tested they should be now working properly. &lt;br /&gt;
*Replaced separate _expire files in filecache driver with timestamps (this should amount to cca. 40% speed gain). The same in all drivers that had this. &lt;br /&gt;
*Numerous bugfixes on all levels, most important is proper use of options defaulting to configuration parameters settings and correctly passing from level to level.&lt;br /&gt;
&lt;br /&gt;
====Other framework level changes==== &lt;br /&gt;
*Safe url parameters registration added to JControler view method. &lt;br /&gt;
*New ModuleCache method in JModuleHelper that performs the above described module cache (in 5 modes) for both, modules and module renderer. &lt;br /&gt;
*JFactory::getFeedParser has been changed to use Joomla caching instead of simplepie&#039;s.&lt;br /&gt;
&lt;br /&gt;
==Performance==&lt;br /&gt;
===Eliminate the usage of JTable for general browsing on the frontend===&lt;br /&gt;
*Session drops the usage of JTable&lt;br /&gt;
*Item views use a dedicated question, not JTable-&amp;gt;load&lt;br /&gt;
&lt;br /&gt;
==Known Issues==&lt;br /&gt;
*Scaling issues to address&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
===Releases===&lt;br /&gt;
*Alpha 1: 22 June 2009&lt;br /&gt;
*Alpha 2: 25 October 2009&lt;br /&gt;
*Beta 01: 18 May 2010&lt;br /&gt;
*Beta 02: 31 May 2010&lt;br /&gt;
*Beta 03: 14 June 2010&lt;br /&gt;
*Beta 04: 28 June 2010&lt;br /&gt;
*Beta 05: 12 July 2010&lt;br /&gt;
*Beta 06: 26 July 2010&lt;br /&gt;
*Beta 07: 09 August 2010&lt;br /&gt;
*Beta 08: 23 August 2010&lt;br /&gt;
*Beta 09: 06 September 2010&lt;br /&gt;
*Beta 10: 20 September 2010&lt;br /&gt;
*Beta 11: 03 October 2010&lt;br /&gt;
*Beta 12: 17 October 2010&lt;br /&gt;
*Beta 13: 31 October 2010&lt;br /&gt;
*Beta 14: 14 November 2010&lt;br /&gt;
*Beta 15: 29 November 2010&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=31926</id>
		<title>J2.5:What&#039;s new in Joomla 2.5</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:What%27s_new_in_Joomla_2.5&amp;diff=31926"/>
		<updated>2010-11-18T20:58:23Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Added beta release dates for  beta 11 - 14&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The principal changes introduced in Joomla 1.6 are:-&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;New Access Control System&#039;&#039;&#039; - Allows site administrators control over who can view and manage content.&lt;br /&gt;
* &#039;&#039;&#039;Unlimited Depth Organizational Model&#039;&#039;&#039; - Gives site administrators and content creators user-defined category levels that allow for the creation of a category tree with as many or as few levels for organizing articles and other content as needed.&lt;br /&gt;
* &#039;&#039;&#039;One-Click Extension Updates&#039;&#039;&#039; - Allows users to keep sites secure and controlled by simplifying the process of updating extensions.&lt;br /&gt;
* &#039;&#039;&#039;Semantic XHTML Layouts&#039;&#039;&#039; - Provides a better baseline for content presentation.&lt;br /&gt;
&lt;br /&gt;
The following is a more complete list of changes.&lt;br /&gt;
==Administrators==&lt;br /&gt;
===Introduction===&lt;br /&gt;
*Consistent UI&lt;br /&gt;
*Consistent Features&lt;br /&gt;
*Richer sample data&lt;br /&gt;
*IE 7+, Firefox 3.x, Safari 4.x&lt;br /&gt;
*PHP 5.2.4+&lt;br /&gt;
*MySQL 5.0.4 (allows for wide varchars)&lt;br /&gt;
&lt;br /&gt;
===Administrator===&lt;br /&gt;
*Menu Changes&lt;br /&gt;
*Submenu consistency&lt;br /&gt;
&lt;br /&gt;
====Toolbar Features====&lt;br /&gt;
*Save&lt;br /&gt;
*Save &amp;amp; Close&lt;br /&gt;
*Save &amp;amp; New&lt;br /&gt;
*Save as Copy&lt;br /&gt;
*Expired session will return to the page you were on then you got logged out (can be hit and miss)&lt;br /&gt;
*Most search filters allow you to search for a record id via [ id:123 ]&lt;br /&gt;
*&amp;quot;Parameters&amp;quot; are now referred to as &amp;quot;Options&amp;quot;&lt;br /&gt;
*Template Styles&lt;br /&gt;
*Integrated Trash Management&lt;br /&gt;
*Consistent archive support for most content&lt;br /&gt;
*Extension Installer Improvements&lt;br /&gt;
&lt;br /&gt;
===Module Enhancements===&lt;br /&gt;
*Publish up and down&lt;br /&gt;
*Add option to display on all pages &amp;quot;except&amp;quot; selected&lt;br /&gt;
*Expanded Category System&lt;br /&gt;
*404 Page Redirection&lt;br /&gt;
*Better Menu Management&lt;br /&gt;
*Alternative layouts for content, modules and menus (taken from the home template)&lt;br /&gt;
&lt;br /&gt;
===New Templates===&lt;br /&gt;
*Atomic&lt;br /&gt;
*Beez2&lt;br /&gt;
*(Administrator) Bluestork (replaces Khephri)&lt;br /&gt;
*(Administrator) Hathor&lt;br /&gt;
*Legacy layer in Milkyway&lt;br /&gt;
*Backend supports layout overrides&lt;br /&gt;
*New Modules&lt;br /&gt;
*New Plugins&lt;br /&gt;
*Content Languages&lt;br /&gt;
*User Login Permissions&lt;br /&gt;
*Activate selected users from the user list now (and filter)&lt;br /&gt;
*Administrator registration approval&lt;br /&gt;
*Polls component removed&lt;br /&gt;
*New codemirror editor&lt;br /&gt;
&lt;br /&gt;
===SEO Improvements===&lt;br /&gt;
*Meta decription and keywords for categories&lt;br /&gt;
*Articles can change the page title and page header separately&lt;br /&gt;
&lt;br /&gt;
===Global Configuration===&lt;br /&gt;
*Add site name to titles&lt;br /&gt;
*Default Access Level&lt;br /&gt;
*Set Metadata Language (buggy)&lt;br /&gt;
*Unicode Aliases&lt;br /&gt;
*Cookie domain and path&lt;br /&gt;
*User Setting moved to User Manager -&amp;gt; Options&lt;br /&gt;
*Media Settings moved to Media Manager -&amp;gt; Options&lt;br /&gt;
*Debug Modules - allows you to enabled to disable the tp=1 feature&lt;br /&gt;
*Server Timezone now a location, not an integer offset&lt;br /&gt;
*New Global Permissions tab&lt;br /&gt;
&lt;br /&gt;
===User Manager===&lt;br /&gt;
*Can activate a user from the list now&lt;br /&gt;
*User can be assigned to multiple groups&lt;br /&gt;
*Manage user groups&lt;br /&gt;
*Manager content access levels&lt;br /&gt;
&lt;br /&gt;
===Media Manager===&lt;br /&gt;
*Flash uploader fixed&lt;br /&gt;
&lt;br /&gt;
===Menu Manager===&lt;br /&gt;
====Menus List====&lt;br /&gt;
*Rebuild button to press when you brick the menu&lt;br /&gt;
*Clicking the menu name brings up the menu items list rather than going into Edit Menu. To edit the menu, click on the check box next to the name and click on the Edit icon in the toolbar.&lt;br /&gt;
&lt;br /&gt;
====Items List====&lt;br /&gt;
*Menus support the language filter&lt;br /&gt;
*Default now called Home&lt;br /&gt;
*Home is now clickable in the menu item list&lt;br /&gt;
*A separate home can be set for different languages&lt;br /&gt;
&lt;br /&gt;
=====New batch operations=====&lt;br /&gt;
*Set access level&lt;br /&gt;
*Copy or move to another part of this or another menu&lt;br /&gt;
&lt;br /&gt;
====Edit Item====&lt;br /&gt;
*Improved &amp;quot;Type&amp;quot; selector with human readable view and layout names&lt;br /&gt;
*Note field added&lt;br /&gt;
*New window target&lt;br /&gt;
*New Language assignment&lt;br /&gt;
*New Template style&lt;br /&gt;
*Ability to add &amp;amp; edit Module assignments from this page&lt;br /&gt;
&lt;br /&gt;
=====New options for the menu links and pages themselves=====&lt;br /&gt;
*Link title attribute&lt;br /&gt;
*Link CSS style&lt;br /&gt;
*Menu image is changed to a modal selector&lt;br /&gt;
*CSS class for page heading&lt;br /&gt;
*Page meta description&lt;br /&gt;
*Page meta keywords&lt;br /&gt;
*Robots options&lt;br /&gt;
&lt;br /&gt;
===Articles Manager===&lt;br /&gt;
*Frontpage is now referred to as Featured&lt;br /&gt;
*Article manager uses submenu to quickly skip between articles , categories and featured&lt;br /&gt;
*Sections and categories are now merged.&lt;br /&gt;
&lt;br /&gt;
====Articles List====&lt;br /&gt;
*&#039;&#039;&amp;quot;Missing move and copy; filter by author&amp;quot;&#039;&#039;&lt;br /&gt;
*New column to show language&lt;br /&gt;
*Filtering by language available&lt;br /&gt;
&lt;br /&gt;
====Article Edit====&lt;br /&gt;
*Created by user now selected by modal popup&lt;br /&gt;
*New ability to set the page title from the article&lt;br /&gt;
*Define create, delete, edit and publishing permissions&lt;br /&gt;
&lt;br /&gt;
====Archived Articles====&lt;br /&gt;
*In 1.5, Archived Articles had to first be changed to Published or Unpublished before update. &lt;br /&gt;
*In 1.6, an Article with an Archived Status *can* be changed without changing the State first.&lt;br /&gt;
&lt;br /&gt;
===Categories===&lt;br /&gt;
====Category List====&lt;br /&gt;
*Nested view&lt;br /&gt;
*Filtering on language&lt;br /&gt;
&lt;br /&gt;
====Edit Category====&lt;br /&gt;
*New note field&lt;br /&gt;
*Section replaced with ability to assign a parent category&lt;br /&gt;
*Ability to assign content language&lt;br /&gt;
&lt;br /&gt;
=====New Options (not previously available in 1.5)=====&lt;br /&gt;
*Assign alternate layout&lt;br /&gt;
*Define create, delete, edit and publishing permissions&lt;br /&gt;
*Meta description&lt;br /&gt;
*Meta keywords&lt;br /&gt;
*Alternative page title&lt;br /&gt;
*Meta author&lt;br /&gt;
*Meta robots&lt;br /&gt;
&lt;br /&gt;
===Banners===&lt;br /&gt;
====Banners list====&lt;br /&gt;
* Missing copy toolbar button&lt;br /&gt;
*New archive toolbar button&lt;br /&gt;
*New columns to show meta keywords, purchase type and language&lt;br /&gt;
*New filtering by client and language&lt;br /&gt;
&lt;br /&gt;
====Edit Banner====&lt;br /&gt;
*New type toggle for Image or Custom (dynamically changes the available form fields)&lt;br /&gt;
*New alt text field for image&lt;br /&gt;
*New language field&lt;br /&gt;
&lt;br /&gt;
=====New Options=====&lt;br /&gt;
*Ability to set the created date&lt;br /&gt;
*Ability to set start and finish publishing times&lt;br /&gt;
*Ability to set the purchase type&lt;br /&gt;
*Ability to track impressions&lt;br /&gt;
*Ability to track clicks&lt;br /&gt;
*Use own prefix ?&lt;br /&gt;
*Tags renamed to meta &lt;br /&gt;
*Contacts&lt;br /&gt;
*Messaging&lt;br /&gt;
*Newsfeeds&lt;br /&gt;
*Search&lt;br /&gt;
*Weblinks&lt;br /&gt;
*Redirect&lt;br /&gt;
&lt;br /&gt;
===Extensions Manager===&lt;br /&gt;
====Discover====&lt;br /&gt;
*Module mgr&lt;br /&gt;
*Plugin Mgr&lt;br /&gt;
*Template Mgr&lt;br /&gt;
*Language mgr&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
*Auto create linked contact when creating new user ??&lt;br /&gt;
&lt;br /&gt;
==Access Controls==&lt;br /&gt;
*Introduction&lt;br /&gt;
*User Groups&lt;br /&gt;
*Access Levels&lt;br /&gt;
*Permission Layers&lt;br /&gt;
*How Permissions are Inherited&lt;br /&gt;
*How to debrick your site&lt;br /&gt;
&lt;br /&gt;
==Developers==&lt;br /&gt;
===Introduction===&lt;br /&gt;
*PHP 5.2.4+&lt;br /&gt;
*MySQL 5.0.4 (allows for wide varchars)&lt;br /&gt;
*IE7+, Firefox 3+, Safari 4+&lt;br /&gt;
*Focus on code consistency&lt;br /&gt;
*Focus on code reduction&lt;br /&gt;
&lt;br /&gt;
Usage of PHP Native Functions where possible, for example:&lt;br /&gt;
*[[JXMLElement]] extends the native [http://php.net/manual/en/book.simplexml.php SimpleXML] class&lt;br /&gt;
*[[JDate]] extends the [http://www.php.net/manual/en/class.datetime.php DateTime] class&lt;br /&gt;
*Native INI parser to load languages&lt;br /&gt;
&lt;br /&gt;
===Removed features===&lt;br /&gt;
*ADODB compatibility methods in database classes&lt;br /&gt;
*DOMIT (unsupported XML library)&lt;br /&gt;
*Legacy mode (includes global $mainframe, etc)&lt;br /&gt;
*JTemplate (based on patTemplate)&lt;br /&gt;
*patTemplate (templating engine)&lt;br /&gt;
*PDF support&lt;br /&gt;
*PEAR libraries (due to license incompatibilities)&lt;br /&gt;
*phpgacl&lt;br /&gt;
*PHP 4.0 and 5.0 compatibility files&lt;br /&gt;
*XStandard Editor&lt;br /&gt;
&lt;br /&gt;
===Deprecated Features===&lt;br /&gt;
*JController::_acoSection&lt;br /&gt;
*JController::_acoSectionValue&lt;br /&gt;
*JController::authorize()&lt;br /&gt;
*JController::setAccessControl()&lt;br /&gt;
*JDatabase::stderr()&lt;br /&gt;
*JDate::offest&lt;br /&gt;
*JDate::setOffset()&lt;br /&gt;
*JDate::toFormat() - use JDate::format() instead&lt;br /&gt;
*JException::toString()&lt;br /&gt;
*JFactory::getXMLParser()&lt;br /&gt;
*JHtmlGird::access()&lt;br /&gt;
*JHtmlImage::administrator - use JHtml::image instead&lt;br /&gt;
*JHtmlImage::site - use JHtml::image instead&lt;br /&gt;
*JHtmlList::accesslevel()&lt;br /&gt;
*JHtmlList::specificordering() - use JHtml::_(&#039;list.ordering&#039;)&lt;br /&gt;
*JHtmlList::category()&lt;br /&gt;
*JHtmlSelect::optgroup() - see JHtmlSelect::groupedList()&lt;br /&gt;
*JLanguage::_parseLanguageFiles - renamed to parseLanguageFiles&lt;br /&gt;
*JLanguage::_parseXMLLanguageFile - renamed to parseXMLLanguageFile&lt;br /&gt;
*JLanguage::_parseXMLLanguageFiles - renamed to parseXMLLanguageFiles&lt;br /&gt;
*JObject::toString - replaced with magic method&lt;br /&gt;
*JRegistry::getNameSpaces()&lt;br /&gt;
*JRegistry::getValue()&lt;br /&gt;
*JRegistry::makeNameSpace()&lt;br /&gt;
*JRegistry::setValue()&lt;br /&gt;
*JPane - See JHtmlSliders&lt;br /&gt;
*JParameter - replaced by JForm&lt;br /&gt;
*JSimpleXML, JSimpleXMLElement - Use JXMLElement instead, based on the native SimpleXMLElement&lt;br /&gt;
*JTable::canDelete() - models or controllers should be doing the access checks&lt;br /&gt;
*JTable::toXML()&lt;br /&gt;
*JToolbarHelper customX(), addNewX(), editListX(), editHtmlX(), editCssX(), deleteListX()&lt;br /&gt;
*JUser::authorize() - Use JUser::authorise()&lt;br /&gt;
*JUtility::dump()&lt;br /&gt;
*JUtility::array_unshift_ref() - Not needed in PHP 5&lt;br /&gt;
*JUtility::getHash() - Use JApplication::getHash()&lt;br /&gt;
*JUtility::getToken() - Use JFactory::getSession()-&amp;gt;getFormToken()&lt;br /&gt;
*JUtility::isWinOS() - Use JApplication::isWinOS()&lt;br /&gt;
*JUtility::return_bytes() - See InstallerModelWarnings::return_bytes()&lt;br /&gt;
*JUtility::sendMail() - Use JFactory::getMailer()-&amp;gt;sendMail()&lt;br /&gt;
*JUtility::sendAdminMail() - Use JFactory::getMailer()-&amp;gt;sendMail()&lt;br /&gt;
*JXMLElement::data() - Provided for backward compatibility&lt;br /&gt;
*JXMLElement::getAttribute() - Provided for backward compatibility&lt;br /&gt;
&lt;br /&gt;
===Database===&lt;br /&gt;
*JTable now automatically looks up the fields from the database schema&lt;br /&gt;
*New JDatabaseQuery - A chained CRUD query builder&lt;br /&gt;
*New JDatabase::getNextRow&lt;br /&gt;
*New JDatabase::getNextObject&lt;br /&gt;
*JDatabase::loadAssocList  - Now takes a second argument to just return the value of a column&lt;br /&gt;
*JDatabase::setQuery  - Added chaining support&lt;br /&gt;
&lt;br /&gt;
====Important Schema Changes====&lt;br /&gt;
*New jos_extensions table to list all extensions&lt;br /&gt;
*Components table information moved and split between jos_extensions and jos_menu (special menu called _adminmenu)&lt;br /&gt;
&lt;br /&gt;
The old phpgacl (jos_core_acl*) and jos_groups tables have been reworked into:&lt;br /&gt;
*jos_assets&lt;br /&gt;
*jos_user_usergroup_map&lt;br /&gt;
*jos_usergroups&lt;br /&gt;
*jos_viewlevels&lt;br /&gt;
*Archived state changed from a value of -1 to +2&lt;br /&gt;
&lt;br /&gt;
===Improved MVC===&lt;br /&gt;
====Models====&lt;br /&gt;
*JModelList&lt;br /&gt;
*JModelForm&lt;br /&gt;
*JModelAdmin&lt;br /&gt;
*Format handling (eg JSON)&lt;br /&gt;
*Sub-controller handling&lt;br /&gt;
&lt;br /&gt;
====Controllers====&lt;br /&gt;
*JControllerForm&lt;br /&gt;
*JControllerAdmin&lt;br /&gt;
*JController::setMessage takes second arg to set the message type&lt;br /&gt;
*JController can set the default view&lt;br /&gt;
*Added chaining support to several JController methods&lt;br /&gt;
&lt;br /&gt;
====Views====&lt;br /&gt;
*Semantic core output&lt;br /&gt;
*Milkyway legacy layouts&lt;br /&gt;
*The old component parameters are not automatically added to the menu anymore. You need to explicitly put them in the layout XML files.&lt;br /&gt;
*The menu manager will now detect additional layouts for a given view in the default template.&lt;br /&gt;
&lt;br /&gt;
===Form API===&lt;br /&gt;
====Event manipulation====&lt;br /&gt;
*onContentPrepareForm&lt;br /&gt;
*onContentPrepareFormData&lt;br /&gt;
&lt;br /&gt;
===Translation and Language Support===&lt;br /&gt;
*Support for unicode slugs, eg, SEF URL&#039;s with Greek characters&lt;br /&gt;
*3-letter languages now supported, xxx-XX&lt;br /&gt;
*All existing language keys have been refactored&lt;br /&gt;
&lt;br /&gt;
====INI files must validate====&lt;br /&gt;
*Upper case key with no spaces, alphanumeric characters and underscores&lt;br /&gt;
*Quoted values&lt;br /&gt;
*Double quotes within literal strings must use _QQ_ in the form KEY=&amp;quot;&amp;lt;a href=&amp;quot;_QQ_&amp;quot;index.php&amp;quot;_QQ_&amp;quot;&amp;gt;Click&amp;lt;/a&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Javascript translation layer====&lt;br /&gt;
*See the flash uploader script for an example&lt;br /&gt;
Local extension language files&lt;br /&gt;
&lt;br /&gt;
====Language file API====&lt;br /&gt;
*Pluralisation support&lt;br /&gt;
*Transliteration support for ASCII or Unicode slugs&lt;br /&gt;
*Ignore Search Words&lt;br /&gt;
*Minimum search word length&lt;br /&gt;
*Custom language overrides&lt;br /&gt;
*System language file to support administrator menu and installation (.sys.ini)&lt;br /&gt;
&lt;br /&gt;
====Language switcher====&lt;br /&gt;
*Language Filter plugin enables language switching&lt;br /&gt;
*Sets the automatic filtering via JFactory::getApplication()-&amp;gt;setLanguageFilter(true)&lt;br /&gt;
*A frontend component with language support would test JFactory::getApplication()-&amp;gt;getLanguageFilter(), which returns the selected language code from the Languages Module&lt;br /&gt;
*The language field can be a language code for a single language, or &amp;quot;*&amp;quot; to be displayed for all languages&lt;br /&gt;
*Community extension for language maintenance com_localise&lt;br /&gt;
&lt;br /&gt;
===Extension management===&lt;br /&gt;
====New installation types====&lt;br /&gt;
=====Libraries=====&lt;br /&gt;
*Must include an XML manifest where type=&amp;quot;library&amp;quot;&lt;br /&gt;
*Can only be installed into a sub-folder of /libraries/&lt;br /&gt;
*Can extend parts of an existing library, eg /libraries/joomla/database/database/oracle.php&lt;br /&gt;
&lt;br /&gt;
=====Packages multi-installer=====&lt;br /&gt;
*Must include an XML manifest where type=&amp;quot;package&amp;quot;&lt;br /&gt;
*A package is a zip of zip&#039;s&lt;br /&gt;
&lt;br /&gt;
New install script can be provided with 5 methods:&lt;br /&gt;
=====preflight=====&lt;br /&gt;
*Runs before anything is run and while the extracted files are in the uploaded temp folder&lt;br /&gt;
&lt;br /&gt;
======Could allow for:======&lt;br /&gt;
*secondary extraction of custom zip&#039;s&lt;br /&gt;
*version checks to be performed&lt;br /&gt;
*halting the installer on an error&lt;br /&gt;
&lt;br /&gt;
=====install / update=====&lt;br /&gt;
*Runs after the database scripts are executed&lt;br /&gt;
*If the extension is new, the install method is run&lt;br /&gt;
*If the extension exists then update method is run if method=&amp;quot;upgrade&amp;quot;, otherwise assumes that the extension is not meant to be upgradable&lt;br /&gt;
&lt;br /&gt;
=====postflight=====&lt;br /&gt;
*Runs after the extension is registered in the database&lt;br /&gt;
*Is not run for the uninstall process (nothing left to do obviously)&lt;br /&gt;
&lt;br /&gt;
====Discover====&lt;br /&gt;
*Does not do any file copying, only works with what it finds&lt;br /&gt;
*Performs preflight, install and postflight&lt;br /&gt;
*Developer of installer has two language files??&lt;br /&gt;
&lt;br /&gt;
====Update site====&lt;br /&gt;
*Can publish an XML manifest on your site that can include individual extensions and extension sets.&lt;br /&gt;
&lt;br /&gt;
====XML Manifest Changes====&lt;br /&gt;
*&amp;lt;install&amp;gt; is deprecated - use &amp;lt;extension&amp;gt;&lt;br /&gt;
*New &amp;lt;update&amp;gt; tag. Takes a &amp;lt;schemas&amp;gt; tag which can define &amp;lt;schemapath&amp;gt;&lt;br /&gt;
*&amp;lt;params&amp;gt; and &amp;lt;param&amp;gt; tags are deprecated, use &amp;lt;fields&amp;gt;, &amp;lt;fieldsets&amp;gt; and &amp;lt;field&amp;gt; instead&lt;br /&gt;
&lt;br /&gt;
====File changes====&lt;br /&gt;
*Installation manifest must be the same name as the extension, eg com_foobar/foobar.xml  This helps with discovery (otherwise the function has to go through all the files in the extension folder&lt;br /&gt;
*Plugins are now in folders like modules and components&lt;br /&gt;
*See SVN/tests/_data/installer_packages/ for complete examples of all extensions and manifests.&lt;br /&gt;
*The method=&amp;quot;upgrade&amp;quot; will compare individual files in the original and incoming manifests and will remove files as appropriate.  However, it will not remove differences in the &amp;lt;folder&amp;gt; tags.&lt;br /&gt;
*Future support for rollback&lt;br /&gt;
&lt;br /&gt;
===Events===&lt;br /&gt;
====New Events====&lt;br /&gt;
*onBeforeRender&lt;br /&gt;
*onContentBeforeDelete&lt;br /&gt;
*onContentAfterDelete&lt;br /&gt;
*onContentChangeState&lt;br /&gt;
*onContentPrepareForm&lt;br /&gt;
*onContentPrepareFormData&lt;br /&gt;
*onExtensionBeforeInstall&lt;br /&gt;
*onExtensionBeforeUpdate&lt;br /&gt;
*onExtensionBeforeUninstall&lt;br /&gt;
*onExtensionAfterInstall&lt;br /&gt;
*onExtensionAfterUpdate&lt;br /&gt;
*onExtensionAfterUninstall&lt;br /&gt;
&lt;br /&gt;
====Renamed Events====&lt;br /&gt;
*onContentAfterSave&lt;br /&gt;
*onContentAfterTitle&lt;br /&gt;
*onContentAfterDisplay&lt;br /&gt;
*onContentBeforeDisplay&lt;br /&gt;
*onContentBeforeSave&lt;br /&gt;
*onContentSearch&lt;br /&gt;
*onContentSearchAreas&lt;br /&gt;
*onUserAuthenticate&lt;br /&gt;
*onUserAfterDelete&lt;br /&gt;
*onUserAfterSave&lt;br /&gt;
*onUserBeforeDelete&lt;br /&gt;
*onUserBeforeSave&lt;br /&gt;
*onUserLogin&lt;br /&gt;
*onUserLogout&lt;br /&gt;
*All content events (except for search and search areas) now pass a &#039;context&#039; as the first argument to alert the plugin as to what type of content is being passed.  The plugin event may or may not heed this context.&lt;br /&gt;
&lt;br /&gt;
===Categories===&lt;br /&gt;
*Component can provide custom options for its own categories via optional category.xml&lt;br /&gt;
*Supported via JTableNested&lt;br /&gt;
&lt;br /&gt;
===Access Controls===&lt;br /&gt;
*A thing that can be controlled by permissions is registered in the assets table&lt;br /&gt;
*JTable handles this transparently via asset_id field&lt;br /&gt;
*For view permissions, support is as simple as adding&lt;br /&gt;
:::$user = JFactory::getUser();&lt;br /&gt;
:::$groups = implode(&#039;,&#039;, $user-&amp;gt;authorisedLevels());&lt;br /&gt;
:::$query-&amp;gt;where(&#039;a.access IN (&#039; . $groups . &#039;)&#039;);&lt;br /&gt;
&lt;br /&gt;
For action permissions, same format as in 1.5:&lt;br /&gt;
$user-&amp;gt;authorise($actionName, $assetName)&lt;br /&gt;
*OpenID library moved to plugin folder&lt;br /&gt;
*Geshi library moved to plugin folder&lt;br /&gt;
*JRegistry notes defaults to JSON (new format), dynamically converting existing data in INI format&lt;br /&gt;
*New JStream&lt;br /&gt;
*New JApplicationHelper::getComponentName&lt;br /&gt;
*Core icons moved to /media/&lt;br /&gt;
*Backward incompatible change to JEditor::display&lt;br /&gt;
*Added chaining support to JMail&lt;br /&gt;
*JFilterInput can no longer be called statically&lt;br /&gt;
*JHtml::image now supports relative paths&lt;br /&gt;
*All system images are overridable in the default template&lt;br /&gt;
*New JHtmlString&lt;br /&gt;
*Added wincache session handler for IIS&lt;br /&gt;
*New JFilterOutput::stripImages&lt;br /&gt;
*JPath::check takes second arg for separator (to pass to JPath::clean)&lt;br /&gt;
*Expanded configuration support through config.xml (multiple tabs)&lt;br /&gt;
&lt;br /&gt;
====Core actions====&lt;br /&gt;
*core.login.site&lt;br /&gt;
*core.login.admin&lt;br /&gt;
*core.admin&lt;br /&gt;
*core.manage&lt;br /&gt;
*core.create&lt;br /&gt;
*core.edit&lt;br /&gt;
*core.edit.state&lt;br /&gt;
*core.delete&lt;br /&gt;
*Miscellaneous changes&lt;br /&gt;
&lt;br /&gt;
===Debug Plugin===&lt;br /&gt;
*More tools for assisting with translation&lt;br /&gt;
&lt;br /&gt;
===Mootools 1.2/1.3===&lt;br /&gt;
*Need to use document.id instead of $&lt;br /&gt;
&lt;br /&gt;
==Cache changes ==&lt;br /&gt;
===API changes relevant to 3rd party developers===&lt;br /&gt;
====Component view cache==== &lt;br /&gt;
&lt;br /&gt;
Component view cache now takes an array of url parameters and their types to create Cacheid. This is a replacement for a previous unsafe way which took the whole URL for this and so opened the doors for DOS attacks via random url parameters added to request URL&#039;s. &lt;br /&gt;
&lt;br /&gt;
Com_contact example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$safeurlparams = array(&lt;br /&gt;
    &#039;id&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;catid&#039;=&amp;gt;&#039;INT&#039;, &#039;limit&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;limitstart&#039;=&amp;gt;&#039;INT&#039;, &lt;br /&gt;
    &#039;filter_order&#039;=&amp;gt;&#039;CMD&#039;, &lt;br /&gt;
    &#039;filter_order_Dir&#039;=&amp;gt;&#039;CMD&#039;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
parent::display($cachable,$safeurlparams);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Old cacheid created from URL was retained for backwards compatibility and takes effect if there are no $safeurlparams.&lt;br /&gt;
&lt;br /&gt;
====Module cache====&lt;br /&gt;
This has been completly reconceptualized. Module cache now has 5 different modes of operation, 3 of them are to be set from module XML file, while 2 are meant to be used from within the module itself. Default is backwards compatible oldstatic mode that requires no changes to a module. &lt;br /&gt;
&lt;br /&gt;
Modes to be set in XML: &lt;br /&gt;
*&#039;&#039;&#039;static&#039;&#039;&#039; - one cache file for all pages with the same module parameters &lt;br /&gt;
*&#039;&#039;&#039;oldstatic&#039;&#039;&#039; - 1.5. definition of module caching, one cache file for all pages with the same module id and user aid. Default for backwards compatibility &lt;br /&gt;
*&#039;&#039;&#039;itemid&#039;&#039;&#039; - changes on itemid change &lt;br /&gt;
&lt;br /&gt;
In addition to cache field that was required in 1.5 there is now another hidden field called cachemode that sets any of the above modes. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;cachemode&amp;quot; type=&amp;quot;hidden&amp;quot; label=&amp;quot;&amp;quot; default=&amp;quot;static&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;option value=&amp;quot;static&amp;quot;&amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modes to be called from inside the module: &lt;br /&gt;
*&#039;&#039;&#039;safeuri&#039;&#039;&#039; - id is created from $cacheparams-&amp;gt;modeparams array, the same as in component view cache &lt;br /&gt;
*&#039;&#039;&#039;id&#039;&#039;&#039; - module sets own cache id&#039;s &lt;br /&gt;
&lt;br /&gt;
To use this modes one must rename cache field in xml to owncache field and call JModuleHelper::ModuleCache from within the module&#039;s main php file. This is actually a shortcut to cache callback to avoid code duplication in every module. &lt;br /&gt;
&lt;br /&gt;
An example that uses safeuri mode and replaces uncached&lt;br /&gt;
$list = modRelatedItemsHelper::getList($params) : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$cacheparams = new stdClass; &lt;br /&gt;
$cacheparams-&amp;gt;cachemode = &#039;safeuri&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;class = &#039;modRelatedItemsHelper&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;method = &#039;getList&#039;; &lt;br /&gt;
$cacheparams-&amp;gt;methodparams = $params; &lt;br /&gt;
$cacheparams-&amp;gt;modeparams = array(&#039;id&#039;=&amp;gt;&#039;int&#039;,&#039;Itemid&#039;=&amp;gt;&#039;int&#039;); &lt;br /&gt;
$list = JModuleHelper::ModuleCache ($module, $params, $cacheparams);&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
====Functional changes==== &lt;br /&gt;
&#039;&#039;&#039;Cache administration (Clean cache, Purge cache) now works with all drivers&#039;&#039;&#039;, not only with file cache. &lt;br /&gt;
&#039;&#039;&#039;New standalone garbage collect script&#039;&#039;&#039; that is to be called from crontab has been added. It can be found in libraries/joomla/utilities/garbagecron.php . For safety reasons it is recommended that it is renamed to something unique.&lt;br /&gt;
&lt;br /&gt;
====CMS and framework level functional changes==== &lt;br /&gt;
&#039;&#039;&#039;Caching is implemented in all components and modules&#039;&#039;&#039; that can potentially gain from cache.&lt;br /&gt;
Caching has also been added to some most expensive and frequent framework calls JComponentHelper::_load(), JModuleHelper::_load(),JMenuSite::load(); &lt;br /&gt;
&lt;br /&gt;
====Cache library changes====&lt;br /&gt;
Cache library has been completely refactored. &lt;br /&gt;
*Cache &#039;&#039;&#039;handlers have been renamed to controllers&#039;&#039;&#039; to better reflect their role and avoid confusion with cache storage handlers (referred to as drivers in following text). &lt;br /&gt;
*&#039;&#039;&#039;New JCacheController&#039;&#039;&#039; parent class has been added and inheritance has been changed to prevent bugs occurring from controller&#039;s and storage handler&#039;s get method clashes. &lt;br /&gt;
&lt;br /&gt;
====JCache==== &lt;br /&gt;
*&#039;&#039;&#039;getAll()&#039;&#039;&#039; method was added to JCache, JCacheStorage and all drivers, and it returns all cached items (this was previously possible only with file driver and hardcoded in administration) &lt;br /&gt;
*New &#039;&#039;&#039;lock and unlock&#039;&#039;&#039; methods were added to JCache, JCacheStorage and drivers. They enable cache item locking and unlocking to prevent errors on parallel accesses and double saves. This functionally was also implemented in controllers. &lt;br /&gt;
*Workarounds are now consolidated in new &#039;&#039;&#039;JCache getWorkarounds and setWorkarounds&#039;&#039;&#039; methods, are now used by all controllers and their use has been made optional. &lt;br /&gt;
*New makeId() method in JCache that creates cache id from registered url parameters set by components and system plugins&lt;br /&gt;
&lt;br /&gt;
====JCacheController==== &lt;br /&gt;
New parent class to Controllers that also functions as an intermediate to JCache. There is no JObject inheritance as otherwise magic __call doesn&#039;t work. &lt;br /&gt;
Change was needed to prevent bugs occurring from controller&#039;s and storage handler&#039;s get method clashes. They could be renamed but this would break backwards compatibility.&lt;br /&gt;
&lt;br /&gt;
====JCacheStorage==== &lt;br /&gt;
*_getCacheId method was moved from drivers to their parent JCacheStorage and all drives now use the same method by default &lt;br /&gt;
*CacheItem was moved from cache admin to framework JCacheStorageHelper, it is used by getAll &lt;br /&gt;
*There are new cachelite and wincache drivers. All other drivers have been fixed with missing functions (gc, clean) added, their code cleaned and tested they should be now working properly. &lt;br /&gt;
*Replaced separate _expire files in filecache driver with timestamps (this should amount to cca. 40% speed gain). The same in all drivers that had this. &lt;br /&gt;
*Numerous bugfixes on all levels, most important is proper use of options defaulting to configuration parameters settings and correctly passing from level to level.&lt;br /&gt;
&lt;br /&gt;
====Other framework level changes==== &lt;br /&gt;
*Safe url parameters registration added to JControler view method. &lt;br /&gt;
*New ModuleCache method in JModuleHelper that performs the above described module cache (in 5 modes) for both, modules and module renderer. &lt;br /&gt;
*JFactory::getFeedParser has been changed to use Joomla caching instead of simplepie&#039;s.&lt;br /&gt;
&lt;br /&gt;
==Performance==&lt;br /&gt;
===Eliminate the usage of JTable for general browsing on the frontend===&lt;br /&gt;
*Session drops the usage of JTable&lt;br /&gt;
*Item views use a dedicated question, not JTable-&amp;gt;load&lt;br /&gt;
&lt;br /&gt;
==Known Issues==&lt;br /&gt;
*Still Mootools 1.2. Will be upgrading to 1.3 during the beta process.&lt;br /&gt;
*Scaling issues to address&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
===Releases===&lt;br /&gt;
*Alpha 1: 22 June 2009&lt;br /&gt;
*Alpha 2: 25 October 2009&lt;br /&gt;
*Beta 01: 18 May 2010&lt;br /&gt;
*Beta 02: 31 May 2010&lt;br /&gt;
*Beta 03: 14 June 2010&lt;br /&gt;
*Beta 04: 28 June 2010&lt;br /&gt;
*Beta 05: 12 July 2010&lt;br /&gt;
*Beta 06: 26 July 2010&lt;br /&gt;
*Beta 07: 09 August 2010&lt;br /&gt;
*Beta 08: 23 August 2010&lt;br /&gt;
*Beta 09: 06 September 2010&lt;br /&gt;
*Beta 10: 20 September 2010&lt;br /&gt;
*Beta 11: 03 October 2010&lt;br /&gt;
*Beta 12: 17 October 2010&lt;br /&gt;
*Beta 13: 31 October 2010&lt;br /&gt;
*Beta 14: 14 November 2010&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 1.6]]&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Main_Page&amp;diff=31925</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Main_Page&amp;diff=31925"/>
		<updated>2010-11-18T20:51:00Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi,&lt;br /&gt;
you&#039;ve found the main page for Joomla! documentation.&lt;br /&gt;
&lt;br /&gt;
If you cannot find the answer you are looking for, consider asking on the Joomla! forum at http://forum.joomla.org/[http://forum.joomla.org/]&lt;br /&gt;
&lt;br /&gt;
Thanks!&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Talk:Main_Page&amp;diff=31924</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Talk:Main_Page&amp;diff=31924"/>
		<updated>2010-11-18T20:50:25Z</updated>

		<summary type="html">&lt;p&gt;Efduggan: Removed call for help - put link into Joomla forums&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi,&lt;br /&gt;
you&#039;ve found the main page for Joomla! documentation.&lt;br /&gt;
&lt;br /&gt;
If you cannot find the answer you are looking for, consider asking on the Joomla! forum at [http://forum.joomla.org/]Thanks!&lt;/div&gt;</summary>
		<author><name>Efduggan</name></author>
	</entry>
</feed>