<?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=Elin</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=Elin"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Elin"/>
	<updated>2026-08-11T11:49:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Where_are_the_web_pages%3F&amp;diff=120499</id>
		<title>Where are the web pages?</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Where_are_the_web_pages%3F&amp;diff=120499"/>
		<updated>2014-06-19T10:53:01Z</updated>

		<summary type="html">&lt;p&gt;Elin: Take our specific reference to MySql&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you are coming from a traditional website made up of separate HTML pages, you may well wonder where the pages are.&lt;br /&gt;
&lt;br /&gt;
In Joomla! almost everything that you would normally think of as a web page is actually stored in a database. When you create a new page, your content is stored in a database record, not in a separate file.&lt;br /&gt;
&lt;br /&gt;
Then when your site is viewed, Joomla! calls up different items from your database and puts them together to make what is displayed to the user.&lt;br /&gt;
&lt;br /&gt;
One exception is that your images are usually stored in the images directory and not the database.&lt;br /&gt;
&lt;br /&gt;
Your MySQL database usually is created by you during the installation process (unless you use a Fantastico or a similar installer that will create the database automatically). If you have a control panel on a linux host, you can usually access you database through a program called [http://www.phpmyadmin.net/ phpMyAdmin]. This will allow you to view your database.&lt;br /&gt;
&lt;br /&gt;
For a short tutorial on converting a static HTML web site to Joomla!, see [[Converting an existing website to a Joomla! website]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:FAQ]]&lt;br /&gt;
[[Category:Administration FAQ]]&lt;br /&gt;
[[Category:Getting Started FAQ]]&lt;br /&gt;
[[Category:Version 1.5 FAQ]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Plugin/Events/Content&amp;diff=107316</id>
		<title>Plugin/Events/Content</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Plugin/Events/Content&amp;diff=107316"/>
		<updated>2014-02-05T11:28:54Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Description */  grammar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.x|alt=1.5|altlink=J1.5:Plugin/Events/Content|alttitle=this guide for old event names}}&lt;br /&gt;
Content events are triggered during the content creation process. The majority of these events are called in many views many components and modules - they are generally not specific for the com_content component. This list gives a brief description of each event, what their parameters are, and some examples of their use in core plugins.&lt;br /&gt;
&lt;br /&gt;
==onContentPrepare==&lt;br /&gt;
===Description===&lt;br /&gt;
This is the first stage in preparing content for output and is the most common point for content orientated plugins to do their work. Since the article and related parameters are passed by reference, event handlers can modify them prior to display.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;article&amp;lt;/code&amp;gt; A reference to the article that is being rendered by the view (For example: the text of a com_content article can be found with $article-&amp;gt;text).&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;params&amp;lt;/code&amp;gt; A reference to an associative array of relevant parameters. The view determines what it considers to be relevant and passes that information along.&lt;br /&gt;
*&amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt; An integer that determines the &amp;quot;page&amp;quot; of the content that is to be generated. Note that in the context of views that might not generate HTML output, a page is a reasonably abstract concept that depends on the context.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
None. Results are returned by modifying the referenced arguments. Sometimes a boolean might be returned to check for success or failure of the event.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
*&amp;lt;tt&amp;gt;[https://github.com/joomla/joomla-cms/blob/master/plugins/content/emailcloak/emailcloak.php#L31 plugins/content/emailcloak/emailcloak.php]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==onContentAfterTitle==&lt;br /&gt;
===Description===&lt;br /&gt;
This event only exists in Joomla {{JVer|3.x}}. This is a request for information that should be placed between the content title and the content body. Although parameters are passed by reference, this is not the event to modify article data. Use onPrepareContent for that purpose. Note this event has special purpose in com_content for use in handling the introtext.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
See the onPrepareContent event for additional discussion of these parameters.&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;article&amp;lt;/code&amp;gt; The article that is being rendered by the view.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;params&amp;lt;/code&amp;gt; An associative array of relevant parameters.&lt;br /&gt;
*&amp;lt;code&amp;gt;limitstart&amp;lt;/code&amp;gt; An integer that determines the &amp;quot;page&amp;quot; of the content that is to be generated.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
String. Returned value from this event will be displayed in a placeholder. Most templates display this placeholder after the article separator.&lt;br /&gt;
&lt;br /&gt;
==onContentBeforeDisplay==&lt;br /&gt;
===Description===&lt;br /&gt;
This is a request for information that should be placed immediately before the generated content. For views that generate HTML, this might include the use of styles that are specified as part of the content or related parameters. Although parameters are passed by reference, this is not the event to modify article data. Use onPrepareContent for that purpose.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
See the onPrepareContent event for additional discussion of these parameters. Note that unlike onPrepareContent, these parameters are passed by value.&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;article&amp;lt;/code&amp;gt; The article that is being rendered by the view.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;params&amp;lt;/code&amp;gt; An associative array of relevant parameters.&lt;br /&gt;
*&amp;lt;code&amp;gt;limitstart&amp;lt;/code&amp;gt; An integer that determines the &amp;quot;page&amp;quot; of the content that is to be generated.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
String. Returned value from this event will be displayed in a placeholder. Most templates display this placeholder after the article separator.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
*&amp;lt;tt&amp;gt;[https://github.com/joomla/joomla-cms/blob/master/plugins/content/vote/vote.php#L29 plugins/content/vote/vote.php]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==onContentAfterDisplay==&lt;br /&gt;
===Description===&lt;br /&gt;
This is a request for information that should be placed immediately after the generated content. For views that generate HTML, this might include the closure of styles that are specified as part of the content or related parameters. Although parameters are passed by reference, this is not the event to modify article data. Use onPrepareContent for that purpose.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
See the onPrepareContent event for additional discussion of these parameters. Note that unlike onPrepareContent, these parameters are passed by value.&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;article&amp;lt;/code&amp;gt; The article that is being rendered by the view.&lt;br /&gt;
*&amp;lt;code&amp;gt;&amp;amp;params&amp;lt;/code&amp;gt; A JRegistry object of merged article and menu item params.&lt;br /&gt;
*&amp;lt;code&amp;gt;limitstart&amp;lt;/code&amp;gt; An integer that determines the &amp;quot;page&amp;quot; of the content that is to be generated.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
String. Returned value from this event will be displayed in a placeholder. Most templates display this placeholder after the article separator.&lt;br /&gt;
&lt;br /&gt;
==onContentBeforeSave==&lt;br /&gt;
===Description===&lt;br /&gt;
This is an event that is called right before the content is saved into the database. You can abort the save by returning false. In the case of &amp;lt;code&amp;gt;JModelLegacy&amp;lt;/code&amp;gt; for example the error will then be set by calling &amp;lt;code&amp;gt;$this-&amp;gt;setError($table-&amp;gt;getError);&amp;lt;/code&amp;gt; to be displayed to user.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;article&amp;lt;/code&amp;gt; A reference to the JTableContent object that is being saved which holds the article data.&lt;br /&gt;
*&amp;lt;code&amp;gt;isNew&amp;lt;/code&amp;gt; A boolean which is set to true if the content is about to be created.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
Boolean. Result will affect the saving process. See description for details.&lt;br /&gt;
&lt;br /&gt;
==onContentAfterSave==&lt;br /&gt;
===Description===&lt;br /&gt;
This is an event that is called after the content is saved into the database. Even though article object is passed by reference, changes will not be saved since storing data into database phase is past. An example use case would be redirecting user to the appropriate place after saving.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;article&amp;lt;/code&amp;gt; A reference to the JTableContent object that is being saved which holds the article data.&lt;br /&gt;
*&amp;lt;code&amp;gt;isNew&amp;lt;/code&amp;gt; A boolean which is set to true if the content is about to be created.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
None. Result will be omitted.&lt;br /&gt;
&lt;br /&gt;
==onContentPrepareForm==&lt;br /&gt;
===Description===&lt;br /&gt;
Called before a JForm is rendered. It can be used to modify the JForm object in memory before rendering. For example, use JForm-&amp;gt;loadFile() to add fields or JForm-&amp;gt;removeField() to remove fields. Or use JForm-&amp;gt;setFieldAttribute() or other JForm methods to modify fields for the form.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;form&amp;lt;/code&amp;gt; The JForm object to be displayed. Use the $form-&amp;gt;getName() method to check whether this is the form you want to work with.&lt;br /&gt;
*&amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; An object containing the data for the form.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
*&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; True if method succeeds.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
*[https://www.github.com/joomla/joomla-cms/tree/master/plugins/user/profile/profile.php#L168 plugins/user/profile/profile.php]&lt;br /&gt;
&lt;br /&gt;
==onContentPrepareData==&lt;br /&gt;
===Description===&lt;br /&gt;
Called after the data for a JForm has been retrieved. It can be used to modify the data for a JForm object in memory before rendering. This is usually used in tandem with the onContentPrepareForm method - this event adds the data to the already altered JForm.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; An object containing the data for the form.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
*&amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; True if method succeeds.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
*[https://www.github.com/joomla/joomla-cms/tree/master/plugins/user/profile/profile.php#L51 plugins/user/profile/profile.php]&lt;br /&gt;
&lt;br /&gt;
==onContentBeforeDelete==&lt;br /&gt;
===Description===&lt;br /&gt;
This is an event that is called right before the content is deleted from the database. You can abort the delete by returning false. In the case of &amp;lt;code&amp;gt;JModelLegacy&amp;lt;/code&amp;gt; for example the error will then be set by calling &amp;lt;code&amp;gt;$this-&amp;gt;setError($table-&amp;gt;getError);&amp;lt;/code&amp;gt; to be displayed to user.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; A reference to the JTableContent object that is being deleted which holds the article data.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
Boolean. Result will affect the saving process. See description for details.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
*[https://www.github.com/joomla/joomla-cms/tree/master/plugins/content/joomla/joomla.php#L89 plugins/content/joomla/joomla.php]&lt;br /&gt;
&lt;br /&gt;
==onContentAfterDelete==&lt;br /&gt;
===Description===&lt;br /&gt;
This is an event that is called after the content is deleted from the database. An example use case would be redirecting user to the appropriate place after deleting.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;article&amp;lt;/code&amp;gt; A reference to the JTableContent object that has been deleted which holds the article data.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
None. Result will be omitted.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
[https://www.github.com/joomla/joomla-cms/tree/master/plugins/content/finder/finder.php#L61 content/finder/finder.php]&lt;br /&gt;
&lt;br /&gt;
==onContentChangeState==&lt;br /&gt;
===Description===&lt;br /&gt;
This is an event that is called after content has its state change (e.g. Published to Unpublished).&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
*&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt; The context of the content being passed to the plugin - this is the component name and view - or name of module  (e.g. com_content.article). Use this to check whether you are in the desired context for the plugin.&lt;br /&gt;
*&amp;lt;code&amp;gt;$pks&amp;lt;/code&amp;gt; An array of primary key ids of the content that has changed state.&lt;br /&gt;
*&amp;lt;code&amp;gt;$value&amp;lt;/code&amp;gt; The value of the state that the content has been changed to.&lt;br /&gt;
&lt;br /&gt;
===Return Value===&lt;br /&gt;
None. Result will be omitted.&lt;br /&gt;
&lt;br /&gt;
===Example===&lt;br /&gt;
[https://www.github.com/joomla/joomla-cms/tree/master/plugins/content/finder/finder.php#L80 content/finder/finder.php]&lt;br /&gt;
&lt;br /&gt;
==onContentSearch==&lt;br /&gt;
&lt;br /&gt;
==onContentSearchAreas==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Plugin Development]][[Category:Specifications]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Create_sample_data&amp;diff=104726</id>
		<title>Create sample data</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Create_sample_data&amp;diff=104726"/>
		<updated>2013-11-04T20:24:17Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Warnings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|1.5,2.5,3.1}}&lt;br /&gt;
This document will summarize the steps of creating a sample data file.&lt;br /&gt;
&lt;br /&gt;
First, create your new version of the data either by modifying an existing file or by adding to joomla.sql.&lt;br /&gt;
&lt;br /&gt;
Next you need to prepare the data for distribution.&lt;br /&gt;
&lt;br /&gt;
Some important steps for core distributions:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE `#__content`&lt;br /&gt;
 SET `created`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_by`=42,&lt;br /&gt;
 `created_by_alias`=&#039;Joomla&#039;,&lt;br /&gt;
 `modified`=null,&lt;br /&gt;
 `modified_by`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `hits`=0;&lt;br /&gt;
UPDATE `#__contact_details`&lt;br /&gt;
 SET `created`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_by`=42,&lt;br /&gt;
 `created_by_alias`=&#039;Joomla&#039;,&lt;br /&gt;
 `modified`=null,&lt;br /&gt;
 `modified_by`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `hits`=0;&lt;br /&gt;
UPDATE `#__weblinks`&lt;br /&gt;
 SET `created`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_by`=42,&lt;br /&gt;
 `created_by_alias`=&#039;Joomla&#039;,&lt;br /&gt;
 `modified`=null,&lt;br /&gt;
 `modified_by`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `hits`=0;&lt;br /&gt;
UPDATE `#__newsfeeds`&lt;br /&gt;
 SET `created`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_by`=42,&lt;br /&gt;
 `created_by_alias`=&#039;Joomla&#039;,&lt;br /&gt;
 `modified`=null,&lt;br /&gt;
 `modified_by`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `hits`=0;&lt;br /&gt;
UPDATE `#__banners`&lt;br /&gt;
 SET `created`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_by`=42,&lt;br /&gt;
 `created_by_alias`=&#039;Joomla&#039;,&lt;br /&gt;
 `modified`=null,&lt;br /&gt;
 `modified_by`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `impmade`=0,&lt;br /&gt;
 `clicks`=0;&lt;br /&gt;
UPDATE `#__categories`&lt;br /&gt;
 SET `created_time`=&#039;2011-01-01 00:00:01&#039;,&lt;br /&gt;
 `created_user_id`=42,&lt;br /&gt;
 `modified_time`=null,&lt;br /&gt;
 `modified_user_id`=null,&lt;br /&gt;
 `checked_out`=null,&lt;br /&gt;
 `checked_out_time`=null,&lt;br /&gt;
 `version`=1,&lt;br /&gt;
 `hits`=0;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then drop any tables that are not changed by sample data. Here is a typical example, but you must adjust based on your circumstances.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
DROP TABLE `#__associations`, `#__banner_tracks`, `#__core_log_searches`, `#__extensions`,&lt;br /&gt;
 `#__finder_filters`, `#__finder_links`, `#__finder_links_terms0`, `#__finder_links_terms1`,&lt;br /&gt;
 `#__finder_links_terms2`, `#__finder_links_terms3`, `#__finder_links_terms4`,&lt;br /&gt;
 `#__finder_links_terms5`, `#__finder_links_terms6`, `#__finder_links_terms7`,&lt;br /&gt;
 `#__finder_links_terms8`, `#__finder_links_terms9`, `#__finder_links_termsa`,&lt;br /&gt;
 `#__finder_links_termsb`, `#__finder_links_termsc`, `#__finder_links_termsd`,&lt;br /&gt;
 `#__finder_links_termse`, `#__finder_links_termsf`, `#__finder_taxonomy`,&lt;br /&gt;
 `#__finder_taxonomy_map`, `#__finder_terms`, `#__finder_terms_common`, `#__finder_tokens`,&lt;br /&gt;
 `#__finder_tokens_aggregate`, `#__finder_types`, `#__languages`, `#__messages`,&lt;br /&gt;
 `#__messages_cfg`, `#__overrider`, `#__redirect_links`, `#__schemas`, `#__session`,&lt;br /&gt;
 `#__updates`, `#__update_categories`, `#__update_sites`, `#__update_sites_extensions`,&lt;br /&gt;
 `#__users`, `#__user_notes`, `#__user_profiles`, `#__user_usergroup_map`;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should dump out your file.  It&#039;s good to do this with&lt;br /&gt;
* No comments&lt;br /&gt;
* Foreign keys disabled&lt;br /&gt;
* INSERT IGNORE&lt;br /&gt;
* CREATE TABLE IF NOT EXISTS&lt;br /&gt;
* Back ticks around names&lt;br /&gt;
&lt;br /&gt;
At the top of your file you will want to add truncation for the tables you are modifying. It is safer to replace the whole table than to try to do it piecemeal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
TRUNCATE `#__assets`;&lt;br /&gt;
TRUNCATE `#__categories`;&lt;br /&gt;
TRUNCATE `#__menu`;&lt;br /&gt;
TRUNCATE `#__menu_types`;&lt;br /&gt;
TRUNCATE `#__modules`;&lt;br /&gt;
TRUNCATE `#__modules_menu`;&lt;br /&gt;
TRUNCATE `#__usergroups`;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point ... you will want to change your table prefixes from &amp;quot;jos_&amp;quot; to &amp;quot;#__&amp;quot;  (substituting your prefix).&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Before testing with the Joomla installation, simply try importing the joomla.sql file and then your file into a blank data base. This will quickly highlight any obvious problems in table structure and similar items.&lt;br /&gt;
&lt;br /&gt;
If you call your file sample_something.sql and put it in the appropriate folder it will automatically appear in the list of installable files when the Joomla installer runs. Test you file there.&lt;br /&gt;
&lt;br /&gt;
==Warnings==&lt;br /&gt;
In Joomla 2.5 and later the data structures are complex and interdependent. Make sure in particular that you include necessary changes in the assets table and the categories table if you create content items. Also in 3.2 and later pay attention to the assets for modules.&lt;br /&gt;
&lt;br /&gt;
Make sure that you use a UTF-8 safe editor if you edit your sample data file directly.&lt;br /&gt;
&lt;br /&gt;
Make sure not to include your session data, redirect data (unless it is deliberate), user data and similar items.&lt;br /&gt;
&lt;br /&gt;
Most likely you do not want to include indexed data from Smart Search.&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Creating_a_profile_plugin&amp;diff=104610</id>
		<title>Creating a profile plugin</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Creating_a_profile_plugin&amp;diff=104610"/>
		<updated>2013-10-31T14:29:47Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version/tutor|2.5,3.x}}&lt;br /&gt;
Profile plugin is a new extension in Joomla! 2.5. It allows the addition of supplemental fields in the registration and profile forms of the com_user front end and in the user create/edit form in the back end.&lt;br /&gt;
&lt;br /&gt;
A simple example plugin with the name &#039;&#039;&#039;User - Profile&#039;&#039;&#039; is included in the basic Joomla! installation as a proof of concept. Much more complex plugins are possible.&lt;br /&gt;
&lt;br /&gt;
The example plugin takes advantage of on the onContentPrepareForm and onUserAfterSave events. &lt;br /&gt;
&lt;br /&gt;
Multiple profile plugins may be included and will be rendered in sequence.&lt;br /&gt;
&lt;br /&gt;
There are four separate places where profiles forms are used in core extensions, and each of these four can be manipulated separately if that is desired. The two locations in the front end are the user registration form and the user profile edit form. In the back end the locations are the edit screen for users in the user manager and the My Profile view found in the Admin menu.&lt;br /&gt;
&lt;br /&gt;
This page shows an example of a second plugin, named profile5. It adds a single field called something.&lt;br /&gt;
&lt;br /&gt;
This is the file structure&lt;br /&gt;
&lt;br /&gt;
 profile5.php&lt;br /&gt;
 profile5.xml&lt;br /&gt;
 en-GB.plg_user_profile5.ini&lt;br /&gt;
 en-GB.plg_user_profile5.sys.ini&lt;br /&gt;
 /profiles/profile.xml&lt;br /&gt;
&lt;br /&gt;
The supplemental fields are created within the profile.xml file in the profiles folder. Note that this file name is &amp;quot;profile.xml&amp;quot; NOT &amp;quot;profile5.xml&amp;quot;, but inside the file the fields and fieldset names ARE &amp;quot;profile5&amp;quot;. Note also that the first character in the must be the &amp;quot;&amp;lt;&amp;quot; from the xml tag. Just drop the profile5.xml in a browser tab and if shows you the structure the file is formatted correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;form&amp;gt;&lt;br /&gt;
	&amp;lt;fields name=&amp;quot;profile5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;fieldset name=&amp;quot;profile5&amp;quot;&lt;br /&gt;
			label=&amp;quot;PLG_USER_PROFILE5_SLIDER_LABEL&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
			&amp;lt;field&lt;br /&gt;
				name=&amp;quot;something&amp;quot;&lt;br /&gt;
				type=&amp;quot;text&amp;quot;&lt;br /&gt;
				id=&amp;quot;something&amp;quot;&lt;br /&gt;
				description=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_DESC&amp;quot;&lt;br /&gt;
				filter=&amp;quot;string&amp;quot;&lt;br /&gt;
				label=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_LABEL&amp;quot;&lt;br /&gt;
				message=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_MESSAGE&amp;quot;&lt;br /&gt;
				size=&amp;quot;30&amp;quot;&lt;br /&gt;
			/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
	&amp;lt;/fields&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
profile5.php &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 /**&lt;br /&gt;
  * @version		&lt;br /&gt;
  * @copyright	Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.&lt;br /&gt;
  * @license		GNU General Public License version 2 or later; see LICENSE.txt&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
 defined(&#039;JPATH_BASE&#039;) or die;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * An example custom profile plugin.&lt;br /&gt;
   *&lt;br /&gt;
   * @package		Joomla.Plugins&lt;br /&gt;
   * @subpackage	user.profile&lt;br /&gt;
   * @version		1.6&lt;br /&gt;
   */&lt;br /&gt;
  class plgUserProfile5 extends JPlugin&lt;br /&gt;
  {&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param	string	The context for the data&lt;br /&gt;
	 * @param	int		The user id&lt;br /&gt;
	 * @param	object&lt;br /&gt;
	 * @return	boolean&lt;br /&gt;
	 * @since	1.6&lt;br /&gt;
	 */&lt;br /&gt;
	function onContentPrepareData($context, $data)&lt;br /&gt;
	{&lt;br /&gt;
		// Check we are manipulating a valid form.&lt;br /&gt;
		if (!in_array($context, array(&#039;com_users.profile&#039;,&#039;com_users.registration&#039;,&#039;com_users.user&#039;,&#039;com_admin.profile&#039;))){&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$userId = isset($data-&amp;gt;id) ? $data-&amp;gt;id : 0;&lt;br /&gt;
&lt;br /&gt;
		// Load the profile data from the database.&lt;br /&gt;
		$db = JFactory::getDbo();&lt;br /&gt;
		$db-&amp;gt;setQuery(&lt;br /&gt;
			&#039;SELECT profile_key, profile_value FROM #__user_profiles&#039; .&lt;br /&gt;
			&#039; WHERE user_id = &#039;.(int) $userId .&lt;br /&gt;
			&#039; AND profile_key LIKE \&#039;profile5.%\&#039;&#039; .&lt;br /&gt;
			&#039; ORDER BY ordering&#039;&lt;br /&gt;
		);&lt;br /&gt;
		$results = $db-&amp;gt;loadRowList();&lt;br /&gt;
&lt;br /&gt;
		// Check for a database error.&lt;br /&gt;
		if ($db-&amp;gt;getErrorNum()) {&lt;br /&gt;
			$this-&amp;gt;_subject-&amp;gt;setError($db-&amp;gt;getErrorMsg());&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Merge the profile data.&lt;br /&gt;
		$data-&amp;gt;profile5 = array();&lt;br /&gt;
		foreach ($results as $v) {&lt;br /&gt;
			$k = str_replace(&#039;profile5.&#039;, &#039;&#039;, $v[0]);&lt;br /&gt;
			$data-&amp;gt;profile5[$k] = json_decode($v[1], true);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @param	JForm	The form to be altered.&lt;br /&gt;
	 * @param	array	The associated data for the form.&lt;br /&gt;
	 * @return	boolean&lt;br /&gt;
	 * @since	1.6&lt;br /&gt;
	 */&lt;br /&gt;
	function onContentPrepareForm($form, $data)&lt;br /&gt;
	{&lt;br /&gt;
		// Load user_profile plugin language&lt;br /&gt;
		$lang = JFactory::getLanguage();&lt;br /&gt;
		$lang-&amp;gt;load(&#039;plg_user_profile5&#039;, JPATH_ADMINISTRATOR);&lt;br /&gt;
&lt;br /&gt;
		if (!($form instanceof JForm)) {&lt;br /&gt;
			$this-&amp;gt;_subject-&amp;gt;setError(&#039;JERROR_NOT_A_FORM&#039;);&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
		// Check we are manipulating a valid form.&lt;br /&gt;
		if (!in_array($form-&amp;gt;getName(), array(&#039;com_users.profile&#039;, &#039;com_users.registration&#039;,&#039;com_users.user&#039;,&#039;com_admin.profile&#039;))) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		if ($form-&amp;gt;getName()==&#039;com_users.profile&#039;)&lt;br /&gt;
		{&lt;br /&gt;
			// Add the profile fields to the form.&lt;br /&gt;
			JForm::addFormPath(dirname(__FILE__).&#039;/profiles&#039;);&lt;br /&gt;
			$form-&amp;gt;loadFile(&#039;profile&#039;, false);&lt;br /&gt;
	&lt;br /&gt;
			// Toggle whether the something field is required.&lt;br /&gt;
			if ($this-&amp;gt;params-&amp;gt;get(&#039;profile-require_something&#039;, 1) &amp;gt; 0) {&lt;br /&gt;
				$form-&amp;gt;setFieldAttribute(&#039;something&#039;, &#039;required&#039;, $this-&amp;gt;params-&amp;gt;get(&#039;profile-require_something&#039;) == 2, &#039;profile5&#039;);&lt;br /&gt;
			} else {&lt;br /&gt;
				$form-&amp;gt;removeField(&#039;something&#039;, &#039;profile5&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//In this example, we treat the frontend registration and the back end user create or edit as the same. &lt;br /&gt;
		elseif ($form-&amp;gt;getName()==&#039;com_users.registration&#039; || $form-&amp;gt;getName()==&#039;com_users.user&#039; )&lt;br /&gt;
		{		&lt;br /&gt;
			// Add the registration fields to the form.&lt;br /&gt;
			JForm::addFormPath(dirname(__FILE__).&#039;/profiles&#039;);&lt;br /&gt;
			$form-&amp;gt;loadFile(&#039;profile&#039;, false);&lt;br /&gt;
			&lt;br /&gt;
			// Toggle whether the something field is required.&lt;br /&gt;
			if ($this-&amp;gt;params-&amp;gt;get(&#039;register-require_something&#039;, 1) &amp;gt; 0) {&lt;br /&gt;
				$form-&amp;gt;setFieldAttribute(&#039;something&#039;, &#039;required&#039;, $this-&amp;gt;params-&amp;gt;get(&#039;register-require_something&#039;) == 2, &#039;profile5&#039;);&lt;br /&gt;
			} else {&lt;br /&gt;
				$form-&amp;gt;removeField(&#039;something&#039;, &#039;profile5&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		}			&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function onUserAfterSave($data, $isNew, $result, $error)&lt;br /&gt;
	{&lt;br /&gt;
		$userId	= JArrayHelper::getValue($data, &#039;id&#039;, 0, &#039;int&#039;);&lt;br /&gt;
&lt;br /&gt;
		if ($userId &amp;amp;&amp;amp; $result &amp;amp;&amp;amp; isset($data[&#039;profile5&#039;]) &amp;amp;&amp;amp; (count($data[&#039;profile5&#039;])))&lt;br /&gt;
		{&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				$db = JFactory::getDbo();&lt;br /&gt;
				$db-&amp;gt;setQuery(&#039;DELETE FROM #__user_profiles WHERE user_id = &#039;.$userId.&#039; AND profile_key LIKE \&#039;profile5.%\&#039;&#039;);&lt;br /&gt;
				if (!$db-&amp;gt;query()) {&lt;br /&gt;
					throw new Exception($db-&amp;gt;getErrorMsg());&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$tuples = array();&lt;br /&gt;
				$order	= 1;&lt;br /&gt;
				foreach ($data[&#039;profile5&#039;] as $k =&amp;gt; $v) {&lt;br /&gt;
					$tuples[] = &#039;(&#039;.$userId.&#039;, &#039;.$db-&amp;gt;quote(&#039;profile5.&#039;.$k).&#039;, &#039;.$db-&amp;gt;quote(json_encode($v)).&#039;, &#039;.$order++.&#039;)&#039;;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$db-&amp;gt;setQuery(&#039;INSERT INTO #__user_profiles VALUES &#039;.implode(&#039;, &#039;, $tuples));&lt;br /&gt;
				if (!$db-&amp;gt;query()) {&lt;br /&gt;
					throw new Exception($db-&amp;gt;getErrorMsg());&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			catch (JException $e) {&lt;br /&gt;
				$this-&amp;gt;_subject-&amp;gt;setError($e-&amp;gt;getMessage());&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Remove all user profile information for the given user ID&lt;br /&gt;
	 *&lt;br /&gt;
	 * Method is called after user data is deleted from the database&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param	array		$user		Holds the user data&lt;br /&gt;
	 * @param	boolean		$success	True if user was succesfully stored in the database&lt;br /&gt;
	 * @param	string		$msg		Message&lt;br /&gt;
	 */&lt;br /&gt;
	function onUserAfterDelete($user, $success, $msg)&lt;br /&gt;
	{&lt;br /&gt;
		if (!$success) {&lt;br /&gt;
			return false;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$userId	= JArrayHelper::getValue($user, &#039;id&#039;, 0, &#039;int&#039;);&lt;br /&gt;
&lt;br /&gt;
		if ($userId)&lt;br /&gt;
		{&lt;br /&gt;
			try&lt;br /&gt;
			{&lt;br /&gt;
				$db = JFactory::getDbo();&lt;br /&gt;
				$db-&amp;gt;setQuery(&lt;br /&gt;
					&#039;DELETE FROM #__user_profiles WHERE user_id = &#039;.$userId .&lt;br /&gt;
					&amp;quot; AND profile_key LIKE &#039;profile5.%&#039;&amp;quot;&lt;br /&gt;
				);&lt;br /&gt;
&lt;br /&gt;
				if (!$db-&amp;gt;query()) {&lt;br /&gt;
					throw new Exception($db-&amp;gt;getErrorMsg());&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			catch (JException $e)&lt;br /&gt;
			{&lt;br /&gt;
				$this-&amp;gt;_subject-&amp;gt;setError($e-&amp;gt;getMessage());&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
profile5.xml controls whether the field is required, disabled or optional in the forms. Since profile5.php says to treat backend create/edit the same as registration only two sets of options are required, register and profile. Note: First character of the file must be &amp;quot;&amp;lt;&amp;quot;. Just drop the profile5.xml in a browser tab and if shows you the structure the file is formatted correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
	&amp;lt;!-- $Id:  --&amp;gt;&lt;br /&gt;
&amp;lt;extension version=&amp;quot;3.1&amp;quot; type=&amp;quot;plugin&amp;quot; group=&amp;quot;user&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;name&amp;gt;plg_user_profile5&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;Joomla! Project&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;January 2008&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;(C) 2005 - 2013 Open Source Matters. All rights reserved.&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;GNU General Public License version 2 or later; see LICENSE.txt&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;admin@joomla.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;www.joomla.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;3.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;PLG_USER_PROFILE5_XML_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;files&amp;gt;&lt;br /&gt;
		&amp;lt;filename plugin=&amp;quot;profile5&amp;quot;&amp;gt;profile5.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;profiles&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;languages&amp;gt;&lt;br /&gt;
		&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.plg_user_profile5.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;en-GB.plg_user_profile5.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
	&amp;lt;/languages&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;config&amp;gt;&lt;br /&gt;
		&amp;lt;fields name=&amp;quot;params&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;fieldset name=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;field name=&amp;quot;register-require-user&amp;quot; type=&amp;quot;spacer&amp;quot;&lt;br /&gt;
					label=&amp;quot;PLG_USER_PROFILE5_FIELD_NAME_REGISTER_REQUIRE_USER&amp;quot;&lt;br /&gt;
				/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;field name=&amp;quot;register-something&amp;quot; type=&amp;quot;list&amp;quot;&lt;br /&gt;
					description=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_DESC&amp;quot;&lt;br /&gt;
					label=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_LABEL&amp;quot;&lt;br /&gt;
				&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;JOPTION_REQUIRED&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;JOPTION_OPTIONAL&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;JDISABLED&amp;lt;/option&amp;gt;&lt;br /&gt;
				&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;field name=&amp;quot;profile-require-user&amp;quot; type=&amp;quot;spacer&amp;quot;&lt;br /&gt;
					label=&amp;quot;PLG_USER_PROFILE5_FIELD_NAME_PROFILE_REQUIRE_USER&amp;quot;&lt;br /&gt;
				/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;field name=&amp;quot;profile-require_something&amp;quot; type=&amp;quot;list&amp;quot;&lt;br /&gt;
					description=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_DESC&amp;quot;&lt;br /&gt;
					label=&amp;quot;PLG_USER_PROFILE5_FIELD_SOMETHING_LABEL&amp;quot;&lt;br /&gt;
				&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;JOPTION_REQUIRED&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;JOPTION_OPTIONAL&amp;lt;/option&amp;gt;&lt;br /&gt;
					&amp;lt;option value=&amp;quot;0&amp;quot;&amp;gt;JDISABLED&amp;lt;/option&amp;gt;&lt;br /&gt;
				&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;/fieldset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;/fields&amp;gt;&lt;br /&gt;
	&amp;lt;/config&amp;gt;&lt;br /&gt;
 &amp;lt;/extension&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
en-GB.plg_user_profile5.ini&lt;br /&gt;
&lt;br /&gt;
 ; &lt;br /&gt;
 ; Joomla! Project&lt;br /&gt;
 ; Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.&lt;br /&gt;
 ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php&lt;br /&gt;
 ; Note : All ini files need to be saved as UTF-8&lt;br /&gt;
 &lt;br /&gt;
 PLG_USER_PROFILE5_XML_DESCRIPTION=&amp;quot;User Profile 5 Plug-in&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5=&amp;quot;User - Profile 5&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_SLIDER_LABEL=&amp;quot;User Profile 5&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_FIELD_NAME_REGISTER_REQUIRE_USER=&amp;quot;User profile fields for registration and administrator user profile 5 forms&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_FIELD_NAME_PROFILE_REQUIRE_USER=&amp;quot;User profile fields for profile 5 edit form&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_FIELD_SOMETHING_DESC=&amp;quot;Choose an option for the something filed&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_FIELD_SOMETHING_LABEL=&amp;quot;Something!&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_FIELD_SOMETHING_MESSAGE=&amp;quot;A Message for something!&amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_XML_DESCRIPTION=&amp;quot;User Profile 5 Plug-in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
en-GB.plg_user_profile5.sys.ini&lt;br /&gt;
&lt;br /&gt;
 ; $Id: en-GB.plg_user_profile.sys.ini 17052 2010-05-14 14:05:58Z infograf768 $&lt;br /&gt;
 ; Joomla! Project&lt;br /&gt;
 ; Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.&lt;br /&gt;
 ; License http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL, see LICENSE.php&lt;br /&gt;
 ; Note : All ini files need to be saved as UTF-8&lt;br /&gt;
 &lt;br /&gt;
 PLG_USER_PROFILE5=&amp;quot;User - Profile 5 &amp;quot;&lt;br /&gt;
 PLG_USER_PROFILE5_XML_DESCRIPTION=&amp;quot;User Profile 5 Plug-in&amp;quot;&lt;br /&gt;
&lt;br /&gt;
By installing profile5 you can add new fields in addition to the ones in profile. You can also control which view levels see those fields.&lt;br /&gt;
Alternatively, you can write a more complex common plugin with varying controls for different groups.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]][[Category:Plugin Development]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Using_com_config_for_frontend_template_style_editing&amp;diff=104437</id>
		<title>Using com config for frontend template style editing</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Using_com_config_for_frontend_template_style_editing&amp;diff=104437"/>
		<updated>2013-10-13T09:19:31Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;Here is the page&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is the page&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_hotfixes_for_Joomla_EOL_versions&amp;diff=103172</id>
		<title>Security hotfixes for Joomla EOL versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_hotfixes_for_Joomla_EOL_versions&amp;diff=103172"/>
		<updated>2013-09-03T22:17:16Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Warning|&#039;&#039;&#039;Do not rely on all security issues being patched or reported for EOL(end of life) versions.&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
This page is for Joomla! versions which have reached EOL(&#039;&#039;&#039;end of life&#039;&#039;&#039;) and are no longer being developed or supported by the Joomla! project. Issues and items are only listed on this page as a benefit to the users of EOL versions who have not migrated to a supported version yet.&lt;br /&gt;
&lt;br /&gt;
It is &#039;&#039;&#039;strongly recommended you update your websites&#039;&#039;&#039; to a supported Joomla! version ASAP.&lt;br /&gt;
&lt;br /&gt;
== Joomla! 1.5 ==&lt;br /&gt;
Although Joomla 1.5 has reached EOL(end of life), if there is a critical security issue with a fix it may be reported here. &lt;br /&gt;
&lt;br /&gt;
===File Upload Security Patch===&lt;br /&gt;
There is a security issue in all versions of Joomla related to unauthorized file uploads.&lt;br /&gt;
* Read the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31626 Issue Tracker Item] for details.&lt;br /&gt;
* Download the [http://joomlacode.org/gf/download/trackeritem/31626/83528/UploadFix15v3.zip File Upload Security Patch] and manually apply per instructions.&lt;br /&gt;
:&#039;&#039;&#039;File Upload Security Patch Update Instructions:&#039;&#039;&#039;&lt;br /&gt;
:#Download &amp;amp; Unpack the security patch&lt;br /&gt;
:#Upload patch files via ftp directly to the root of your Joomla! installation, overwriting existing files.&lt;br /&gt;
&lt;br /&gt;
===Flash Uploader==&lt;br /&gt;
The flash uploader has been removed from Joomla! 2.5 and Joomla! 3 for security reasons. 1.5 users should do the same and can do so first by removing the file and then by setting the option for it to off.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
===Joomla! 1.5===&lt;br /&gt;
* The unofficial, [https://github.com/PhilETaylor/Joomla1.5.999 Joomla! 1.5.999 GitHub] project.&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;br /&gt;
[[Category:Joomla! 1.5]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:Updating_from_an_existing_version&amp;diff=102133</id>
		<title>J2.5:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:Updating_from_an_existing_version&amp;diff=102133"/>
		<updated>2013-08-08T18:49:45Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Update the #__extensions Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component &#039;&#039;&#039;(Method A)&#039;&#039;&#039; found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
Always back up your site before updating.&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
&lt;br /&gt;
*If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
[[File:Updatewaiting.PNG|670px]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run.==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatecompleted25.PNG]]&lt;br /&gt;
&lt;br /&gt;
==When updating has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
==Trouble Shooting and Advanced Techniques==&lt;br /&gt;
Starting with version 1.6, there are three ways to update your Joomla Website to versions 1.6, 1.7 or 2.5.&lt;br /&gt;
If you are in an older version that did not support one click updates or are on a server that does not allow such updates you should use one of these options. &lt;br /&gt;
&lt;br /&gt;
* Extension Manager: Update&lt;br /&gt;
* Extension Manager: Install&lt;br /&gt;
* Manually Copy Program Files&lt;br /&gt;
&lt;br /&gt;
Each of these is discussed below.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version earlier than 1.6.x to Joomla 1.7? ==&lt;br /&gt;
This page does not contain the instructions for migrating a Website from Joomla versions earlier than 1.6. See the [[J2.5:Migrating from Joomla 1.5 to Joomla 2.5|Migrating from Joomla 1.5 to Joomla 2.5]] page.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version 1.6.x to Joomla 1.7? ==&lt;br /&gt;
Note: To upgrade from version 1.6.x to Joomla 1.7 please follow the [[Upgrade 1.6.5 to 1.7|Upgrade 1.6.5 to 1.7 guide]] before you upgrade to Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
==Upgrade to Joomla 2.5 on shared hosts==&lt;br /&gt;
{{notice|&amp;lt;small&amp;gt;&#039;&#039;&#039;Important note as of 28 January 2012:&#039;&#039;&#039; &#039;&#039;On some shared host environments (GoDaddy.com and perhaps others), the normal Joomla update from 1.7 to 2.5 can intermittently fail with the error &amp;quot;Internal Server Error&amp;quot;. In some cases, this can happen in the middle of the file transfer process and cause errors on the site. On GoDaddy.com, this appears to happen when the server is under a heavy load and the update takes longer than 2 minutes to complete.&#039;&#039;&lt;br /&gt;
&#039;&#039;Based on recent testing, sites on these slower shared hosts can safely be updated using a free third-party extension called [http://tinyurl.com/7d9odse Admin Tools]. If you are updating a site on a shared host, please consider using Admin Tools or else use the Manually Copy Program Files method outlined below.&#039;&#039;&lt;br /&gt;
&#039;&#039;If you have experienced an error during the update, there is a process for repairing the site.&#039;&#039;&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method (Recommended)=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Delete removed files ==&lt;br /&gt;
Look at the list of removed files in administrator/components/com_admin/script.php.&lt;br /&gt;
Delete each of the files.&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly.&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 2.5]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102132</id>
		<title>Archived:Upgrade Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102132"/>
		<updated>2013-08-08T18:39:25Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3}}: [[J3.1:Upgrading_from_an_existing_version|Upgrading Joomla 3]]&lt;br /&gt;
&lt;br /&gt;
{{JVer/multi|1.6,1.7, 2.5}}: [[J2.5:Upgrading_from_an_existing_version|Upgrading in 1.6 to 2.5]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{JVer/multi|1.0,1.5}}: &lt;br /&gt;
&lt;br /&gt;
Upgrading a live website is not something to be undertaken lightly so please read the Upgrade Instructions carefully.  The instructions may appear complicated because there are many different configurations that need to be considered, but we have tried to write them so that you need only select a single path from the many available depending on your particular circumstances.&lt;br /&gt;
&lt;br /&gt;
The overall procedure is:&lt;br /&gt;
# Download the correct patch package.&lt;br /&gt;
# Make a copy of your live site.&lt;br /&gt;
# Install the patch package on the copy site.&lt;br /&gt;
# Make any database changes required on your copy site.&lt;br /&gt;
# Test it thoroughly.&lt;br /&gt;
# Backup your live site.&lt;br /&gt;
# Install the patch package on your live site.&lt;br /&gt;
# Make any database changes required on your live site.&lt;br /&gt;
# Make any other changes required&lt;br /&gt;
# Check your live site to make sure it is working correctly.&lt;br /&gt;
&lt;br /&gt;
Please read the full upgrade instructions, listed below, carefully.  If you have any questions before, during, or after the upgrade then please ask them on the appropriate upgrade forum.&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.0.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,36.0.html Joomla! 1.0 Upgrading 1.0.x Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/21/86/ Current status], [http://www.joomla.org/content/blogcategory/32/66/ Version info], [http://www.joomla.org/content/category/5/34/78/ Changelogs], [http://www.joomla.org/content/category/5/39/95/ MD5 Checksums]}}&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.15]]&#039;&#039;&#039;&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14 RC1]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.5.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,430.0.html Joomla! 1.5 Migrating and Upgrading Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/27/103/ Current status], [http://www.joomla.org/content/blogcategory/57/111/ Version info], [http://www.joomla.org/content/category/5/59/116/ Changelogs], [http://www.joomla.org/content/category/5/60/117/ MD5 Checksums]}}&lt;br /&gt;
&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading 1.5 from an existing 1.5x version]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.5 Stable]]&#039;&#039;&#039; (from a 1.5 Release Candidate)&lt;br /&gt;
====Migration from 1.0.x series====&lt;br /&gt;
* &#039;&#039;&#039;[[Migrating from 1.0.x to 1.5 Stable]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Landing Pages]][[Category:Upgrading]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102131</id>
		<title>Archived:Upgrade Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102131"/>
		<updated>2013-08-08T18:38:03Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[J3.1:Upgrading_from_an_existing_version|Upgrading Joomla 3]]&lt;br /&gt;
&lt;br /&gt;
[[J2.5:Upgrading_from_an_existing_version|Upgrading in 1.6 to 2.5]]&lt;br /&gt;
{{JVer/multi|1.0,1.5}}: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upgrading a live website is not something to be undertaken lightly so please read the Upgrade Instructions carefully.  The instructions may appear complicated because there are many different configurations that need to be considered, but we have tried to write them so that you need only select a single path from the many available depending on your particular circumstances.&lt;br /&gt;
&lt;br /&gt;
The overall procedure is:&lt;br /&gt;
# Download the correct patch package.&lt;br /&gt;
# Make a copy of your live site.&lt;br /&gt;
# Install the patch package on the copy site.&lt;br /&gt;
# Make any database changes required on your copy site.&lt;br /&gt;
# Test it thoroughly.&lt;br /&gt;
# Backup your live site.&lt;br /&gt;
# Install the patch package on your live site.&lt;br /&gt;
# Make any database changes required on your live site.&lt;br /&gt;
# Make any other changes required&lt;br /&gt;
# Check your live site to make sure it is working correctly.&lt;br /&gt;
&lt;br /&gt;
Please read the full upgrade instructions, listed below, carefully.  If you have any questions before, during, or after the upgrade then please ask them on the appropriate upgrade forum.&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.0.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,36.0.html Joomla! 1.0 Upgrading 1.0.x Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/21/86/ Current status], [http://www.joomla.org/content/blogcategory/32/66/ Version info], [http://www.joomla.org/content/category/5/34/78/ Changelogs], [http://www.joomla.org/content/category/5/39/95/ MD5 Checksums]}}&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.15]]&#039;&#039;&#039;&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14 RC1]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.5.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,430.0.html Joomla! 1.5 Migrating and Upgrading Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/27/103/ Current status], [http://www.joomla.org/content/blogcategory/57/111/ Version info], [http://www.joomla.org/content/category/5/59/116/ Changelogs], [http://www.joomla.org/content/category/5/60/117/ MD5 Checksums]}}&lt;br /&gt;
&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading 1.5 from an existing 1.5x version]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.5 Stable]]&#039;&#039;&#039; (from a 1.5 Release Candidate)&lt;br /&gt;
====Migration from 1.0.x series====&lt;br /&gt;
* &#039;&#039;&#039;[[Migrating from 1.0.x to 1.5 Stable]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Landing Pages]][[Category:Upgrading]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102130</id>
		<title>Archived:Upgrade Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Archived:Upgrade_Instructions&amp;diff=102130"/>
		<updated>2013-08-08T18:33:15Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|1.0,1.5}}: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upgrading a live website is not something to be undertaken lightly so please read the Upgrade Instructions carefully.  The instructions may appear complicated because there are many different configurations that need to be considered, but we have tried to write them so that you need only select a single path from the many available depending on your particular circumstances.&lt;br /&gt;
&lt;br /&gt;
The overall procedure is:&lt;br /&gt;
# Download the correct patch package.&lt;br /&gt;
# Make a copy of your live site.&lt;br /&gt;
# Install the patch package on the copy site.&lt;br /&gt;
# Make any database changes required on your copy site.&lt;br /&gt;
# Test it thoroughly.&lt;br /&gt;
# Backup your live site.&lt;br /&gt;
# Install the patch package on your live site.&lt;br /&gt;
# Make any database changes required on your live site.&lt;br /&gt;
# Make any other changes required&lt;br /&gt;
# Check your live site to make sure it is working correctly.&lt;br /&gt;
&lt;br /&gt;
Please read the full upgrade instructions, listed below, carefully.  If you have any questions before, during, or after the upgrade then please ask them on the appropriate upgrade forum.&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.0.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,36.0.html Joomla! 1.0 Upgrading 1.0.x Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/21/86/ Current status], [http://www.joomla.org/content/blogcategory/32/66/ Version info], [http://www.joomla.org/content/category/5/34/78/ Changelogs], [http://www.joomla.org/content/category/5/39/95/ MD5 Checksums]}}&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.15]]&#039;&#039;&#039;&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14]]&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.0.14 RC1]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Joomla! 1.5.x Series==&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/index.php/board,430.0.html Joomla! 1.5 Migrating and Upgrading Forum].&lt;br /&gt;
{{Ambox|type=notice|image=notice|style=width:500px|text=[http://dev.joomla.org/content/blogcategory/27/103/ Current status], [http://www.joomla.org/content/blogcategory/57/111/ Version info], [http://www.joomla.org/content/category/5/59/116/ Changelogs], [http://www.joomla.org/content/category/5/60/117/ MD5 Checksums]}}&lt;br /&gt;
&lt;br /&gt;
====Latest release====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading 1.5 from an existing 1.5x version]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Earlier releases====&lt;br /&gt;
* &#039;&#039;&#039;[[Upgrading to 1.5 Stable]]&#039;&#039;&#039; (from a 1.5 Release Candidate)&lt;br /&gt;
====Migration from 1.0.x series====&lt;br /&gt;
* &#039;&#039;&#039;[[Migrating from 1.0.x to 1.5 Stable]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Landing Pages]][[Category:Upgrading]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102047</id>
		<title>J3.x:CLI Applications Broken</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102047"/>
		<updated>2013-08-04T15:54:44Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because of changes made to JTable,  CLI and other stand alone applications that use JTable break in Joomla 3.1.3 and later.&lt;br /&gt;
This is because you now must also load the legacy and cms libraries in order to work with JTable.&lt;br /&gt;
&lt;br /&gt;
Adding this code to your application should fix the issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
jimport(&#039;joomla.observer.mapper&#039;);&lt;br /&gt;
jimport(&#039;cms.helper.tags&#039;);&lt;br /&gt;
jimport(&#039;cms.table.corecontent&#039;);&lt;br /&gt;
// Categories is in legacy for CMS 3 so we have to check there.&lt;br /&gt;
JLoader::registerPrefix(&#039;J&#039;, JPATH_PLATFORM . &#039;/legacy&#039;);&lt;br /&gt;
	JLoader::Register(&#039;J&#039;, JPATH_PLATFORM . &#039;/cms&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
You may also need to load some other classes [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31663 Hot fix].&lt;br /&gt;
&lt;br /&gt;
The hotfix at this location can also be applied if you do not want to or cannot modify your application. &lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;br /&gt;
[[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102008</id>
		<title>J3.x:CLI Applications Broken</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102008"/>
		<updated>2013-08-02T20:50:33Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because of changes made to JTable,  CLI and some other applications that use JTable break in Joomla 3.1.3 and later.&lt;br /&gt;
&lt;br /&gt;
Adding this code to your application should fix the issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
jimport(&#039;joomla.observer.mapper&#039;);&lt;br /&gt;
jimport(&#039;cms.helper.tags&#039;);&lt;br /&gt;
jimport(&#039;cms.table.corecontent&#039;);&lt;br /&gt;
// Categories is in legacy for CMS 3 so we have to check there.&lt;br /&gt;
JLoader::registerPrefix(&#039;J&#039;, JPATH_PLATFORM . &#039;/legacy&#039;);&lt;br /&gt;
	JLoader::Register(&#039;J&#039;, JPATH_PLATFORM . &#039;/cms&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;br /&gt;
[[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:SQLSRV_Problems_in_2.5.13&amp;diff=102006</id>
		<title>J2.5:SQLSRV Problems in 2.5.13</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:SQLSRV_Problems_in_2.5.13&amp;diff=102006"/>
		<updated>2013-08-02T14:35:31Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The main article and category list queries are broken for SqlSrv based sites.&lt;br /&gt;
&lt;br /&gt;
To fix please apply the  [hotfix that is available on &lt;br /&gt;
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31634].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 2.5.13 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J2.5:SQLSRV_Problems_in_2.5.13&amp;diff=102005</id>
		<title>J2.5:SQLSRV Problems in 2.5.13</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J2.5:SQLSRV_Problems_in_2.5.13&amp;diff=102005"/>
		<updated>2013-08-02T14:34:29Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot; The main article and category list queries are broken for SqlSrv based sites.  To fix please apply the  [hotfix that is available on  http://joomlacode.org/gf/project/joomla/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The main article and category list queries are broken for SqlSrv based sites.&lt;br /&gt;
&lt;br /&gt;
To fix please apply the  [hotfix that is available on &lt;br /&gt;
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31634].&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Problems_for_Sqlsrv&amp;diff=102004</id>
		<title>J3.x:Problems for Sqlsrv</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Problems_for_Sqlsrv&amp;diff=102004"/>
		<updated>2013-08-02T14:32:52Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot; The main article and category list queries are broken for SqlSrv based sites.  To fix please apply the  [hotfix that is available on  http://joomlacode.org/gf/project/joomla/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The main article and category list queries are broken for SqlSrv based sites.&lt;br /&gt;
&lt;br /&gt;
To fix please apply the  [hotfix that is available on &lt;br /&gt;
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31634].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]][[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=102003</id>
		<title>J3.x:Cannot log in to Joomla frontend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=102003"/>
		<updated>2013-08-02T14:21:06Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A small number of users have reported not being able to login to the front end in Joomla 3.1.4.  &lt;br /&gt;
&lt;br /&gt;
This seems to only occur when the users have a corrupt asset table.&lt;br /&gt;
&lt;br /&gt;
This is usually due to a faulty migration from Joomla 1.5.&lt;br /&gt;
&lt;br /&gt;
As a first step, click the rebuild icon in any categories view and see if this solves the problem.&lt;br /&gt;
&lt;br /&gt;
If this does not solve, look at your asset table in your database. If there is more than one parent_id with a value of 0 this indicates a corrupt table. &lt;br /&gt;
&#039;&#039;&#039;Only the root asset is allowed to have parent_id=0.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
TO fix you can manually or with an sql theory change the parent ids.&lt;br /&gt;
If the broken assets are categories the parent should be set to the id number for that component (for example usually the id for com_content is 8). (They can also be set to   have a parent of another category in the same component.)&lt;br /&gt;
&lt;br /&gt;
For something besides a category  (for articles for example), set the parent either to a  category id or to the id for the extension if the extension does not use categories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]][[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102002</id>
		<title>J3.x:CLI Applications Broken</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102002"/>
		<updated>2013-08-02T14:18:10Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because of changes made to JTable,  CLI and some other applications that use JTable break in Joomla 3.1.3 and later.&lt;br /&gt;
&lt;br /&gt;
Adding this code to your application should fix the issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
jimport(&#039;cms.helper.tags&#039;);&lt;br /&gt;
jimport(&#039;cms.table.corecontent&#039;);&lt;br /&gt;
// Categories is in legacy for CMS 3 so we have to check there.&lt;br /&gt;
JLoader::registerPrefix(&#039;J&#039;, JPATH_PLATFORM . &#039;/legacy&#039;);&lt;br /&gt;
	JLoader::Register(&#039;J&#039;, JPATH_PLATFORM . &#039;/cms&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;br /&gt;
[[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102001</id>
		<title>J3.x:CLI Applications Broken</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:CLI_Applications_Broken&amp;diff=102001"/>
		<updated>2013-08-02T14:17:38Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;CLI and some other applications that use JTable break in Joomla 3.1.3 and later.  Adding this code to your application should fix the issue.  &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; jimport(&amp;#039;cms....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CLI and some other applications that use JTable break in Joomla 3.1.3 and later.&lt;br /&gt;
&lt;br /&gt;
Adding this code to your application should fix the issue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
jimport(&#039;cms.helper.tags&#039;);&lt;br /&gt;
jimport(&#039;cms.table.corecontent&#039;);&lt;br /&gt;
// Categories is in legacy for CMS 3 so we have to check there.&lt;br /&gt;
JLoader::registerPrefix(&#039;J&#039;, JPATH_PLATFORM . &#039;/legacy&#039;);&lt;br /&gt;
	JLoader::Register(&#039;J&#039;, JPATH_PLATFORM . &#039;/cms&#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;br /&gt;
[[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Toolbar_buttons_missing_after_upgrade&amp;diff=101999</id>
		<title>J3.x:Toolbar buttons missing after upgrade</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Toolbar_buttons_missing_after_upgrade&amp;diff=101999"/>
		<updated>2013-08-02T14:00:22Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{notice|This issue only affects Joomla! versions 3.1.4 and 3.1.5 or any version where there are CSS changes}}&lt;br /&gt;
After performing an update it is &#039;&#039;&#039;ESSENTIAL&#039;&#039;&#039; to clear your web browser cache to reload the admin template css. &lt;br /&gt;
&lt;br /&gt;
If you do not do this then the user will not see the toolbar buttons. &lt;br /&gt;
&lt;br /&gt;
Refreshing the browser cache solves this immediately. &lt;br /&gt;
&lt;br /&gt;
{{ambox|text=&#039;&#039;&#039;*Note - some browser especially chrome can have very sticky browser cache and it is not enough to do a ctrl+f5&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
If the problem persists you may want to check to see if your server has google_pagespeed enables. If it does, and you want to keep using mod_pagespeed you&#039;ll need to flush the server side cache on upgrading to 3.1.x. You do this by logging into the server and then executing&lt;br /&gt;
&lt;br /&gt;
typical command and location:&lt;br /&gt;
&lt;br /&gt;
sudo touch /var/cache/mod_pagespeed/cache.flush&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;br /&gt;
[[Category:Version 3.1.5 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Security_hotfixes_for_Joomla_EOL_versions&amp;diff=101992</id>
		<title>Security hotfixes for Joomla EOL versions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Security_hotfixes_for_Joomla_EOL_versions&amp;diff=101992"/>
		<updated>2013-08-02T02:20:06Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;Although Joomla 1.5 has reached end of life, there is a security patch available at this link:  http://joomlacode.org/gf/download/trackeritem/31626/83528/UploadFix15v3.zip   h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Although Joomla 1.5 has reached end of life, there is a security patch available at this link:&lt;br /&gt;
&lt;br /&gt;
http://joomlacode.org/gf/download/trackeritem/31626/83528/UploadFix15v3.zip&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&amp;amp;tracker_item_id=31626  is the tracker item and currently there are 3 zips, us the top one.&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Toolbar_buttons_missing_after_upgrade&amp;diff=101964</id>
		<title>J3.x:Toolbar buttons missing after upgrade</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Toolbar_buttons_missing_after_upgrade&amp;diff=101964"/>
		<updated>2013-07-31T21:54:02Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;After performing an update it is &#039;&#039;&#039;ESSENTIAL&#039;&#039;&#039; to clear your web browser cache to reload the admin template css. &lt;br /&gt;
&lt;br /&gt;
If you do not do this then the user will not see the toolbar buttons. &lt;br /&gt;
&lt;br /&gt;
Refreshing the browser cache solves this immediately. &lt;br /&gt;
&lt;br /&gt;
[Note : some browser especially chrome can have very sticky browser cache and its not enough to do a ctrl+f5]&lt;br /&gt;
&lt;br /&gt;
If the problem persists you may want to check to see if your server has google_pagespeed enables. If it does, and you want to keep using mod_pagespeed you&#039;ll need to flush the server side cache on upgrading to 3.1.4. You do this by logging into the server and then executing&lt;br /&gt;
&lt;br /&gt;
typical command and location:&lt;br /&gt;
&lt;br /&gt;
sudo touch /var/cache/mod_pagespeed/cache.flush&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101956</id>
		<title>J3.x:Cannot log in to Joomla frontend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101956"/>
		<updated>2013-07-30T14:34:41Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A small number of users have reported not being able to login to the front end in Joomla 3.1.4.  &lt;br /&gt;
&lt;br /&gt;
This seems to only occur when the users have a corrupt asset table.&lt;br /&gt;
&lt;br /&gt;
This is usually due to a faulty migration from Joomla 1.5.&lt;br /&gt;
&lt;br /&gt;
As a first step, click the rebuild icon in any categories view and see if this solves the problem.&lt;br /&gt;
&lt;br /&gt;
If this does not solve, look at your asset table in your database. If there is more than one parent_id with a value of 0 this indicates a corrupt table. &lt;br /&gt;
&#039;&#039;&#039;Only the root asset is allowed to have parent_id=0.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
TO fix you can manually or with an sql theory change the parent ids.&lt;br /&gt;
If the broken assets are categories the parent should be set to the id number for that component (for example usually the id for com_content is 8). (They can also be set to   have a parent of another category in the same component.)&lt;br /&gt;
&lt;br /&gt;
For something besides a category  (for articles for example), set the parent either to a  category id or to the id for the extension if the extension does not use categories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Portal:Bug_Squad/Intro&amp;diff=101951</id>
		<title>Portal:Bug Squad/Intro</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Portal:Bug_Squad/Intro&amp;diff=101951"/>
		<updated>2013-07-29T13:24:10Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:workgroups_bugsquad.jpg|right]]&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;This is where you will find all the information you need as a Joomal! Bug Squad member.&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Joomla! Bug Squad (JBS) is a team within the [[Production Working Groups]]. Their job is to identify and fix bugs in Joomla. This includes the following:&lt;br /&gt;
&lt;br /&gt;
* Scan the [http://forum.joomla.org/viewforum.php?f=199 Joomla! Bug Reporting Forum] and [http://forum.joomla.org/viewforum.php?f=579 Joomla! 2.5 Bug Reporting Forum] for reported issues and help community members with solving these issues.&lt;br /&gt;
* [[http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker]] .&lt;br /&gt;
* Fix reported bugs and resolve reported issues according to the [[Bug Tracking Process]].&amp;lt;noinclude&amp;gt;[[Category:Landing subpages|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_create_new_content_3.1.4&amp;diff=101945</id>
		<title>J3.x:Cannot create new content 3.1.4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_create_new_content_3.1.4&amp;diff=101945"/>
		<updated>2013-07-28T17:00:05Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some users report that they receive the following error when attempting to create new content (of any type):&lt;br /&gt;
&lt;br /&gt;
 HTTP Error 500 (Internal Server Error): An unexpected condition was &lt;br /&gt;
 encountered while the server was attempting to fulfill the request.&lt;br /&gt;
&lt;br /&gt;
or with maximum reporting on&lt;br /&gt;
&lt;br /&gt;
 Fatal error: Invalid opcode 153/1/8. in &lt;br /&gt;
 /var/.../libraries/joomla/table/observer/tags.php on line 159&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This appears to be caused by a bug in eAccelerator.  Either update to the current version or change your caching method to a different option.&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_create_new_content_3.1.4&amp;diff=101944</id>
		<title>J3.x:Cannot create new content 3.1.4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_create_new_content_3.1.4&amp;diff=101944"/>
		<updated>2013-07-28T16:59:23Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;Some users report that they receive the following error when attempting to create new content (of any type):   HTTP Error 500 (Internal Server Error): An unexpected condition ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some users report that they receive the following error when attempting to create new content (of any type):&lt;br /&gt;
&lt;br /&gt;
 HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.&lt;br /&gt;
&lt;br /&gt;
or with maximum reporting on&lt;br /&gt;
&lt;br /&gt;
 Fatal error: Invalid opcode 153/1/8. in /var/.../libraries/joomla/table/observer/tags.php on line 159&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This appears to be caused by a bug in eAccelerator.  Either update to the current version or change your caching method to a different option.&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101943</id>
		<title>J3.x:Cannot log in to Joomla frontend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101943"/>
		<updated>2013-07-28T16:32:36Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A small number of users have reported not being able to login to the front end in Joomla 3.1.4.  &lt;br /&gt;
&lt;br /&gt;
This seems to only occur when the users have a corrupt asset table.&lt;br /&gt;
&lt;br /&gt;
This is usually due to a faulty migration from Joomla 1.5.&lt;br /&gt;
&lt;br /&gt;
To check this, look at your asset table in your database. If there is more than one parent_id with a value of 0 this indicates a corrupt table. &lt;br /&gt;
&#039;&#039;&#039;Only the root asset is allowed to have parent_id=0.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
TO fix you can manually or with an sql theory change the parent ids.&lt;br /&gt;
If the broken assets are categories the parent should be set to the id number for that component (for example usually the id for com_content is 8). (They can also be set to   have a parent of another category in the same component.)&lt;br /&gt;
&lt;br /&gt;
For something besides a category, set the parent either to a  category id or to the id for the extension if the extension does not use categories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101942</id>
		<title>J3.x:Cannot log in to Joomla frontend</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Cannot_log_in_to_Joomla_frontend&amp;diff=101942"/>
		<updated>2013-07-28T16:29:53Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;A small number of users have reported not being able to login to the front end in Joomla 3.1.4.    This seems to only occur when the users have a corrupt asset table.  This is...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A small number of users have reported not being able to login to the front end in Joomla 3.1.4.  &lt;br /&gt;
&lt;br /&gt;
This seems to only occur when the users have a corrupt asset table.&lt;br /&gt;
&lt;br /&gt;
This is usually due to a faulty migration from Joomla 1.5.&lt;br /&gt;
&lt;br /&gt;
To check this, look at your asset table in your database. If there is more than one parent_id with a value of 0 this indicates a corrupt table. &lt;br /&gt;
&#039;&#039;&#039;Only the root asset is allowed to have parent_id=0.&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
TO fix you can manually or with an sql theory change the parent ids.&lt;br /&gt;
If the broken assets are categories the parent should be set to the id number for that component (for example usually the id for com_content is 8. (They can also be set to   have a parent of another category in the same component).&lt;br /&gt;
&lt;br /&gt;
For something besides a category, set the parent either to a  category id or to the id for the extension if the extension does not use categories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101924</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101924"/>
		<updated>2013-07-27T18:44:46Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Modify your component&amp;#039;s table class (or classes if you have multiple tables) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
Add the following to your JTable constructor:&lt;br /&gt;
&lt;br /&gt;
$this-&amp;gt;_observers = new JObserverUpdater($this);&lt;br /&gt;
JObserverMapper::attachAllObservers($this);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The addition material formerly located here is no longer needed after 3.1.4&#039;&#039;&#039; Please read the document history for this page if you are required to support 3.1.0 or 3.1.1.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this was only required in 3.1.0 and 3.1.1. It should not be used in 3.1.4 or later.&#039;&#039;&#039; Please read the history of this page if you need instructions for older versions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. In update an extension to 3.1.4 you may need to fix adjust your edit views.&lt;br /&gt;
&lt;br /&gt;
In 3.1.4 or later this special handling is not necessary.  Best practice is to use the standard JLayouts since this provides a consistent experience for users.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101923</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101923"/>
		<updated>2013-07-27T18:32:10Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is no longer needed after 3.1.4&#039;&#039;&#039; Please read the document history for this page if you are required to support 3.1.0 or 3.1.1.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this was only required in 3.1.0 and 3.1.1. It should not be used in 3.1.4 or later.&#039;&#039;&#039; Please read the history of this page if you need instructions for older versions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. In update an extension to 3.1.4 you may need to fix adjust your edit views.&lt;br /&gt;
&lt;br /&gt;
In 3.1.4 or later this special handling is not necessary.  Best practice is to use the standard JLayouts since this provides a consistent experience for users.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101922</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101922"/>
		<updated>2013-07-27T18:18:21Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Add or modify a delete() method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Note that this applies only to 3.1.0 and 3.1.1. This is not needed in 3.1.4 or later if other changes are followed.  It is not necessary to remove this code from 3.1.0/3.1.1 style implementations.&lt;br /&gt;
&lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
Note this is only needed in 3.1.0 and 3.1.1. It is no longer required in 3.1.4 or later.&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
===Backward Compatibility for later than 3.1.4 ===&lt;br /&gt;
&lt;br /&gt;
If you implemented tags prior to 3.1.4 you may need to add the following method to your class if you do not wish to redo all of tagging in your extension. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to validate the form data.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   JForm   $form   The form to validate against.&lt;br /&gt;
	 * @param   array   $data   The data to validate.&lt;br /&gt;
	 * @param   string  $group  The name of the field group to validate.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  mixed  Array of filtered data if valid, false otherwise.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @see     JFormRule&lt;br /&gt;
	 * @see     JFilterInput&lt;br /&gt;
	 * @since   2.1&lt;br /&gt;
	 */&lt;br /&gt;
	public function validate($form, $data, $group = null)&lt;br /&gt;
	{&lt;br /&gt;
		$data = parent::validate($form, $data, $group);&lt;br /&gt;
&lt;br /&gt;
		// Tags B/C break at 3.1.2&lt;br /&gt;
		if (version_compare(JVERSION, &#039;3.1.2&#039;, &#039;ge&#039;))&lt;br /&gt;
		{&lt;br /&gt;
			if (isset($data[&#039;metadata&#039;][&#039;tags&#039;]))&lt;br /&gt;
			{&lt;br /&gt;
				$data[&#039;tags&#039;] = $data[&#039;metadata&#039;][&#039;tags&#039;];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $data;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this was only required in 3.1.0 and 3.1.1. It should not be used in 3.1.4 or later.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
In 3.1.4 or later this special handling is not necessary.  Best practice is to use the standard JLayouts since this provides a consistent experience for users.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101918</id>
		<title>J3.x:Extensions Broken in 3.1.4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101918"/>
		<updated>2013-07-27T17:14:37Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some extensions that worked in 3.1.1 give a 500 error in version 3.1.4 . If you have this problem you can install this [http://joomlacode.org/gf/download/trackeritem/31565/83397/legacy.zip hotfix] just as you would a normal extension. &lt;br /&gt;
&lt;br /&gt;
Extension Manager =&amp;gt; Install&lt;br /&gt;
&lt;br /&gt;
This will be fixed in 3.1.5.&lt;br /&gt;
&lt;br /&gt;
For any other extension related issues, please contact the extension developer for information.&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101916</id>
		<title>J3.x:Extensions Broken in 3.1.4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101916"/>
		<updated>2013-07-27T17:03:41Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some extensions that worked in 3.1.1 give a 500 error in version 3.1.4 . If you have this problem you can install this [http://joomlacode.org/gf/download/trackeritem/31565/83397/legacy.zip hotfix] just as you would a normal extension.&lt;br /&gt;
&lt;br /&gt;
For any other extension related issues, please contact the extension developer for information.&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101915</id>
		<title>J3.x:Extensions Broken in 3.1.4</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Extensions_Broken_in_3.1.4&amp;diff=101915"/>
		<updated>2013-07-27T16:59:01Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;Some extensions break in version 3.1.4. If you have this problem you can install this [http://joomlacode.org/gf/download/trackeritem/31565/83397/legacy.zip hotfix] just as you...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some extensions break in version 3.1.4. If you have this problem you can install this [http://joomlacode.org/gf/download/trackeritem/31565/83397/legacy.zip hotfix] just as you would a normal extension.&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101914</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101914"/>
		<updated>2013-07-27T16:47:44Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Add a tag field to edit screens */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Note that this applies only to 3.1.0 and 3.1.1. This is not needed in 3.1.4 or later if other changes are followed.  It is not necessary to remove this code from 3.1.0/3.1.1 style implementations.&lt;br /&gt;
&lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
Note this is only needed in 3.1.0 and 3.1.1. It is no longer required in 3.1.4 or later.&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this was only required in 3.1.0 and 3.1.1. It should not be used in 3.1.4 or later.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
In 3.1.4 or later this special handling is not necessary.  Best practice is to use the standard JLayouts since this provides a consistent experience for users.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101913</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101913"/>
		<updated>2013-07-27T16:46:08Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Add tags to the getItem() method of the model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Note that this applies only to 3.1.0 and 3.1.1. This is not needed in 3.1.4 or later if other changes are followed.  It is not necessary to remove this code from 3.1.0/3.1.1 style implementations.&lt;br /&gt;
&lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
Note this is only needed in 3.1.0 and 3.1.1. It is no longer required in 3.1.4 or later.&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this was only required in 3.1.0 and 3.1.1. It should not be used in 3.1.4 or later.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101912</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101912"/>
		<updated>2013-07-27T16:41:46Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Modify your store() method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Note that this applies only to 3.1.0 and 3.1.1. This is not needed in 3.1.4 or later if other changes are followed.  It is not necessary to remove this code from 3.1.0/3.1.1 style implementations.&lt;br /&gt;
&lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
Note this is only needed in 3.1.0 and 3.1.1. It is no longer required in 3.1.4 or later.&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
Note: It is our intent to make the storage field a property so that alternative fields can be used.&lt;br /&gt;
Note: As of 3.1.2 use:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101911</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101911"/>
		<updated>2013-07-27T16:06:57Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Add or modify a delete() method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
Note this is only needed in 3.1.0 and 3.1.1. It is no longer required in 3.1.4 or later.&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
Note: It is our intent to make the storage field a property so that alternative fields can be used.&lt;br /&gt;
Note: As of 3.1.2 use:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101910</id>
		<title>J3.x:Using Tags in an Extension</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Using_Tags_in_an_Extension&amp;diff=101910"/>
		<updated>2013-07-27T16:06:02Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joomla&#039;s tagging system is used in all core content extensions and  is designed to be be easy to integrate into other extensions that use standard Joomla design patterns. &lt;br /&gt;
&lt;br /&gt;
Using tags in an extension is relatively straightforward but it requires small changes in a number of specific places.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a content type for each view ==&lt;br /&gt;
Note: Types can be added using either sql or postflight by creating a JTableContenttype instance and adding a row.&lt;br /&gt;
&lt;br /&gt;
First identify which tables contain data that will be tagged and what the name of the single item view displaying each of these tables. For example:&lt;br /&gt;
* #__contact_details  is the table displayed in the view contact of component com_contact with table class ContactTableContact.&lt;br /&gt;
* #__weblinks is the table displayed in the view weblink of com_weblinks so WeblinksTableWeblink. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `#__content_types` (&lt;br /&gt;
  `type_id` int(10) unsigned NOT NULL AUTO_INCREMENT,&lt;br /&gt;
  `type_title` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `type_alias` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `table` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
  `rules` text NOT NULL,&lt;br /&gt;
   `field_mappings` text NOT NULL,&lt;br /&gt;
 `router` varchar(255) NOT NULL DEFAULT &#039;&#039;,&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each table/option/view you will need to make an entry in #__content_types.  You can do this either using sql or postflight by creating an instance of JTableContenttype. Don&#039;t forget a category type if you use the Joomla categories API.&lt;br /&gt;
&lt;br /&gt;
A string giving component.view (that would be in the page request, typically matching the model name) goes in the **type_alias** field.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;table&#039;&#039;&#039; gives the complete table class information for the table class stored as a JSON object in which the first element represents your &amp;quot;special&amp;quot; table and the second an optional common table (otherwise it will default the JTableCorecontent. This includes the name of the database table, the name of the primary key, the prefix, the name, an option array as used in your constructor and getInstance() methods. This enables the tagging system (and other APIs) to access your table easily. &lt;br /&gt;
&lt;br /&gt;
If you are using Joomla categories make sure to create a category type so that they can be tagged. In Joomla 3.1 and 3.1.1 there is an error where the tag field will show even if there is not a type, but this is corrected in 3.1.4.  &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039; : Please note that the table name for the common table is #__ucm_content. This is INCORRECT in 3.1 and 3.1.1 data but is not currently used.  The data was updated in 3.1.4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;special&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Content&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;},&amp;quot;common&amp;quot;:{&amp;quot;dbtable&amp;quot;:&amp;quot;#__ucm_content&amp;quot;,&amp;quot;key&amp;quot;:&amp;quot;ucm_id&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;Corecontent&amp;quot;,&amp;quot;prefix&amp;quot;:&amp;quot;JTable&amp;quot;,&amp;quot;config&amp;quot;:&amp;quot;array()&amp;quot;}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;type_title&#039;&#039;&#039; field would potentially be used for display although this is not implemented currently except in the contentttype field.  Usually it should begin with an upper case letter if it is in English. See note about how to make this translatable. &lt;br /&gt;
&lt;br /&gt;
 note:&lt;br /&gt;
 To make your type names translatable add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
COM_TAGS_CONTENT_TYPE_ + the type_title&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in both the ini and sys.ini files. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules&#039;&#039;&#039;  is currently not used. It will likely be removed in favor of an asset_id for each type, but currently you can ignore this field which will be managed by JTable. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;field_mappings&#039;&#039;&#039; maps the names of specific fields in your table to a set of standard names. This mapping is stored as a JSON array with the first element mapping to the common fields and the second one mapping the other fields from the table. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important note&#039;&#039;&#039;  The JHelperTags and JUcm APIS at 3.1.1 supported arrays for this field, but as of  3.1.4 either arrays or objects with a default of objects are supported.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;{&amp;quot;common&amp;quot;:[{&amp;quot;core_content_item_id&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;core_title&amp;quot;:&amp;quot;title&amp;quot;,&amp;quot;core_state&amp;quot;:&amp;quot;published&amp;quot;,&amp;quot;core_alias&amp;quot;:&amp;quot;alias&amp;quot;,&amp;quot;core_created_time&amp;quot;:&amp;quot;created_time&amp;quot;,&amp;quot;core_modified_time&amp;quot;:&amp;quot;modified_time&amp;quot;,&amp;quot;core_body&amp;quot;:&amp;quot;description&amp;quot;, &amp;quot;core_hits&amp;quot;:&amp;quot;hits&amp;quot;,&amp;quot;core_publish_up&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_publish_down&amp;quot;:&amp;quot;null&amp;quot;,&amp;quot;core_access&amp;quot;:&amp;quot;access&amp;quot;, &amp;quot;core_params&amp;quot;:&amp;quot;params&amp;quot;, &amp;quot;core_featured&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metadata&amp;quot;:&amp;quot;metadata&amp;quot;, &amp;quot;core_language&amp;quot;:&amp;quot;language&amp;quot;, &amp;quot;core_images&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_urls&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_version&amp;quot;:&amp;quot;version&amp;quot;, &amp;quot;core_ordering&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;core_metakey&amp;quot;:&amp;quot;metakey&amp;quot;, &amp;quot;core_metadesc&amp;quot;:&amp;quot;metadesc&amp;quot;, &amp;quot;core_catid&amp;quot;:&amp;quot;parent_id&amp;quot;, &amp;quot;core_xreference&amp;quot;:&amp;quot;null&amp;quot;, &amp;quot;asset_id&amp;quot;:&amp;quot;asset_id&amp;quot;}], &amp;quot;special&amp;quot;: [{&amp;quot;parent_id&amp;quot;:&amp;quot;parent_id&amp;quot;,&amp;quot;lft&amp;quot;:&amp;quot;lft&amp;quot;,&amp;quot;rgt&amp;quot;:&amp;quot;rgt&amp;quot;,&amp;quot;level&amp;quot;:&amp;quot;level&amp;quot;,&amp;quot;path&amp;quot;:&amp;quot;path&amp;quot;,&amp;quot;extension&amp;quot;:&amp;quot;extension&amp;quot;,&amp;quot;note&amp;quot;:&amp;quot;note&amp;quot;}]}&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the field mapping for the Article type. Note that article uses the name attribs for the core field called params.  If your table does not contain a field, put “null” instead.  Leaving it blank may cause SQL issues. The special fields are optional.  At a minimum for common fields you need to map: content_item_id, alias and title in order to successfully create urls in the tagged items list.  You also will probably want: access, status, and language.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Router&#039;&#039;&#039; is an optional name of a static helper router method for this type found in its front end helpers folder. &lt;br /&gt;
If you only store data in #__ucm_content you will eventually be able to leave the router field blank although this option is not currently implemented. If you do not have a custom router tags falls back to the rules found in JHelperRoute.&lt;br /&gt;
&lt;br /&gt;
== Modify your component&#039;s table class (or classes if you have multiple tables) ==&lt;br /&gt;
&lt;br /&gt;
This has several parts.&lt;br /&gt;
&lt;br /&gt;
=== Add a property ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicator that the tags have been changed&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    JHelperTags&lt;br /&gt;
	 * @since  3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected $tagsHelper = null;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
This property helps to manage change in tags.&lt;br /&gt;
&lt;br /&gt;
=== Modify your constructor ===&lt;br /&gt;
&lt;br /&gt;
Follow this example to modify your consructor which provides substantial reduction in duplicate code.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper = new JHelperTags();&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;typeAlias = &#039;com_contact.contact&#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modify your store() method === &lt;br /&gt;
Management of tagging and associated data is largely handled through the store() method. This provides maximum flexibility for the handling of tags across many extensions. &lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have a store() method you will need to add one.  The assumption is that tables will inherit from JTable. &lt;br /&gt;
&lt;br /&gt;
The handling involves preStoreProcess(), a call to the parent store() method, and then a postStoreProcess(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$this-&amp;gt;tagsHelper-&amp;gt;preStoreProcess($this);&lt;br /&gt;
		$result = parent::store($updateNulls);&lt;br /&gt;
&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;postStoreProcess($this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is important that this be in the correct order since completion of tag processing depends on having primary key data from the parent store() method.&lt;br /&gt;
&lt;br /&gt;
Note that much of this code is designed to prevent storage in in #__ucm_content when items are not tagged. If you want to always store in #__ucm_content you should modify the handling appropriately.&lt;br /&gt;
&lt;br /&gt;
=== Add or modify a delete() method ===&lt;br /&gt;
&lt;br /&gt;
The basic structure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Method to delete a row from the database table by primary key value.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $pk  Primary key to delete.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  boolean  True on success.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 * @throws  UnexpectedValueException&lt;br /&gt;
	 */&lt;br /&gt;
	public function delete($pk = null)&lt;br /&gt;
	{&lt;br /&gt;
		$result = parent::delete($pk);&lt;br /&gt;
		return $result &amp;amp;&amp;amp; $this-&amp;gt;tagsHelper-&amp;gt;deleteTagData($this, $pk);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This manages the deletion of all related data if a content item is deleted.&lt;br /&gt;
&lt;br /&gt;
== Add tags to the getItem() method of the model ==&lt;br /&gt;
&lt;br /&gt;
In the getItem() (or similar) method of your model add &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
			$item-&amp;gt;metadata[&#039;tags&#039;] = $item-&amp;gt;tags;&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
changing to your component and alias name, matching what is in the type table.and changing the name of id property to the name of your primary key.&lt;br /&gt;
&lt;br /&gt;
Note: It is our intent to make the storage field a property so that alternative fields can be used.&lt;br /&gt;
Note: As of 3.1.2 use:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		// Load item tags&lt;br /&gt;
		if (!empty($item-&amp;gt;id))&lt;br /&gt;
		{&lt;br /&gt;
			$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
			$item-&amp;gt;tags-&amp;gt;getTagIds($item-&amp;gt;id, &#039;com_contact.contact&#039;);&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add a tag field to edit screens ==&lt;br /&gt;
In any edit layouts where you want to allow tagging, you need to add the field to the xml and the appropriate layouts if necessary. The core layouts us a JLayout to manage this and the same layout by any extension.&lt;br /&gt;
&lt;br /&gt;
Update: Note that in &#039;&#039;&#039;3.1.1 only&#039;&#039;&#039; there is special handling of this in the core.  Tags in the edit screen &#039;&#039;&#039;MUST&#039;&#039;&#039; be part of a metadata &amp;lt;fields&amp;gt;&amp;lt;/fields&amp;gt; group.  The core provides two JLayouts to help you manage standard layouts, one (details) for the metadata and one for the sidebar that includes the tabs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field loads all the Javascript libraries required. You don&#039;t need to worry about that.&lt;br /&gt;
&lt;br /&gt;
The field supports two modes:  &lt;br /&gt;
* &#039;&#039;&#039;Nested tags mode.&#039;&#039;&#039; Hierarchical tag list. Doesn&#039;t support on the fly tag creation.&lt;br /&gt;
* &#039;&#039;&#039;AJAX mode.&#039;&#039;&#039;  Tags are searched while user types (3 min. chars required to launch the AJAX search). Custom tags are added by pressing ENTER or COMMA keys. Tags show the global route/path. Example: &amp;lt;code&amp;gt;grandpa/parent/tag&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The field mode can be forced or use the com_tags setting &amp;lt;code&amp;gt;Tag field mode&amp;lt;/code&amp;gt; to determine its mode. To set/force the field mode we have to add &#039;&#039;&#039;mode=&amp;quot;ajax&amp;quot;&#039;&#039;&#039; or &#039;&#039;&#039;mode=&amp;quot;nested&amp;quot;&#039;&#039;&#039; to the tag field definition.  &lt;br /&gt;
&lt;br /&gt;
Example of forced AJAX mode:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
The field also includes an attribute to allow/deny the user to enter custom values. Currently this only works in AJAX mode. The attribute has to be added to the field definition like **custom=&amp;quot;allow&amp;quot;** or **custom=&amp;quot;deny&amp;quot;**  &lt;br /&gt;
&lt;br /&gt;
Example field definition with custom tags denied:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;field name=&amp;quot;tags&amp;quot; type=&amp;quot;tag&amp;quot; mode=&amp;quot;ajax&amp;quot; custom=&amp;quot;denied&amp;quot;&lt;br /&gt;
			label=&amp;quot;JTAG&amp;quot; description=&amp;quot;JTAG_DESC&amp;quot;&lt;br /&gt;
			class=&amp;quot;inputbox span12 small&amp;quot; multiple=&amp;quot;true&amp;quot;&lt;br /&gt;
		&amp;gt;&lt;br /&gt;
		&amp;lt;/field&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
if it is not already there. Usually multiple should be true unless you have a specific reason for it not to be.&lt;br /&gt;
In the core components in administrator, the field is in the group shown on the right, below the language field.&lt;br /&gt;
&lt;br /&gt;
Note: As of 3.1.2 if you wish to use the field to designate parent tags you must add parent=&amp;quot;parent&amp;quot; to the xml definition of the field.&lt;br /&gt;
&lt;br /&gt;
== Prepare the view ==&lt;br /&gt;
Add an appropriate version of this to your view.html.php file before loading the layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$item-&amp;gt;tags = new JHelperTags;&lt;br /&gt;
$item-&amp;gt;tags-&amp;gt;getItemTags(&#039;com_newsfeeds.newsfeed.&#039; , $this-&amp;gt;item-&amp;gt;id); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter should match a type in the types table. The second parameter is the primary key under which this record is stored in your table. This would be used in any display in any view where you want the tags associated with the item to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set up the display ==&lt;br /&gt;
&lt;br /&gt;
In any layout where you want to display the tags associated with an item add:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Changing the object and property names as appropriate.&lt;br /&gt;
&lt;br /&gt;
You will most likely want to add the show_tags parameter to the item parameters, the menu item parameters and component configuration as appropriate for your use case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;?php if ($this-&amp;gt;params-&amp;gt;get(&#039;show_tags&#039;, 1) &amp;amp;&amp;amp; !empty($this-&amp;gt;item-&amp;gt;tags)) : ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php $this-&amp;gt;item-&amp;gt;tagLayout = new JLayoutFile(&#039;joomla.content.tags&#039;); ?&amp;gt;&lt;br /&gt;
		&amp;lt;?php echo $this-&amp;gt;item-&amp;gt;tagLayout-&amp;gt;render($this-&amp;gt;item-&amp;gt;tags-&amp;gt;itemTags); ?&amp;gt;&lt;br /&gt;
	&amp;lt;?php endif; ?&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Batch processing ==&lt;br /&gt;
If you want to add the ability to do batch tagging to a backend list view do the following.&lt;br /&gt;
&lt;br /&gt;
Add tag to the default_batch layout&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
        &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;div class=&amp;quot;control-group&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;controls&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;?php echo JHtml::_(&#039;batch.tag&#039;);?&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And add tag to the button class in the modal footer (Not totally necessary at this point, but good for potential future changes e.g. if unTag is added.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;button class=&amp;quot;btn&amp;quot; type=&amp;quot;button&amp;quot; onclick=&amp;quot;document.id(&#039;batch-category-id&#039;).value=&#039;&#039;;document.id(&#039;batch-access&#039;).value=&#039;&#039;;document.id(&#039;batch-language-id&#039;).value=&#039;&#039;;document.id(&#039;batch-user-id&#039;).value=&#039;&#039;;document.id(&#039;batch-tag-id)&#039;).value=&#039;&#039;&amp;quot; data-dismiss=&amp;quot;modal&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Add a batch method to your model if you are not extending JModelAdmin or overriding the batch method. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Batch tag a list of item.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   integer  $value     The value of the new tag.&lt;br /&gt;
	 * @param   array    $pks       An array of row IDs.&lt;br /&gt;
	 * @param   array    $contexts  An array of item contexts.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return  void.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @since   3.1&lt;br /&gt;
	 */&lt;br /&gt;
	protected function batchTag($value, $pks, $contexts)&lt;br /&gt;
	{&lt;br /&gt;
		$tagsHelper = new JHelperTags();&lt;br /&gt;
		$tagsHelper-&amp;gt;tagItems($value, $pks, $contexts);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And modify your batch method by adding&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		if (!empty($commands[&#039;tag&#039;]))&lt;br /&gt;
		{&lt;br /&gt;
			if (!$this-&amp;gt;batchTag($commands[&#039;tag&#039;], $pks, $contexts))&lt;br /&gt;
			{&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$done = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pay attention to any JSON encoded strings that you need special handling for in batch processing -- remember that you are saving a copy of the core fields and you need save to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That’s it, now create some tags, tag some items and you are set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]][[Category:Content Tags]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Subcategories_Not_Showing&amp;diff=101903</id>
		<title>J3.x:Subcategories Not Showing</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Subcategories_Not_Showing&amp;diff=101903"/>
		<updated>2013-07-27T00:07:50Z</updated>

		<summary type="html">&lt;p&gt;Elin: Created page with &amp;quot;Why are subcategories not showing on drill downs?  In some category vies subcategory information is not showing but they did prior to updating. This seems to be the case speci...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Why are subcategories not showing on drill downs?&lt;br /&gt;
&lt;br /&gt;
In some category vies subcategory information is not showing but they did prior to updating. This seems to be the case specifically when there is not a direct menu link to the category view displaying the subcategories.&lt;br /&gt;
&lt;br /&gt;
To fix the display there are several options depending on your situation.&lt;br /&gt;
&lt;br /&gt;
*Go to the menu link from which the drill down is reached.  In that link change &amp;quot;Show Empty Subcategories&amp;quot; to &amp;quot;Show.&amp;quot;&lt;br /&gt;
*Change the global com_content settings for &amp;quot;Show Empty Subcategories&amp;quot; to &amp;quot;Show.&amp;quot;&lt;br /&gt;
*Make a direct menu link with the settings you want.&lt;br /&gt;
*Make a layout override to use in that context that manages the show_empty_categories parameter as you prefer it to be handled for that page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Version 3.1.4 FAQ]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=101894</id>
		<title>Joomla:Release procedure and checklist</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Joomla:Release_procedure_and_checklist&amp;diff=101894"/>
		<updated>2013-07-26T03:46:33Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Pre-execution phase */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Coordinators]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
&lt;br /&gt;
This is a general checklist when a version of Joomla! is released. Keep in mind that a major release differs a lot from a [[Minor Release]] or even a [[Maintenance Release]]. The checklist here describes the steps that need to be done for (at least) [[Maintenance Release]] and [[Minor Release]].&lt;br /&gt;
&lt;br /&gt;
== Release checklist ==&lt;br /&gt;
&lt;br /&gt;
It depends on the [[Development Cycle]] when the checklist is triggered. A release can be done during every stage of the [[Development Cycle]], it does not matter if you release a beta or a stable version, this is a general checklist that can be used when releasing a new version of Joomla! The checklist starts when it&#039;s decided to release a version:&lt;br /&gt;
&lt;br /&gt;
=== Preparation phase ===&lt;br /&gt;
# Communication pre-release: check with PLT on timing&lt;br /&gt;
# Communication pre-release: inform Bug Squad and LT&#039;s about timing&lt;br /&gt;
# Decision: when the above has positive result, set a date and time for release&lt;br /&gt;
# Communication pre-release: inform Global Moderators about upcoming release&lt;br /&gt;
# Communication pre-release: check availability and assign release tasks to JBS and PLT members&lt;br /&gt;
# 5 days prior to release: freeze trunk for language changes&lt;br /&gt;
# 2 days prior to release: freeze trunk for all changes, draft release notes to translation teams&lt;br /&gt;
# 1 day prior to release: build packages for testing&lt;br /&gt;
# Day of release: set project flags on Joomlacode, update web pages&lt;br /&gt;
# Announce on forum, announce to LT&#039;s&lt;br /&gt;
&lt;br /&gt;
=== Pre-execution phase ===&lt;br /&gt;
# Apply latest translations (need to be delivered by translation work group).&lt;br /&gt;
# Create test package.&lt;br /&gt;
# Offer test package to testers: [[Bug Squad]] members, [[Development Team ]] members, translation members&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Draft the release notes on Joomla.org and post draft to the [http://forum.joomla.org/viewforum.php?f=54 private translation forum].&lt;br /&gt;
# Obtain any CVE numbers needed.&lt;br /&gt;
# Draft security notices as needed and leave unpublished on developer.joomla.org.&lt;br /&gt;
&lt;br /&gt;
=== Execution phase ===&lt;br /&gt;
# Check for security fixes.&lt;br /&gt;
# Create release notes document on joomla.org and post copy to translation forum.&lt;br /&gt;
# Change version information (libraries/cms/version/version.php)&lt;br /&gt;
# Add entry in CHANGELOG.php file&lt;br /&gt;
# Update administrator/manifests/files/joomla.xml file for version number and date.&lt;br /&gt;
# Check joomla.sql file for version number in #__extensions table for Joomla CMS extension&lt;br /&gt;
#* mysql, sqlazure, postgres&lt;br /&gt;
# Make sure there is at least one .sql update file in the com_admin/sql/updates/&amp;lt;db&amp;gt; folders (to update the db schema).&lt;br /&gt;
# Update the build.php for the new version number.&lt;br /&gt;
# Check language/en-GB/en-GB.files_joomla.sys.ini file for version number (not needed for minor update).&lt;br /&gt;
# Enable install check.&lt;br /&gt;
# Tag release in git and commit to local github repo.&lt;br /&gt;
# Package build.&lt;br /&gt;
# Offer test package to testers: [[Bug Squad]] members, [[Development Team ]] members, translation members&lt;br /&gt;
# If problems are found during this stage, go back to fix the problem. Use the [[Joomla! Maintenance Procedures]] and repeat until tests are performed successfully.&lt;br /&gt;
# Add package to joomlacode.org&lt;br /&gt;
## Before the release is public, set the joomlacode package flags as follows: Visible=No, Public=No, Require Login=Yes.&lt;br /&gt;
## Set the Release flags as follows: Visible=Yes, Released=Yes.&lt;br /&gt;
## Once package is released, change the Package flags to Visible=Yes, Public=Yes, Require Login=No.&lt;br /&gt;
## Change the prior version package to Visible=No but leave the prior version release flags as they are.&lt;br /&gt;
# Update XML file on site for the new version number information.&lt;br /&gt;
## FTP connect to update1.joomla.org and Navigate to www/core&lt;br /&gt;
## Change version attribute in list.xml (don&#039;t add new line)&lt;br /&gt;
## Add new update element (copy from previous) with new version number and new downloadurl and link to new archive file&lt;br /&gt;
## Test auto update from prior version(s) (make sure XML files have been copied to the SDN on update.joomla.org first)&lt;br /&gt;
# Update Joomla.org Download article&lt;br /&gt;
# Publish security articles on developer site.&lt;br /&gt;
# Publish release announcement on Joomla.org&lt;br /&gt;
# Publish announcement on the forum&lt;br /&gt;
# Update download page&lt;br /&gt;
# Update Wiki: FAQ, Version history&lt;br /&gt;
# Email OSM list&lt;br /&gt;
&lt;br /&gt;
===Post Release===&lt;br /&gt;
# Merge release branch to master&lt;br /&gt;
# Push release version tag to github&lt;br /&gt;
# Remove install checks and prepare for next release&lt;br /&gt;
## Update version.php&lt;br /&gt;
## Add com_admin .sql scripts&lt;br /&gt;
## Update joomla.xml&lt;br /&gt;
## Close security issues in security tracker&lt;br /&gt;
&lt;br /&gt;
=== Finalization phase ===&lt;br /&gt;
# Push release changes from local to remote Github repo&lt;br /&gt;
## Security fixes (if any)&lt;br /&gt;
## Version tag&lt;br /&gt;
## Version changes (SQL files, version.php, joomla.xml)&lt;br /&gt;
## Install checks&lt;br /&gt;
# Update Github repo for new version development&lt;br /&gt;
## Remove install checks&lt;br /&gt;
## Update version in version.php, joomla.xml, SQL files, SQL update files&lt;br /&gt;
&lt;br /&gt;
=== Pages to update ===&lt;br /&gt;
#Global:&lt;br /&gt;
#* [http://developer.joomla.org/development-status.html Development Status]&lt;br /&gt;
&lt;br /&gt;
=== Sites to update ===&lt;br /&gt;
#PLT Owned sites&lt;br /&gt;
#* [http://ux.joomla.org JUX Site]&lt;br /&gt;
#* [http://developer.joomla.org Developer Site]&lt;br /&gt;
#* [http://help.joomla.org Help Site (old)]&lt;br /&gt;
&lt;br /&gt;
=== Calculating Release Statistics ===&lt;br /&gt;
# Extract *all* issues from Tracker into spreadsheet. Make note of the date of the last release and the number of active issues at the time of the last release.&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be &amp;quot;after&amp;quot; &amp;quot;the day of the last release&amp;quot;. &lt;br /&gt;
#* Calculate &amp;quot;Closed&amp;quot; count by aggregating status values for Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
#* Calculate &amp;quot;Fixed in SVN&amp;quot; count by aggregating status values for Open and Information Required. (Note: this value is presented two times in the report.)&lt;br /&gt;
# Set a filter on the &amp;quot;Closed Date&amp;quot; column to be blanks:&lt;br /&gt;
#* Calculate &amp;quot;Open&amp;quot; count by aggregating status values for &amp;quot;Open&amp;quot; and &amp;quot;Information Required.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Confirmed&amp;quot; count by aggregating status values for &amp;quot;Confirmed&amp;quot; and &amp;quot;In Progress.&amp;quot;&lt;br /&gt;
#* Calculate &amp;quot;Pending&amp;quot; count by aggregating status values for &amp;quot;Pending&amp;quot; and &amp;quot;Ready to Commit.&amp;quot;&lt;br /&gt;
# Calculate the &amp;quot;New Active Issues&amp;quot; by aggregating the &amp;quot;Open&amp;quot;, &amp;quot;Confirmed&amp;quot; and &amp;quot;Pending&amp;quot; counts.&lt;br /&gt;
# Calculate the &amp;quot;net increase/decrease&amp;quot; by subtracting the &amp;quot;Last Release Active Issues&amp;quot; from the &amp;quot;New Active Issues.&amp;quot;&lt;br /&gt;
# Count the &amp;quot;number of commits&amp;quot; by reviewing the CHANGELOG.php file and counting the documented commits.&lt;br /&gt;
&lt;br /&gt;
===Alternative Method for Stats===&lt;br /&gt;
* Fixed in SVN: Create query with close date &amp;gt; date of prior release and status = Fixed in SVN.&lt;br /&gt;
* Commits: Count from CHANGELOG.php as indicated above.&lt;br /&gt;
* New Reports: Run query with all status codes and open date &amp;gt; date of prior release.&lt;br /&gt;
* Increase / decrease in active issues: See note below&lt;br /&gt;
* Closed: Run query with closed date &amp;gt; date of prior release and status code one of Closed, Duplicate Report, Known Issue, Not a bug, Not Joomla! Core, Unable to Confirm.&lt;br /&gt;
* Open at time of release: query of all issues with status = Open or Information Required&lt;br /&gt;
* Confirmed at time of release: query of all issues with status = Confirmed or In Progress&lt;br /&gt;
* Pending at time of release: query of all issues with status = Pending or Ready to Commit&lt;br /&gt;
&lt;br /&gt;
====Increase/Decrease in Active Issues====&lt;br /&gt;
* Total active issues now = Open at time of release + Confirmed at time of release + Pending at time of release&lt;br /&gt;
* This number minus the total active as of prior release is the net increase or decrease&lt;br /&gt;
&lt;br /&gt;
As a check, make sure the following formula works:&lt;br /&gt;
* Prior release total active issues + New Reports - (Closed + Fixed in SVN) should equal the Total Active Issues now.&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101873</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101873"/>
		<updated>2013-07-25T21:53:30Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Update the #__extensions Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
[[http://docs.joomla.org/J3.1:Detailed_instructions_for_updating_from_3.1.2_to_3.1.4| Special Instructions for Version 3.1.2 Upgrades]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommnended Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;3.1.4&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly.&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_3.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101872</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101872"/>
		<updated>2013-07-25T21:50:41Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
[[http://docs.joomla.org/J3.1:Detailed_instructions_for_updating_from_3.1.2_to_3.1.4| Special Instructions for Version 3.1.2 Upgrades]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommnended Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_3.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101862</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101862"/>
		<updated>2013-07-25T21:14:49Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommned Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_3.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101861</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101861"/>
		<updated>2013-07-25T21:13:50Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Trouble Shooting and Advanced Techniques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommned Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101860</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101860"/>
		<updated>2013-07-25T21:13:08Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
==Trouble Shooting and Advanced Techniques==&lt;br /&gt;
Starting with version 1.6, there are three ways to update your Joomla Website to versions 1.6, 1.7 or 2.5.&lt;br /&gt;
If you are in an older version that did not support one click updates or are on a server that does not allow such updates you should use one of these options. &lt;br /&gt;
&lt;br /&gt;
* Extension Manager: Update&lt;br /&gt;
* Extension Manager: Install&lt;br /&gt;
* Manually Copy Program Files&lt;br /&gt;
&lt;br /&gt;
Each of these is discussed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101857</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101857"/>
		<updated>2013-07-25T21:05:45Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify you on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
==Trouble Shooting and Advanced Techniques==&lt;br /&gt;
Starting with version 1.6, there are three ways to update your Joomla Website to versions 1.6, 1.7 or 2.5.&lt;br /&gt;
If you are in an older version that did not support one click updates or are on a server that does not allow such updates you should use one of these options. &lt;br /&gt;
&lt;br /&gt;
* Extension Manager: Update&lt;br /&gt;
* Extension Manager: Install&lt;br /&gt;
* Manually Copy Program Files&lt;br /&gt;
&lt;br /&gt;
Each of these is discussed below.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version earlier than 1.6.x to Joomla 1.7? ==&lt;br /&gt;
This page does not contain the instructions for migrating a Website from Joomla versions earlier than 1.6. See the [[J2.5:Migrating from Joomla 1.5 to Joomla 2.5|Migrating from Joomla 1.5 to Joomla 2.5]] page.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version 1.6.x to Joomla 1.7? ==&lt;br /&gt;
Note: To upgrade from version 1.6.x to Joomla 1.7 please follow the [[Upgrade 1.6.5 to 1.7|Upgrade 1.6.5 to 1.7 guide]] before you upgrade to Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
==Upgrade to Joomla 2.5 on shared hosts==&lt;br /&gt;
{{notice|&amp;lt;small&amp;gt;&#039;&#039;&#039;Important note as of 28 January 2012:&#039;&#039;&#039; &#039;&#039;On some shared host environments (GoDaddy.com and perhaps others), the normal Joomla update from 1.7 to 2.5 can intermittently fail with the error &amp;quot;Internal Server Error&amp;quot;. In some cases, this can happen in the middle of the file transfer process and cause errors on the site. On GoDaddy.com, this appears to happen when the server is under a heavy load and the update takes longer than 2 minutes to complete.&#039;&#039;&lt;br /&gt;
&#039;&#039;Based on recent testing, sites on these slower shared hosts can safely be updated using a free third-party extension called [http://tinyurl.com/7d9odse Admin Tools]. If you are updating a site on a shared host, please consider using Admin Tools or else use the Manually Copy Program Files method outlined below.&#039;&#039;&lt;br /&gt;
&#039;&#039;If you have experienced an error during the update, there is a process for repairing the site.&#039;&#039;&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101856</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101856"/>
		<updated>2013-07-25T21:04:15Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatesuccess3.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
==Trouble Shooting and Advanced Techniques==&lt;br /&gt;
Starting with version 1.6, there are three ways to update your Joomla Website to versions 1.6, 1.7 or 2.5.&lt;br /&gt;
If you are in an older version that did not support one click updates or are on a server that does not allow such updates you should use one of these options. &lt;br /&gt;
&lt;br /&gt;
* Extension Manager: Update&lt;br /&gt;
* Extension Manager: Install&lt;br /&gt;
* Manually Copy Program Files&lt;br /&gt;
&lt;br /&gt;
Each of these is discussed below.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version earlier than 1.6.x to Joomla 1.7? ==&lt;br /&gt;
This page does not contain the instructions for migrating a Website from Joomla versions earlier than 1.6. See the [[J2.5:Migrating from Joomla 1.5 to Joomla 2.5|Migrating from Joomla 1.5 to Joomla 2.5]] page.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version 1.6.x to Joomla 1.7? ==&lt;br /&gt;
Note: To upgrade from version 1.6.x to Joomla 1.7 please follow the [[Upgrade 1.6.5 to 1.7|Upgrade 1.6.5 to 1.7 guide]] before you upgrade to Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
==Upgrade to Joomla 2.5 on shared hosts==&lt;br /&gt;
{{notice|&amp;lt;small&amp;gt;&#039;&#039;&#039;Important note as of 28 January 2012:&#039;&#039;&#039; &#039;&#039;On some shared host environments (GoDaddy.com and perhaps others), the normal Joomla update from 1.7 to 2.5 can intermittently fail with the error &amp;quot;Internal Server Error&amp;quot;. In some cases, this can happen in the middle of the file transfer process and cause errors on the site. On GoDaddy.com, this appears to happen when the server is under a heavy load and the update takes longer than 2 minutes to complete.&#039;&#039;&lt;br /&gt;
&#039;&#039;Based on recent testing, sites on these slower shared hosts can safely be updated using a free third-party extension called [http://tinyurl.com/7d9odse Admin Tools]. If you are updating a site on a shared host, please consider using Admin Tools or else use the Manually Copy Program Files method outlined below.&#039;&#039;&lt;br /&gt;
&#039;&#039;If you have experienced an error during the update, there is a process for repairing the site.&#039;&#039;&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Updatesuccess3-en.PNG&amp;diff=101855</id>
		<title>File:Updatesuccess3-en.PNG</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Updatesuccess3-en.PNG&amp;diff=101855"/>
		<updated>2013-07-25T21:03:55Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101854</id>
		<title>J3.x:Updating from an existing version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Updating_from_an_existing_version&amp;diff=101854"/>
		<updated>2013-07-25T21:03:08Z</updated>

		<summary type="html">&lt;p&gt;Elin: /* Browse to Components, Joomla Update */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
=Overview=&lt;br /&gt;
The recommended way to update installations of Joomla! is to use the Joomla Updater component found in the Components menu of your site Administrator.&lt;br /&gt;
&lt;br /&gt;
==Back up your site==&lt;br /&gt;
&lt;br /&gt;
==Browse to Components, Joomla Update==&lt;br /&gt;
[[File:Componentsmenu.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an update is available there will be a message indicating this and a button to press.&lt;br /&gt;
&lt;br /&gt;
[[File:Updatewaitingj3.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Click on the &amp;quot;Install the Update&amp;quot; button and allow the update to run==&lt;br /&gt;
&lt;br /&gt;
[[File:Updatecompleted25.PNG]]&lt;br /&gt;
&lt;br /&gt;
== When it has completed you may need to refresh your screen or empty your browser cache to adjust for template CSS changes.==&lt;br /&gt;
&lt;br /&gt;
Note: Joomla! will notify on your administrator home page (control panel) when an update is needed, but it will not do the update for you. You need to press the button to start the update.&lt;br /&gt;
&lt;br /&gt;
==Trouble Shooting and Advanced Techniques==&lt;br /&gt;
Starting with version 1.6, there are three ways to update your Joomla Website to versions 1.6, 1.7 or 2.5.&lt;br /&gt;
If you are in an older version that did not support one click updates or are on a server that does not allow such updates you should use one of these options. &lt;br /&gt;
&lt;br /&gt;
* Extension Manager: Update&lt;br /&gt;
* Extension Manager: Install&lt;br /&gt;
* Manually Copy Program Files&lt;br /&gt;
&lt;br /&gt;
Each of these is discussed below.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version earlier than 1.6.x to Joomla 1.7? ==&lt;br /&gt;
This page does not contain the instructions for migrating a Website from Joomla versions earlier than 1.6. See the [[J2.5:Migrating from Joomla 1.5 to Joomla 2.5|Migrating from Joomla 1.5 to Joomla 2.5]] page.&lt;br /&gt;
&lt;br /&gt;
==Upgrade from version 1.6.x to Joomla 1.7? ==&lt;br /&gt;
Note: To upgrade from version 1.6.x to Joomla 1.7 please follow the [[Upgrade 1.6.5 to 1.7|Upgrade 1.6.5 to 1.7 guide]] before you upgrade to Joomla 2.5.&lt;br /&gt;
&lt;br /&gt;
==Upgrade to Joomla 2.5 on shared hosts==&lt;br /&gt;
{{notice|&amp;lt;small&amp;gt;&#039;&#039;&#039;Important note as of 28 January 2012:&#039;&#039;&#039; &#039;&#039;On some shared host environments (GoDaddy.com and perhaps others), the normal Joomla update from 1.7 to 2.5 can intermittently fail with the error &amp;quot;Internal Server Error&amp;quot;. In some cases, this can happen in the middle of the file transfer process and cause errors on the site. On GoDaddy.com, this appears to happen when the server is under a heavy load and the update takes longer than 2 minutes to complete.&#039;&#039;&lt;br /&gt;
&#039;&#039;Based on recent testing, sites on these slower shared hosts can safely be updated using a free third-party extension called [http://tinyurl.com/7d9odse Admin Tools]. If you are updating a site on a shared host, please consider using Admin Tools or else use the Manually Copy Program Files method outlined below.&#039;&#039;&lt;br /&gt;
&#039;&#039;If you have experienced an error during the update, there is a process for repairing the site.&#039;&#039;&amp;lt;/small&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps and actions:&#039;&#039;&#039;&lt;br /&gt;
It is recommended that you follow these steps when updating a production site:&lt;br /&gt;
# Back up your site before upgrading to a new version. That way, if something goes wrong during the upgrade process, you can easily restore your site to the earlier version. &lt;br /&gt;
# Review the release notes for the new version to be familiar with what was changed.&lt;br /&gt;
# Update using one of the recommended methods outlined in this document. These methods install the new program files, delete unneeded old program files, and update the database as needed for the new Joomla version.&lt;br /&gt;
# Clear your browser cache and check that the update was successful, using the steps outlined in the &#039;&#039;&#039;Checking Site&#039;&#039;&#039; tab.&lt;br /&gt;
&lt;br /&gt;
=Method A - Update Method=&lt;br /&gt;
This is the easier way, also called &#039;&#039;One click update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2a: Find and install updates==&lt;br /&gt;
# &#039;&#039;&#039;If your site is prior to 2.5.4, see Step 2b instead&#039;&#039;&#039;&lt;br /&gt;
# In the back end of your Joomla site, navigate to Components &amp;amp;rarr; Joomla Update.&lt;br /&gt;
# Click on Install the Update [[Image:Update-screenshot-20120618-01.png|frame|center]]&lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and it tells you that you are already on the current release, similar to the screen shown below. [[Image:Update-screenshot-20120618-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
==Step 2b: Find and install updates (Prior to updating 2.5.4)==&lt;br /&gt;
# In the back end of your Joomla site, navigate to Extensions &amp;amp;rarr; Extension Manager and open the Update tab.&lt;br /&gt;
# Click on the Purge Cache icon to clear out the cache.&lt;br /&gt;
# Click on the Find Updates icon in the toolbar. If there is an available update, the screen will list it, similar to the screen shown below. [[Image:Update-screenshot-20120124-01.png|frame|center]] Note that available upgrades for extensions used in the site will also show in the list.&lt;br /&gt;
# Select the update (using the checkbox) and click on the Update icon in the toolbar. &lt;br /&gt;
# &#039;&#039;&#039;IMPORTANT:&#039;&#039;&#039; This process will take a few minutes. Wait until the process completes and the success message shows, similar to the screen shown below. [[Image:Update-screenshot-20120124-02.png|frame|center]]&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method B - Install Method=&lt;br /&gt;
In some cases it may not be possible to use the Extension Manager: Update method to update your site. One reason for this might be that you are using a non-standard distribution (for example, a distribution with a different default language installed). Another reason might be that your don&#039;t have a reliable enough internet connection to support automatic installation. &lt;br /&gt;
&lt;br /&gt;
In this case, you can still do an easy installation using the Extension Manager: Install screen. Like the Update screen, this method will do the database updates automatically and will completely update your system without any further steps.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Make sure you have a current backup of your site==&lt;br /&gt;
In many cases, your host will make periodic site backups.&lt;br /&gt;
&lt;br /&gt;
==Step 2: Locate the update file==&lt;br /&gt;
Locate the required archive file (for example, .zip, .tag.gz, or tar.bz2 archive) for your version. If you are updating to an x.x.0 release (for example, from 1.7.3 to 2.5.0), this will normally be a file like Joomla_2.5.0-Stable-Update_Package.zip. If you are updating within the same release series (for example, 2.5.0 to 2.5.1), then the file will be named something like Joomla_2.5.0_to_2.5.1-Stable-Patch_Package.zip.&lt;br /&gt;
&lt;br /&gt;
At this point, you have three options:&lt;br /&gt;
# Install from URL&lt;br /&gt;
# Install from Directory&lt;br /&gt;
# Upload Package File&lt;br /&gt;
&lt;br /&gt;
Install from URL is the easiest to do. With this option, the upgrade archive is loaded directly by the server, so it works well even if your local computer has a slow or unreliable internet connection. &lt;br /&gt;
&lt;br /&gt;
Install from Directory is the safest method if the server itself has a slow internet connection. With this method, you use FTP to load the unpacked update files into a temporary folder on the server. Then you point to that directory on the server for the installation.&lt;br /&gt;
&lt;br /&gt;
Upload Package File is fairly simple, but it requires that you have a good connection between your local computer and the server. &lt;br /&gt;
&lt;br /&gt;
The screen below shows the Extension Manager: Install screen with the three options labeled. &lt;br /&gt;
[[Image:Update-screenshot-20120124-03.png|frame|center]]&lt;br /&gt;
&lt;br /&gt;
===Install from URL===&lt;br /&gt;
This option is the easiest, if the archive file is available on a website. &lt;br /&gt;
# In the Extension Manager: Install screen, enter the URL for the archive file in the Install URL field.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Install from Directory===&lt;br /&gt;
This option requires that you unpack the archive file in a directory on your server. This is the best method if you have a slow internet connection or you are experiencing timeouts during the update process.&lt;br /&gt;
# Unpack the archive file in a temporary directory on your local machine.&lt;br /&gt;
# Upload all the files in this directory (for example, using FTP) to a temporary directory that is visible to the web server. For example, you can create a sub-directory under the tmp directory in your Joomla root. For this example, let&#039;s say the directory on the server is &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# In the Extension Manager: Install screen, enter the full path of the temporary directory (on the server) from step 2 (for example, &amp;lt;code&amp;gt;/home/myuser/myjoomla/tmp/upgrade250&amp;lt;/code&amp;gt;).&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a short time (perhaps a minute or less, depending on your server). Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
===Upload Package File===&lt;br /&gt;
This option requires that you first download the archive file to your local machine. &lt;br /&gt;
# Download the file to your local computer.&lt;br /&gt;
# In the Extension Manager: Install screen, click the Browse button next to the Package File field and browse to the archive file.&lt;br /&gt;
# Press the Install button. &lt;br /&gt;
The system will work for a period of time, up to two minutes or more for a full version update. Then a message indicating a successful installation will display.&lt;br /&gt;
&lt;br /&gt;
# Congratulations! At this point, your site is updated.&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Clear your browser cache and check that your site is working correctly. See below Checking Your Site&lt;br /&gt;
&lt;br /&gt;
=Method C - Manual Upgrade=&lt;br /&gt;
This method is similar to the old method for updating Joomla versions. Here we want to replace the existing program files with the files from the update archive. The advantage of this method is that it will work on slower shared hosts. The disadvantage is that it requires more work by the system administrator.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Important: This method can also be used to repair a site where the automatic update failed due to a server timeout.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Copy the New Program Files to Your Site==&lt;br /&gt;
There are two ways you can do this.&lt;br /&gt;
# Copy the archive file to the root directory of your site and unpack the archive. The update archive will be named something like &amp;lt;code&amp;gt;Joomla_2.5.0-Stable-Update_Package.zip&amp;lt;/code&amp;gt;. Note that you need to tell the system to replace any existing files. For example, in GoDaddy.com, use the FTP File Manager to upload the update file and then use &amp;quot;Unarchive&amp;quot; to unpack it. Check the box &amp;quot;Overwrite existing files&amp;quot;.&lt;br /&gt;
# If you don&#039;t have the ability to unpack the archive on the server, create a temporary directory on your local machine and unpack the archive file there. Then FTP these files to the root directory of your site, overwriting the existing files.&lt;br /&gt;
&lt;br /&gt;
==Update the Database==&lt;br /&gt;
At this point, you should be able to log into the back end of your site with the new version installed. However, you are not done. Navigate to Extension Manager: Database. You will initially have Database problems when you check the Database, similar to the screen below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-08.png|frame|center|Database Screen Before Fix]]&lt;br /&gt;
This is expected. Click on the Fix icon to correct the problems. Now the screen should show that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
==Install New Extensions==&lt;br /&gt;
Navigate to Extension Manager: Discover and click on the Discover icon in the toolbar. If the updated version has new core extensions, new extensions will be listed, as shown below. &lt;br /&gt;
[[Image:Update-screenshot-20120124-09.png|frame|center|Discover Screen Before Install]]&lt;br /&gt;
Select all the extensions and click on the Install icon in the toolbar. The system should display a success message similar to the screen below.&lt;br /&gt;
[[Image:Update-screenshot-20120124-10.png|frame|center|Discover Screen After Install]]&lt;br /&gt;
&lt;br /&gt;
==Update the #__extensions Table==&lt;br /&gt;
At this point, your site is updated. However, there is one more thing to do. The site will think it needs to be updated because a value in the #__extensions table is wrong. To fix this:&lt;br /&gt;
* Using phpMyAdmin or a similar tool, edit the row of the #__extensions table where the id column is &#039;700&#039;. (Note that the table prefix will be different in your site. For example, if your table prefix is &amp;quot;jos_&amp;quot;, then the table will be called &amp;quot;jos_extensions&amp;quot;.&lt;br /&gt;
* In the manifest_cache column, you will see the old version in the text (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;1.7.3&amp;quot;&amp;lt;/code&amp;gt;). Change this to the new version (for example, &amp;lt;code&amp;gt;&amp;quot;version&amp;quot;:&amp;quot;2.5.0&amp;quot;&amp;lt;/code&amp;gt;). Be careful to not change anything else in this column.&lt;br /&gt;
* To check that this was successful, navigate to Extension Manager: Update and click Check for Updates. You should &#039;&#039;&#039;not&#039;&#039;&#039; see the current Joomla version in the list.&lt;br /&gt;
&lt;br /&gt;
At this point, your site should be updated correctly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Checking Site=&lt;br /&gt;
&#039;&#039;&#039;This is required for method A and B!&#039;&#039;&#039;&lt;br /&gt;
After an update, it is a good idea to clear your browser cache snd check your site to make sure the update was successful. There are two quick checks you can do from the Extension Manager.&lt;br /&gt;
==Extension Manager: Check Database==&lt;br /&gt;
{{JVer|2.5}} This feature was added in version 2.5.0. It checks that your database is up to date with your Joomla programs. &lt;br /&gt;
&lt;br /&gt;
Navigate to Extension Manager: Database. If your database is up to date, you should see a screen similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-04.png|frame|center|Database Screen With No Problems]]&lt;br /&gt;
&lt;br /&gt;
If your database is not up to date, you will see a screen listing the problems found, similar to the one below:&lt;br /&gt;
[[Image:Update-screenshot-20120124-05.png|frame|center|Database Screen With 3 Database Problems]]&lt;br /&gt;
In this case, press the Fix button in the upper right corner. Joomla will update your database to correct the issues listed and then it will re-display the screen. If the fix was successful, the display will indicate that the database is up to date.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;N.B.&#039;&#039;&#039; If any errors fail to fix then make sure all the database Tables are checked in.&lt;br /&gt;
&lt;br /&gt;
==Extension Manager: Discover==&lt;br /&gt;
In some cases, when you update to a new Joomla version, new core extensions are added. If there were problems with the database update, these extensions may not have been correctly installed. To check this, navigate to Extension Manager: Discover. Then click on the Discover icon in the toolbar. The screen should show as follows:&lt;br /&gt;
[[Image:Update-screenshot-20120124-06.png|frame|center|Discover Screen With No Extensions To Install]]&lt;br /&gt;
If so, you know that any new extensions added during the udpate were correctly installed in the database.&lt;br /&gt;
&lt;br /&gt;
If there are uninstalled extensions, they will show similar to the following screen:&lt;br /&gt;
[[Image:Update-screenshot-20120124-07.png|frame|center|Discover Screen With Two Extensions To Install]]&lt;br /&gt;
In this case, check the check boxes and click on the Install icon in the toolbar. Joomla will install the extension(s) and then display the screen showing no extensions discovered. At this point, the new extensions have been installed in the database.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
If you have any questions before, during, or after the upgrade then please ask them on the [http://forum.joomla.org/viewforum.php?f=625&amp;amp;sid=259a29d8e21242b6770f86026f6c9c3a Joomla! 1.6 Migrating and Upgrading Forum].&lt;br /&gt;
&lt;br /&gt;
If you have problems or errors during the update process, here are some tips.&lt;br /&gt;
* Clear your browser cache as there may have been changes to the css or javascript that will need to be reloaded by your web browser.&lt;br /&gt;
* If any database error messages show after the update, be sure to check the Extension Manager: Database tab followed by the Extension Manager: Discover tab. In some cases, if a database error occurs it will prevent all the database updates from running. In this case, you can run them from the Database tab and then use the Discover&amp;amp;rarr;Install method to check and install any new extensions.&lt;br /&gt;
* If you encounter any errors or problems during or after the update, be sure to check the FAQ for the version you updated to. For example, for version 2.5.0, this will be an article entitled [http://docs.joomla.org/Category:Version_2.5.0_FAQ http://docs.joomla.org/Category:Version_2.5.0_FAQ].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs/&amp;gt;&lt;br /&gt;
[[Category:Upgrading]]&lt;br /&gt;
[[Category:Joomla! 3.0]][[Category:Joomla! 3.1]]&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:J3-joomla-update-component-en.PNG&amp;diff=101852</id>
		<title>File:J3-joomla-update-component-en.PNG</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:J3-joomla-update-component-en.PNG&amp;diff=101852"/>
		<updated>2013-07-25T21:01:35Z</updated>

		<summary type="html">&lt;p&gt;Elin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elin</name></author>
	</entry>
</feed>