<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://docs.joomla.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://docs.joomla.org/api.php?action=feedcontributions&amp;user=HobbesPDX&amp;feedformat=atom</id>
		<title>Joomla! Documentation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://docs.joomla.org/api.php?action=feedcontributions&amp;user=HobbesPDX&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Special:Contributions/HobbesPDX"/>
		<updated>2013-05-23T01:50:21Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.3</generator>

	<entry>
		<id>http://docs.joomla.org/Jimport</id>
		<title>Jimport</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Jimport"/>
				<updated>2012-10-31T23:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: updated link to API docs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The joomla function jimport($path) [http://api.joomla.org/1.5/Joomla-Framework/_loader.php.html#functionjimport (See API)] is a core function used to load joomla library files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How it works (short version) ==&lt;br /&gt;
The dots (.) in $path are replaced with a directory separator (&amp;quot;/&amp;quot; or &amp;quot;\&amp;quot;) and &amp;quot;.php&amp;quot; extension is added at the end of the string. This path is included. &lt;br /&gt;
&lt;br /&gt;
== Examples of use ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jimport('joomla.application.component.controller');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
- will include the php file &amp;quot;/libraries/joomla/application/component/controller.php&amp;quot;. This file holds the class JController.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jimport('joomla.application.component.model');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
- will include the php file &amp;quot;/libraries/joomla/application/component/model.php&amp;quot;. This file holds the class JModel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
jimport('joomla.application.component.view'); // Includes JView&lt;br /&gt;
class RecipeViewIngredients extends JView&lt;br /&gt;
{&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Talk:Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1</id>
		<title>Talk:Potential backward compatibility issues in Joomla 3.0 and Joomla Platform 12.1</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Talk:Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1"/>
				<updated>2012-08-29T17:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Too Much Information?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Too Much Information? ==&lt;br /&gt;
&lt;br /&gt;
Starting a discussion to ascertain why so much info was removed in the latest changes to this page. [To me] it makes the most sense to have more (potentially too much) information, than not enough.  Developers are going to need to be aware of the changes to the API, and having this information available for search engines to index will only help the community transition to 3.0.  IMO.&lt;br /&gt;
&lt;br /&gt;
-- [[User:HobbesPDX|HobbesPDX]] ([[User talk:HobbesPDX|talk]]) 12:50, 29 August 2012 (CDT)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1</id>
		<title>Potential backward compatibility issues in Joomla 3.0 and Joomla Platform 12.1</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1"/>
				<updated>2012-08-29T17:46:12Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Undo revision 72169 -- why was so much removed?!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}This document tracks potential backward compatibility issues for Joomla 3.0 and Joomla Platform 12.1, which is included in Joomla 3.0. Listed are issues which potentially break extensions.&lt;br /&gt;
Please help make this document complete.&lt;br /&gt;
&lt;br /&gt;
The base of this comparison is Joomla 2.5/Platform 11.4.&lt;br /&gt;
&lt;br /&gt;
Backwards compatibility issues were also tracked for Joomla 2.5: [[Potential backward compatibility issues in Joomla 2.5 and Joomla Platform 11.4]]&lt;br /&gt;
&lt;br /&gt;
= Platform =&lt;br /&gt;
The platform removed a larger number of deprecated classes and methods. For most extensions written for Joomla 2.5, the required changes should be reasonably small. Note that there are still deprecated classes in the platform that will be removed in future versions -- developers should stop using them where possible.&lt;br /&gt;
&lt;br /&gt;
== Updated System Requirements ==&lt;br /&gt;
The system requirements have changed in the following points:&lt;br /&gt;
*PHP 5.3.1&lt;br /&gt;
*register_globals must be off&lt;br /&gt;
*magic_quotes_gpc must be off&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*Almost all functions, methods, members and classed marked as deprecated in Platform 11.4 have been removed. They won't be listed in this document.&lt;br /&gt;
*Appending ?no_html to an URL to get a RAW view is not supported anymore (this was an old Joomla 1.0 feature).&lt;br /&gt;
*The DS constant has been removed. If you really need it you can use DIRECTORY_SEPARATOR instead.&lt;br /&gt;
*Many more function arguments have been type hinted, including existing classes. Make sure you're always passing values of the correct type.&lt;br /&gt;
*The name of modules now have to start with &amp;quot;mod_&amp;quot;.&lt;br /&gt;
*Extensions need to set the registeredurlparams now, the fall back on the URL has been removed.&lt;br /&gt;
*Some cookies are only accessible through HTTP (not via JavaScript). For example; the session cookie.&lt;br /&gt;
*Due to upcoming changes to the MVC implementation in the platform, JModel, JView, and JController are re-used as the names of the new interfaces. For now, use JModelLegacy, JViewLegacy and JControllerLegacy instead.&lt;br /&gt;
*JFolder and JFile now require you to do your own jimport statement (You always had to do that, just before it was rather likely something else had loaded them before)&lt;br /&gt;
&lt;br /&gt;
== Changes to extension installation ==&lt;br /&gt;
*Use of the &amp;lt;install&amp;gt; base tag (from 1.5) is no longer supported; use &amp;lt;extension&amp;gt; instead.&lt;br /&gt;
*Suppport for install_script and uninstall_script, and the methods com_install and com_uninstall in these scripts, has been removed; use scriptfile instead.&lt;br /&gt;
*In language extensions, support for client=&amp;quot;both&amp;quot; has been removed; prepare each client as a separate extension and optionally bundle them as a package extension instead.&lt;br /&gt;
*File paths for plugins no longer support the old 1.5 method (i.e. plugins/system/cache.php); each plugin must now be in its own folder (i.e. plugins/system/cache/cache.php).&lt;br /&gt;
&lt;br /&gt;
== Changes to Components ==&lt;br /&gt;
*In admin components the admin.*.php and toolbar.*.php are not automatically included anymore (this was a Joomla 1.0 legacy feature).&lt;br /&gt;
&lt;br /&gt;
== Moved files ==&lt;br /&gt;
All classes listed here should now be autoloadable. Explicit requires and includes have to be modified or removed.&lt;br /&gt;
&lt;br /&gt;
=== Classes moved to the CMS ===&lt;br /&gt;
*JFormFieldHelpsite&lt;br /&gt;
*JFormFieldMedia&lt;br /&gt;
*JFormFieldMenuitem&lt;br /&gt;
*JFormFieldUser&lt;br /&gt;
*JHelp&lt;br /&gt;
*JTableContent&lt;br /&gt;
&lt;br /&gt;
=== Classes moved within the platform ===&lt;br /&gt;
*JDatabaseQuery subclasses&lt;br /&gt;
*JInput (and all subclasses)&lt;br /&gt;
*JTable (and all subclasses)&lt;br /&gt;
*JArchive (and all subclasses)&lt;br /&gt;
&lt;br /&gt;
== Renamed classes ==&lt;br /&gt;
*JFTP is now called JClientFtp&lt;br /&gt;
*JLDAP is now called JClientLdap&lt;br /&gt;
*JWebClient is now called JApplicationWebClient&lt;br /&gt;
&lt;br /&gt;
== Removed classes ==&lt;br /&gt;
*JParameter (use JForm instead)&lt;br /&gt;
*JElement and its subclasses&lt;br /&gt;
*JFormFieldEditors (use JFormFieldPlugins instead)&lt;br /&gt;
*JHtmlImage&lt;br /&gt;
*JSimpleXML&lt;br /&gt;
*JPane&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Base classes ===&lt;br /&gt;
&lt;br /&gt;
==== JFactory ====&lt;br /&gt;
*JFactory::getXMLParser() has been removed. For RSS and Atom use cases, use JFactory::getFeedParser() instead. To read XML files or strings use JFactory::getXML().&lt;br /&gt;
*JFactory::_createConfig() has been removed. Use JFactory::createConfig() instead.&lt;br /&gt;
*JFactory::_createSession() has been removed. Use JFactory::createSession() instead.&lt;br /&gt;
*JFactory::_createDbo() has been removed. Use JFactory::createDbo() instead.&lt;br /&gt;
*JFactory::_createMailer() has been removed. Use JFactory::createMailer() instead.&lt;br /&gt;
*JFactory::_createDocument() has been removed. Use JFactory::createDocument() instead.&lt;br /&gt;
&lt;br /&gt;
=== Application ===&lt;br /&gt;
&lt;br /&gt;
==== JApplicationHelper ====&lt;br /&gt;
*JApplicationHelper::getPath() has been removed. No replacement.&lt;br /&gt;
*JApplicationHelper::_checkPath() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JController ====&lt;br /&gt;
*JController::$_acoSection has been removed.&lt;br /&gt;
*JController::$_acoSectionValue has been removed.&lt;br /&gt;
*JController::authorize() has been removed. Use JController::authorise() instead.&lt;br /&gt;
*JController::setAccessControl() has been removed. Use JAccess.&lt;br /&gt;
&lt;br /&gt;
==== JControllerLegacy ====&lt;br /&gt;
* JControllerLegacy::display() needs an extra parameter: ($cachable = false, $urlparams = false).&lt;br /&gt;
&lt;br /&gt;
=== Archive ===&lt;br /&gt;
&lt;br /&gt;
==== Adapters ====&lt;br /&gt;
*JArchiveBzip2 does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveGzip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveTar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveZip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Base ===&lt;br /&gt;
&lt;br /&gt;
==== JObject ====&lt;br /&gt;
*JObject::toString() has been removed. Use JObject::__toString() instead.&lt;br /&gt;
&lt;br /&gt;
=== Client ===&lt;br /&gt;
&lt;br /&gt;
==== JClientLdap (formerly JLDAP) ====&lt;br /&gt;
*JClientLdap does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
JDatabase had been renamed JDatabaseDriver. JDatabase is still around (but deprecated) and is the base of JDatabaseDriver, this way type hints and instance of checks keep working.&lt;br /&gt;
&lt;br /&gt;
Due to lazy-connecting, a connection is only opened when running a query or explicitly calling JDatabaseDriver::connected(). Beware of that when checking JDatabaseDriver::connected().&lt;br /&gt;
&lt;br /&gt;
==== JDatabase ====&lt;br /&gt;
*JDatabase::$hasQuoted has been removed.&lt;br /&gt;
*JDatabase::$quoted has been removed.&lt;br /&gt;
*JDatabase::addQuoted() has been removed.&lt;br /&gt;
*JDatabase::hasUTF() has been removed.&lt;br /&gt;
*JDatabase::debug() has been removed. Use JDatabase::setDebug() instead.&lt;br /&gt;
*JDatabase::explain() has been removed.&lt;br /&gt;
*JDatabase::getEscaped() has been removed. Use JDatabase::escape() instead.&lt;br /&gt;
*JDatabase::getTableFields() has been removed. Use JDatabase::getTableColumns() instead.&lt;br /&gt;
*JDatabase::getTicker() has been removed. Use JDatabase::count() instead.&lt;br /&gt;
*JDatabase::isQuoted() has been removed.&lt;br /&gt;
*JDatabase::loadResultArray() has been removed. Use JDatabase::loadColumn() instead.&lt;br /&gt;
*JDatabase::nameQuote() has been removed. Use JDatabase::quoteName() instead.&lt;br /&gt;
*JDatabase::queryBatch() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Document ===&lt;br /&gt;
&lt;br /&gt;
==== JDocument ====&lt;br /&gt;
*JDocument::setMetaData() the $sync argument has been removed. It was broken beyond repair.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRenderer ====&lt;br /&gt;
*JDocumentRenderer does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
*JFeedItem does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedEnclosure does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentOpenSearch ====&lt;br /&gt;
*JOpenSearchUrl does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JOpenSearchImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentXml ====&lt;br /&gt;
*JDocumentXml::$_name has been renamed to JDocumentXml::$name.&lt;br /&gt;
&lt;br /&gt;
=== Environment ===&lt;br /&gt;
&lt;br /&gt;
==== JBrowser ====&lt;br /&gt;
*JBrowser does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JBrowser::setQuirk() has been removed.&lt;br /&gt;
*JBrowser::hasQuirk() has been removed.&lt;br /&gt;
*JBrowser::getQuirk() has been removed.&lt;br /&gt;
*JBrowser::setFeature() has been removed.&lt;br /&gt;
*JBrowser::hasFeature() has been removed.&lt;br /&gt;
*JBrowser::getFeature() has been removed.&lt;br /&gt;
*JBrowser::$_majorVersion has been renamed to JBrowser::$majorVersion.&lt;br /&gt;
*JBrowser::$_minorVersion has been renamed to JBrowser::$minorVersion.&lt;br /&gt;
*JBrowser::$_browser has been renamed to JBrowser::$browser.&lt;br /&gt;
*JBrowser::$_agent has been renamed to JBrowser::$agent.&lt;br /&gt;
*JBrowser::$_lowerAgent has been renamed to JBrowser::$lowerAgent.&lt;br /&gt;
*JBrowser::$_accept has been renamed to JBrowser::$accept.&lt;br /&gt;
*JBrowser::$_accept_parsed has been renamed to JBrowser::$acceptParsed.&lt;br /&gt;
*JBrowser::$_platform has been renamed to JBrowser::$platform.&lt;br /&gt;
*JBrowser::$_robots has been renamed to JBrowser::$robots.&lt;br /&gt;
*JBrowser::$_mobile has been renamed to JBrowser::$mobile.&lt;br /&gt;
*JBrowser::$_images has been renamed to JBrowser::$images.&lt;br /&gt;
&lt;br /&gt;
==== JRequest ====&lt;br /&gt;
*JRequest::clean() has been removed.&lt;br /&gt;
*JRequest::_cleanVar() is now protected.&lt;br /&gt;
&lt;br /&gt;
==== JURI ====&lt;br /&gt;
*JURI does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JUri::$_uri has been renamed to JUri::$uri.&lt;br /&gt;
*JUri::$_scheme has been renamed to JUri::$scheme.&lt;br /&gt;
*JUri::$_host has been renamed to JUri::$host.&lt;br /&gt;
*JUri::$_port has been renamed to JUri::$port.&lt;br /&gt;
*JUri::$_user has been renamed to JUri::$user.&lt;br /&gt;
*JUri::$_pass has been renamed to JUri::$pass.&lt;br /&gt;
*JUri::$_path has been renamed to JUri::$path.&lt;br /&gt;
*JUri::$_query has been renamed to JUri::$query.&lt;br /&gt;
*JUri::$_fragment has been renamed to JUri::$fragment.&lt;br /&gt;
*JUri::$_vars has been renamed to JUri::$vars.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== JError ====&lt;br /&gt;
*JError::isError() has been removed. Use instance of Exception instead.&lt;br /&gt;
&lt;br /&gt;
==== JProfiler ====&lt;br /&gt;
*JProfiler does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JProfiler::$_start has been renamed to JProfiler::$start.&lt;br /&gt;
*JProfiler::$_prefix has been renamed to JProfiler::$prefix.&lt;br /&gt;
*JProfiler::$_buffer has been renamed to JProfiler::$buffer.&lt;br /&gt;
*JProfiler::$_previous_time has been renamed to JProfiler::$previousTime.&lt;br /&gt;
*JProfiler::$_previous_mem has been renamed to JProfiler::$previousMem.&lt;br /&gt;
*JProfiler::$_iswin has been renamed to JProfiler::$isWin.&lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
&lt;br /&gt;
==== JStream ====&lt;br /&gt;
*JStream::$_fh has been renamed to JStream::$fh.&lt;br /&gt;
*JStream::$_filesize has been renamed to JStream::$filesize.&lt;br /&gt;
*JStream::$_context has been renamed to JStream::$context.&lt;br /&gt;
*JStream::$_contextOptions has been renamed to JStream::$contextOptions.&lt;br /&gt;
*JStream::$_openmode has been renamed to JStream::$openmode.&lt;br /&gt;
&lt;br /&gt;
==== JStreamString ====&lt;br /&gt;
*JStream::$_currentstring has been renamed to JStream::$currentString.&lt;br /&gt;
*JStream::$_path has been renamed to JStream::$path.&lt;br /&gt;
*JStream::$_mode has been renamed to JStream::$mode.&lt;br /&gt;
*JStream::$_options has been renamed to JStream::$options.&lt;br /&gt;
*JStream::$_opened_path has been renamed to JStream::$openedPath.&lt;br /&gt;
*JStream::$_pos has been renamed to JStream::$pos.&lt;br /&gt;
*JStream::$_len has been renamed to JStream::$len.&lt;br /&gt;
*JStream::$_stat has been renamed to JStream::$stat.&lt;br /&gt;
&lt;br /&gt;
=== Filter ===&lt;br /&gt;
&lt;br /&gt;
==== JFilterInput ====&lt;br /&gt;
*JFilterInput does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
==== JHtml ====&lt;br /&gt;
*JHtml::_includeRelativeFiles() has been removed. Use JHtml::includeRelativeFiles() instead.&lt;br /&gt;
*JHtml::core() has been removed. Use JHtmlBehavior::framework() instead.&lt;br /&gt;
*JHtml::script() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
*JHtml::stylesheet() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlAccess ====&lt;br /&gt;
*JHtmlAccess::assetgroups() the argument $config has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlBehavior ====&lt;br /&gt;
*JHtmlBehavior::mootools() has been removed. Use JHtmlBehavior::framework() instead.&lt;br /&gt;
*JHtmlBehavior::noframes() the argument $location has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlList ====&lt;br /&gt;
*JHtmlList::ordering() the argument $chop has been removed. It was previously unused.&lt;br /&gt;
*JHtmlList::users(), the argument $reg has been removed.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlSelect ====&lt;br /&gt;
*JHtmlSelect::$_optionDefaults has been renamed to JHtmlSelect::$optionDefaults.&lt;br /&gt;
&lt;br /&gt;
==== JToolBar ====&lt;br /&gt;
*JToolBar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JButton ====&lt;br /&gt;
*JButton does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JPagination ====&lt;br /&gt;
*JPagination::$_viewall has been renamed to JPagination::$viewall.&lt;br /&gt;
*JPagination::$_additionalUrlParams has been renamed to JPagination::$additionalUrlParams.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
==== JInstaller ====&lt;br /&gt;
*JInstaller::getOverwrite() has been removed. Use JInstaller::isOverwrite() instead.&lt;br /&gt;
*JInstaller::getUpgrade() has been removed. Use JInstaller::isUpgrade() instead.&lt;br /&gt;
*JInstaller::$_paths has been renamed to JInstaller::$paths.&lt;br /&gt;
*JInstaller::$_upgrade has been renamed to JInstaller::$upgrade.&lt;br /&gt;
*JInstaller::$_overwrite has been renamed to JInstaller::$overwrite.&lt;br /&gt;
*JInstaller::$_stepStack has been renamed to JInstaller::$stepStack.&lt;br /&gt;
&lt;br /&gt;
==== JInstallerLanguage ====&lt;br /&gt;
*JInstallerLanguage::$_core as been renamed to JInstallerLanguage::$core.&lt;br /&gt;
&lt;br /&gt;
=== Language ===&lt;br /&gt;
&lt;br /&gt;
==== JLanguage ====&lt;br /&gt;
*JLanguage::getPluralSufficesCallback() has been removed. Use JLanguage::getPluralSuffixesCallback() instead.&lt;br /&gt;
*JLanguage::_parseLanguageFiles() has been removed. Use JLanguage::parseLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFiles() has been removed. Use JLanguage::parseXMLLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFile() has been removed. Use JLanguage::parseXMLLanguageFile() instead.&lt;br /&gt;
*JLanguage::loadLanguage() the argument $overwrite has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
&lt;br /&gt;
==== JRegistry ====&lt;br /&gt;
*JRegistry::loadXML() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadINI() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadJSON() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::makeNameSpace() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getNameSpaces() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getValue() has been removed. Use JRegistry::get() instead.&lt;br /&gt;
*JRegistry::setValue() has been removed. Use JRegistry::set() instead.&lt;br /&gt;
*JRegistry::loadSetupFile() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatINI ====&lt;br /&gt;
*JRegistryFormatINI::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatJSON ====&lt;br /&gt;
*JRegistryFormatJSON::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
=== Session ===&lt;br /&gt;
&lt;br /&gt;
==== JSessionStorageDatabase ====&lt;br /&gt;
*JSessionStorageDatabase::$_data has been renamed to JSessionStorageDatabase::$data.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
==== JTable ====&lt;br /&gt;
*JTable::canDelete() has been removed.&lt;br /&gt;
*JTable::toXML() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Updater ===&lt;br /&gt;
&lt;br /&gt;
==== JUpdate ====&lt;br /&gt;
*JUpdate::$_xml_parser has been renamed to JUpdate::$xmlParser.&lt;br /&gt;
*JUpdate::$_stack has been renamed to JUpdate::$stack.&lt;br /&gt;
*JUpdate::$_state_store has been renamed to JUpdate::$stateStore.&lt;br /&gt;
*JUpdate::$_current_update has been renamed to JUpdate::$currentUpdate.&lt;br /&gt;
&lt;br /&gt;
==== JUpdater ====&lt;br /&gt;
*JUpdater::arrayUnique() has been removed. Use JArrayHelper::arrayUnique() instead.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
==== JAuthentication ====&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_SUCCESS has been removed. Use JAuthentication::STATUS_SUCCESS instead.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_CANCEL has been removed. No replacement.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_FAILURE has been removed. Use JAuthentication::STATUS_FAILURE instead.&lt;br /&gt;
*JAuthentication::$_observers has been renamed to JAuthentication::$observers.&lt;br /&gt;
*JAuthentication::$_state has been renamed to JAuthentication::$state.&lt;br /&gt;
*JAuthentication::$_methods has been renamed to JAuthentication::$methods.&lt;br /&gt;
&lt;br /&gt;
==== JUser ====&lt;br /&gt;
*JUser::getParameters() has been removed.&lt;br /&gt;
*Juser::authorisedLevels() has been removed. Use JUser::getAuthorisedViewLevels() instead.&lt;br /&gt;
*Juser::authorize() has been removed. Use JUser::authorise() instead.&lt;br /&gt;
*JUser::$usertype has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
&lt;br /&gt;
==== JBuffer ====&lt;br /&gt;
*JBuffer::$_buffers has been renamed to JBuffer::$buffers.&lt;br /&gt;
&lt;br /&gt;
==== JDate ====&lt;br /&gt;
*JDate::toMysql() has been removed. Use JDate::toSql() instead.&lt;br /&gt;
*JDate::toFormat() has been removed. Use JDate::format() instead.&lt;br /&gt;
*JDate::setOffset() has been removed.&lt;br /&gt;
*JDate::$offsets has been removed.&lt;br /&gt;
*JDate::__construct() doesn't accept an numeric value for $tz anymore.&lt;br /&gt;
*JDate::$_tz has been renamed to JDate::$tz.&lt;br /&gt;
&lt;br /&gt;
==== JUtility ====&lt;br /&gt;
*JUtility::sendMail() has been removed. Use JMail::sendMail() instead.&lt;br /&gt;
*JUtility::sendAdminMail() has been removed. Use JMail::sendAdminMail() instead.&lt;br /&gt;
*JUtility::getHash() has been removed. Use JApplication::getHash() instead.&lt;br /&gt;
*JUtility::getToken() has been removed. Use JSession::getFormToken() instead.&lt;br /&gt;
*JUtility::isWinOS() has been removed. Use JApplication::isWinOS() instead.&lt;br /&gt;
*JUtility::dump() has been removed. No replacement.&lt;br /&gt;
*JUtility::array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
*JUtility::array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JXMLElement ====&lt;br /&gt;
*JXMLElement::data() has been removed.&lt;br /&gt;
*JXMLElement::getAttribute() has been removed. Use SimpleXMLElement::attributes() instead.&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
*Compatibility with MooTools 1.2 has been removed.&lt;br /&gt;
*Forms that have name=&amp;quot;adminForm&amp;quot; now also require id=&amp;quot;adminForm&amp;quot;.&lt;br /&gt;
*checkAll() has been removed. Use Joomla.checkAll() instead.&lt;br /&gt;
*isChecked() has been removed. Use Joomla.isChecked() instead.&lt;br /&gt;
*popupWindow() has been removed. Use Joomla.popupWindow() instead.&lt;br /&gt;
*tableOrdering() has been removed. Use Joomla.tableOrdering() instead.&lt;br /&gt;
&lt;br /&gt;
= CMS =&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*JUtility is not always loaded. If you need it you have to add jimport('joomla.utilities.utility'); to your code.&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Component Classes ===&lt;br /&gt;
*MenusModelItem::getItem() no longer returns a JObject but a stdClass.&lt;br /&gt;
&lt;br /&gt;
=== Help ===&lt;br /&gt;
&lt;br /&gt;
==== JHelp ====&lt;br /&gt;
*JHelp::createSiteList() the argument $selected has been removed. It was unused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Framework]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1</id>
		<title>Potential backward compatibility issues in Joomla 3.0 and Joomla Platform 12.1</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1"/>
				<updated>2012-08-17T07:24:08Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: grammar, spelling and punctuation details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}This document tracks potential backward compatibility issues for Joomla 3.0 and Joomla Platform 12.1, which is included in Joomla 3.0. Listed are issues which potentially break extensions.&lt;br /&gt;
Please help make this document complete.&lt;br /&gt;
&lt;br /&gt;
The base of this comparison is Joomla 2.5/Platform 11.4.&lt;br /&gt;
&lt;br /&gt;
Backwards compatibility issues were also tracked for Joomla 2.5: [[Potential backward compatibility issues in Joomla 2.5 and Joomla Platform 11.4]]&lt;br /&gt;
&lt;br /&gt;
= Platform =&lt;br /&gt;
The platform removed a larger number of deprecated classes and methods. For most extensions written for Joomla 2.5, the required changes should be reasonably small. Note that there are still deprecated classes in the platform that will be removed in future versions -- developers should stop using them where possible.&lt;br /&gt;
&lt;br /&gt;
== Updated System Requirements ==&lt;br /&gt;
The system requirements have changed in the following points:&lt;br /&gt;
*PHP 5.3.1&lt;br /&gt;
*register_globals must be off&lt;br /&gt;
*magic_quotes_gpc must be off&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*Almost all functions, methods, members and classed marked as deprecated in Platform 11.4 have been removed. They won't be listed in this document.&lt;br /&gt;
*Appending ?no_html to an URL to get a RAW view is not supported anymore (this was an old Joomla 1.0 feature).&lt;br /&gt;
*The DS constant has been removed. If you really need it you can use DIRECTORY_SEPARATOR instead.&lt;br /&gt;
*Many more function arguments have been type hinted, including existing classes. Make sure you're always passing values of the correct type.&lt;br /&gt;
*The name of modules now have to start with &amp;quot;mod_&amp;quot;.&lt;br /&gt;
*Extensions need to set the registeredurlparams now, the fall back on the URL has been removed.&lt;br /&gt;
*Some cookies are only accessible through HTTP (not via JavaScript). For example; the session cookie.&lt;br /&gt;
*Due to upcoming changes to the MVC implementation in the platform, JModel, JView, and JController are re-used as the names of the new interfaces. For now, use JModelLegacy, JViewLegacy and JControllerLegacy instead. &lt;br /&gt;
&lt;br /&gt;
== Changes to extension installation ==&lt;br /&gt;
*Use of the &amp;lt;install&amp;gt; base tag (from 1.5) is no longer supported; use &amp;lt;extension&amp;gt; instead.&lt;br /&gt;
*Suppport for install_script and uninstall_script, and the methods com_install and com_uninstall in these scripts, has been removed; use scriptfile instead.&lt;br /&gt;
*In language extensions, support for client=&amp;quot;both&amp;quot; has been removed; prepare each client as a separate extension and optionally bundle them as a package extension instead.&lt;br /&gt;
*File paths for plugins no longer support the old 1.5 method (i.e. plugins/system/cache.php); each plugin must now be in its own folder (i.e. plugins/system/cache/cache.php).&lt;br /&gt;
&lt;br /&gt;
== Changes to Components ==&lt;br /&gt;
*In admin components the admin.*.php and toolbar.*.php are not automatically included anymore (this was a Joomla 1.0 legacy feature).&lt;br /&gt;
&lt;br /&gt;
== Moved files ==&lt;br /&gt;
All classes listed here should now be autoloadable. Explicit requires and includes have to be modified or removed.&lt;br /&gt;
&lt;br /&gt;
=== Classes moved to the CMS ===&lt;br /&gt;
*JFormFieldHelpsite&lt;br /&gt;
*JFormFieldMedia&lt;br /&gt;
*JFormFieldMenuitem&lt;br /&gt;
*JFormFieldUser&lt;br /&gt;
*JHelp&lt;br /&gt;
*JTableContent&lt;br /&gt;
&lt;br /&gt;
=== Classes moved within the platform ===&lt;br /&gt;
*JDatabaseQuery subclasses&lt;br /&gt;
*JInput (and all subclasses)&lt;br /&gt;
*JTable (and all subclasses)&lt;br /&gt;
*JArchive (and all subclasses)&lt;br /&gt;
&lt;br /&gt;
== Renamed classes ==&lt;br /&gt;
*JFTP is now called JClientFtp&lt;br /&gt;
*JLDAP is now called JClientLdap&lt;br /&gt;
*JWebClient is now called JApplicationWebClient&lt;br /&gt;
&lt;br /&gt;
== Removed classes ==&lt;br /&gt;
*JParameter (use JForm instead)&lt;br /&gt;
*JElement and its subclasses&lt;br /&gt;
*JFormFieldEditors (use JFormFieldPlugins instead)&lt;br /&gt;
*JHtmlImage&lt;br /&gt;
*JSimpleXML&lt;br /&gt;
*JPane&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Base classes ===&lt;br /&gt;
&lt;br /&gt;
==== JFactory ====&lt;br /&gt;
*JFactory::getXMLParser() has been removed. For RSS and Atom use cases, use JFactory::getFeedParser() instead. To read XML files or strings use JFactory::getXML().&lt;br /&gt;
*JFactory::_createConfig() has been removed. Use JFactory::createConfig() instead.&lt;br /&gt;
*JFactory::_createSession() has been removed. Use JFactory::createSession() instead.&lt;br /&gt;
*JFactory::_createDbo() has been removed. Use JFactory::createDbo() instead.&lt;br /&gt;
*JFactory::_createMailer() has been removed. Use JFactory::createMailer() instead.&lt;br /&gt;
*JFactory::_createDocument() has been removed. Use JFactory::createDocument() instead.&lt;br /&gt;
&lt;br /&gt;
=== Application ===&lt;br /&gt;
&lt;br /&gt;
==== JApplicationHelper ====&lt;br /&gt;
*JApplicationHelper::getPath() has been removed. No replacement.&lt;br /&gt;
*JApplicationHelper::_checkPath() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JController ====&lt;br /&gt;
*JController::$_acoSection has been removed.&lt;br /&gt;
*JController::$_acoSectionValue has been removed.&lt;br /&gt;
*JController::authorize() has been removed. Use JController::authorise() instead.&lt;br /&gt;
*JController::setAccessControl() has been removed. Use JAccess.&lt;br /&gt;
&lt;br /&gt;
==== JControllerLegacy ====&lt;br /&gt;
* JControllerLegacy::display() needs an extra parameter: ($cachable = false, $urlparams = false).&lt;br /&gt;
&lt;br /&gt;
=== Archive ===&lt;br /&gt;
&lt;br /&gt;
==== Adapters ====&lt;br /&gt;
*JArchiveBzip2 does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveGzip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveTar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveZip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Base ===&lt;br /&gt;
&lt;br /&gt;
==== JObject ====&lt;br /&gt;
*JObject::toString() has been removed. Use JObject::__toString() instead.&lt;br /&gt;
&lt;br /&gt;
=== Client ===&lt;br /&gt;
&lt;br /&gt;
==== JClientLdap (formerly JLDAP) ====&lt;br /&gt;
*JClientLdap does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
JDatabase had been renamed JDatabaseDriver. JDatabase is still around (but deprecated) and is the base of JDatabaseDriver, this way type hints and instance of checks keep working.&lt;br /&gt;
&lt;br /&gt;
Due to lazy-connecting, a connection is only opened when running a query or explicitly calling JDatabaseDriver::connected(). Beware of that when checking JDatabaseDriver::connected().&lt;br /&gt;
&lt;br /&gt;
==== JDatabase ====&lt;br /&gt;
*JDatabase::$hasQuoted has been removed.&lt;br /&gt;
*JDatabase::$quoted has been removed.&lt;br /&gt;
*JDatabase::addQuoted() has been removed.&lt;br /&gt;
*JDatabase::hasUTF() has been removed.&lt;br /&gt;
*JDatabase::debug() has been removed. Use JDatabase::setDebug() instead.&lt;br /&gt;
*JDatabase::explain() has been removed.&lt;br /&gt;
*JDatabase::getEscaped() has been removed. Use JDatabase::escape() instead.&lt;br /&gt;
*JDatabase::getTableFields() has been removed. Use JDatabase::getTableColumns() instead.&lt;br /&gt;
*JDatabase::getTicker() has been removed. Use JDatabase::count() instead.&lt;br /&gt;
*JDatabase::isQuoted() has been removed.&lt;br /&gt;
*JDatabase::loadResultArray() has been removed. Use JDatabase::loadColumn() instead.&lt;br /&gt;
*JDatabase::nameQuote() has been removed. Use JDatabase::quoteName() instead.&lt;br /&gt;
*JDatabase::queryBatch() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Document ===&lt;br /&gt;
&lt;br /&gt;
==== JDocument ====&lt;br /&gt;
*JDocument::setMetaData() the $sync argument has been removed. It was broken beyond repair.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRenderer ====&lt;br /&gt;
*JDocumentRenderer does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
*JFeedItem does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedEnclosure does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentOpenSearch ====&lt;br /&gt;
*JOpenSearchUrl does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JOpenSearchImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentXml ====&lt;br /&gt;
*JDocumentXml::$_name has been renamed to JDocumentXml::$name.&lt;br /&gt;
&lt;br /&gt;
=== Environment ===&lt;br /&gt;
&lt;br /&gt;
==== JBrowser ====&lt;br /&gt;
*JBrowser does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JBrowser::setQuirk() has been removed.&lt;br /&gt;
*JBrowser::hasQuirk() has been removed.&lt;br /&gt;
*JBrowser::getQuirk() has been removed.&lt;br /&gt;
*JBrowser::setFeature() has been removed.&lt;br /&gt;
*JBrowser::hasFeature() has been removed.&lt;br /&gt;
*JBrowser::getFeature() has been removed.&lt;br /&gt;
*JBrowser::$_majorVersion has been renamed to JBrowser::$majorVersion.&lt;br /&gt;
*JBrowser::$_minorVersion has been renamed to JBrowser::$minorVersion.&lt;br /&gt;
*JBrowser::$_browser has been renamed to JBrowser::$browser.&lt;br /&gt;
*JBrowser::$_agent has been renamed to JBrowser::$agent.&lt;br /&gt;
*JBrowser::$_lowerAgent has been renamed to JBrowser::$lowerAgent.&lt;br /&gt;
*JBrowser::$_accept has been renamed to JBrowser::$accept.&lt;br /&gt;
*JBrowser::$_accept_parsed has been renamed to JBrowser::$acceptParsed.&lt;br /&gt;
*JBrowser::$_platform has been renamed to JBrowser::$platform.&lt;br /&gt;
*JBrowser::$_robots has been renamed to JBrowser::$robots.&lt;br /&gt;
*JBrowser::$_mobile has been renamed to JBrowser::$mobile.&lt;br /&gt;
*JBrowser::$_images has been renamed to JBrowser::$images.&lt;br /&gt;
&lt;br /&gt;
==== JRequest ====&lt;br /&gt;
*JRequest::clean() has been removed.&lt;br /&gt;
*JRequest::_cleanVar() is now protected.&lt;br /&gt;
&lt;br /&gt;
==== JURI ====&lt;br /&gt;
*JURI does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JUri::$_uri has been renamed to JUri::$uri.&lt;br /&gt;
*JUri::$_scheme has been renamed to JUri::$scheme.&lt;br /&gt;
*JUri::$_host has been renamed to JUri::$host.&lt;br /&gt;
*JUri::$_port has been renamed to JUri::$port.&lt;br /&gt;
*JUri::$_user has been renamed to JUri::$user.&lt;br /&gt;
*JUri::$_pass has been renamed to JUri::$pass.&lt;br /&gt;
*JUri::$_path has been renamed to JUri::$path.&lt;br /&gt;
*JUri::$_query has been renamed to JUri::$query.&lt;br /&gt;
*JUri::$_fragment has been renamed to JUri::$fragment.&lt;br /&gt;
*JUri::$_vars has been renamed to JUri::$vars.&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== JError ====&lt;br /&gt;
*JError::isError() has been removed. Use instance of Exception instead.&lt;br /&gt;
&lt;br /&gt;
==== JProfiler ====&lt;br /&gt;
*JProfiler does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JProfiler::$_start has been renamed to JProfiler::$start.&lt;br /&gt;
*JProfiler::$_prefix has been renamed to JProfiler::$prefix.&lt;br /&gt;
*JProfiler::$_buffer has been renamed to JProfiler::$buffer.&lt;br /&gt;
*JProfiler::$_previous_time has been renamed to JProfiler::$previousTime.&lt;br /&gt;
*JProfiler::$_previous_mem has been renamed to JProfiler::$previousMem.&lt;br /&gt;
*JProfiler::$_iswin has been renamed to JProfiler::$isWin.&lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
&lt;br /&gt;
==== JStream ====&lt;br /&gt;
*JStream::$_fh has been renamed to JStream::$fh.&lt;br /&gt;
*JStream::$_filesize has been renamed to JStream::$filesize.&lt;br /&gt;
*JStream::$_context has been renamed to JStream::$context.&lt;br /&gt;
*JStream::$_contextOptions has been renamed to JStream::$contextOptions.&lt;br /&gt;
*JStream::$_openmode has been renamed to JStream::$openmode.&lt;br /&gt;
&lt;br /&gt;
==== JStreamString ====&lt;br /&gt;
*JStream::$_currentstring has been renamed to JStream::$currentString.&lt;br /&gt;
*JStream::$_path has been renamed to JStream::$path.&lt;br /&gt;
*JStream::$_mode has been renamed to JStream::$mode.&lt;br /&gt;
*JStream::$_options has been renamed to JStream::$options.&lt;br /&gt;
*JStream::$_opened_path has been renamed to JStream::$openedPath.&lt;br /&gt;
*JStream::$_pos has been renamed to JStream::$pos.&lt;br /&gt;
*JStream::$_len has been renamed to JStream::$len.&lt;br /&gt;
*JStream::$_stat has been renamed to JStream::$stat.&lt;br /&gt;
&lt;br /&gt;
=== Filter ===&lt;br /&gt;
&lt;br /&gt;
==== JFilterInput ====&lt;br /&gt;
*JFilterInput does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
==== JHtml ====&lt;br /&gt;
*JHtml::_includeRelativeFiles() has been removed. Use JHtml::includeRelativeFiles() instead.&lt;br /&gt;
*JHtml::core() has been removed. Use JHtmlBehavior::framework() instead.&lt;br /&gt;
*JHtml::script() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
*JHtml::stylesheet() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlAccess ====&lt;br /&gt;
*JHtmlAccess::assetgroups() the argument $config has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlBehavior ====&lt;br /&gt;
*JHtmlBehavior::mootools() has been removed. Use JHtmlBehavior::framework() instead.&lt;br /&gt;
*JHtmlBehavior::noframes() the argument $location has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlList ====&lt;br /&gt;
*JHtmlList::ordering() the argument $chop has been removed. It was previously unused.&lt;br /&gt;
*JHtmlList::users(), the argument $reg has been removed.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlSelect ====&lt;br /&gt;
*JHtmlSelect::$_optionDefaults has been renamed to JHtmlSelect::$optionDefaults.&lt;br /&gt;
&lt;br /&gt;
==== JToolBar ====&lt;br /&gt;
*JToolBar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JButton ====&lt;br /&gt;
*JButton does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JPagination ====&lt;br /&gt;
*JPagination::$_viewall has been renamed to JPagination::$viewall.&lt;br /&gt;
*JPagination::$_additionalUrlParams has been renamed to JPagination::$additionalUrlParams.&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
==== JInstaller ====&lt;br /&gt;
*JInstaller::getOverwrite() has been removed. Use JInstaller::isOverwrite() instead.&lt;br /&gt;
*JInstaller::getUpgrade() has been removed. Use JInstaller::isUpgrade() instead.&lt;br /&gt;
*JInstaller::$_paths has been renamed to JInstaller::$paths.&lt;br /&gt;
*JInstaller::$_upgrade has been renamed to JInstaller::$upgrade.&lt;br /&gt;
*JInstaller::$_overwrite has been renamed to JInstaller::$overwrite.&lt;br /&gt;
*JInstaller::$_stepStack has been renamed to JInstaller::$stepStack.&lt;br /&gt;
&lt;br /&gt;
==== JInstallerLanguage ====&lt;br /&gt;
*JInstallerLanguage::$_core as been renamed to JInstallerLanguage::$core.&lt;br /&gt;
&lt;br /&gt;
=== Language ===&lt;br /&gt;
&lt;br /&gt;
==== JLanguage ====&lt;br /&gt;
*JLanguage::getPluralSufficesCallback() has been removed. Use JLanguage::getPluralSuffixesCallback() instead.&lt;br /&gt;
*JLanguage::_parseLanguageFiles() has been removed. Use JLanguage::parseLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFiles() has been removed. Use JLanguage::parseXMLLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFile() has been removed. Use JLanguage::parseXMLLanguageFile() instead.&lt;br /&gt;
*JLanguage::loadLanguage() the argument $overwrite has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
&lt;br /&gt;
==== JRegistry ====&lt;br /&gt;
*JRegistry::loadXML() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadINI() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadJSON() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::makeNameSpace() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getNameSpaces() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getValue() has been removed. Use JRegistry::get() instead.&lt;br /&gt;
*JRegistry::setValue() has been removed. Use JRegistry::set() instead.&lt;br /&gt;
*JRegistry::loadSetupFile() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatINI ====&lt;br /&gt;
*JRegistryFormatINI::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatJSON ====&lt;br /&gt;
*JRegistryFormatJSON::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
=== Session ===&lt;br /&gt;
&lt;br /&gt;
==== JSessionStorageDatabase ====&lt;br /&gt;
*JSessionStorageDatabase::$_data has been renamed to JSessionStorageDatabase::$data.&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
==== JTable ====&lt;br /&gt;
*JTable::canDelete() has been removed.&lt;br /&gt;
*JTable::toXML() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Updater ===&lt;br /&gt;
&lt;br /&gt;
==== JUpdate ====&lt;br /&gt;
*JUpdate::$_xml_parser has been renamed to JUpdate::$xmlParser.&lt;br /&gt;
*JUpdate::$_stack has been renamed to JUpdate::$stack.&lt;br /&gt;
*JUpdate::$_state_store has been renamed to JUpdate::$stateStore.&lt;br /&gt;
*JUpdate::$_current_update has been renamed to JUpdate::$currentUpdate.&lt;br /&gt;
&lt;br /&gt;
==== JUpdater ====&lt;br /&gt;
*JUpdater::arrayUnique() has been removed. Use JArrayHelper::arrayUnique() instead.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
==== JAuthentication ====&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_SUCCESS has been removed. Use JAuthentication::STATUS_SUCCESS instead.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_CANCEL has been removed. No replacement.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_FAILURE has been removed. Use JAuthentication::STATUS_FAILURE instead.&lt;br /&gt;
*JAuthentication::$_observers has been renamed to JAuthentication::$observers.&lt;br /&gt;
*JAuthentication::$_state has been renamed to JAuthentication::$state.&lt;br /&gt;
*JAuthentication::$_methods has been renamed to JAuthentication::$methods.&lt;br /&gt;
&lt;br /&gt;
==== JUser ====&lt;br /&gt;
*JUser::getParameters() has been removed.&lt;br /&gt;
*Juser::authorisedLevels() has been removed. Use JUser::getAuthorisedViewLevels() instead.&lt;br /&gt;
*Juser::authorize() has been removed. Use JUser::authorise() instead.&lt;br /&gt;
*JUser::$usertype has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
&lt;br /&gt;
==== JBuffer ====&lt;br /&gt;
*JBuffer::$_buffers has been renamed to JBuffer::$buffers.&lt;br /&gt;
&lt;br /&gt;
==== JDate ====&lt;br /&gt;
*JDate::toMysql() has been removed. Use JDate::toSql() instead.&lt;br /&gt;
*JDate::toFormat() has been removed. Use JDate::format() instead.&lt;br /&gt;
*JDate::setOffset() has been removed.&lt;br /&gt;
*JDate::$offsets has been removed.&lt;br /&gt;
*JDate::__construct() doesn't accept an numeric value for $tz anymore.&lt;br /&gt;
*JDate::$_tz has been renamed to JDate::$tz.&lt;br /&gt;
&lt;br /&gt;
==== JUtility ====&lt;br /&gt;
*JUtility::sendMail() has been removed. Use JMail::sendMail() instead.&lt;br /&gt;
*JUtility::sendAdminMail() has been removed. Use JMail::sendAdminMail() instead.&lt;br /&gt;
*JUtility::getHash() has been removed. Use JApplication::getHash() instead.&lt;br /&gt;
*JUtility::getToken() has been removed. Use JSession::getFormToken() instead.&lt;br /&gt;
*JUtility::isWinOS() has been removed. Use JApplication::isWinOS() instead.&lt;br /&gt;
*JUtility::dump() has been removed. No replacement.&lt;br /&gt;
*JUtility::array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
*JUtility::array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JXMLElement ====&lt;br /&gt;
*JXMLElement::data() has been removed.&lt;br /&gt;
*JXMLElement::getAttribute() has been removed. Use SimpleXMLElement::attributes() instead.&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
*Compatibility with MooTools 1.2 has been removed.&lt;br /&gt;
*Forms that have name=&amp;quot;adminForm&amp;quot; now also require id=&amp;quot;adminForm&amp;quot;.&lt;br /&gt;
*checkAll() has been removed. Use Joomla.checkAll() instead.&lt;br /&gt;
*isChecked() has been removed. Use Joomla.isChecked() instead.&lt;br /&gt;
*popupWindow() has been removed. Use Joomla.popupWindow() instead.&lt;br /&gt;
*tableOrdering() has been removed. Use Joomla.tableOrdering() instead.&lt;br /&gt;
&lt;br /&gt;
= CMS =&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*JUtility is not always loaded. If you need it you have to add jimport('joomla.utilities.utility'); to your code.&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Component Classes ===&lt;br /&gt;
*MenusModelItem::getItem() no longer returns a JObject but a stdClass.&lt;br /&gt;
&lt;br /&gt;
=== Help ===&lt;br /&gt;
&lt;br /&gt;
==== JHelp ====&lt;br /&gt;
*JHelp::createSiteList() the argument $selected has been removed. It was unused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Framework]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1</id>
		<title>Potential backward compatibility issues in Joomla 3.0 and Joomla Platform 12.1</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3.0_and_Joomla_Platform_12.1"/>
				<updated>2012-08-17T06:49:03Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{incomplete}}{{RightTOC}}This documents track potential backward compatibility issues for Joomla 3.0 and Joomla Platform 12.1 which is included in Joomla 3.0. Listed are issues which potentially break extensions.&lt;br /&gt;
Please help making this document complete.&lt;br /&gt;
&lt;br /&gt;
The base of this comparison is Joomla 2.5/Platform 11.4.&lt;br /&gt;
&lt;br /&gt;
Backwards compatibility issues were also tracked for Joomla 2.5: [[Potential backward compatibility issues in Joomla 2.5 and Joomla Platform 11.4]]&lt;br /&gt;
&lt;br /&gt;
= Platform =&lt;br /&gt;
The platform removed a larger number of deprecated classes and methods. For most extensions written for Joomla 2.5 the required changes should be reasonably small. Note that there are still deprecated classes in the platform that will be removed in future versions, developers should stop using them where possible.&lt;br /&gt;
&lt;br /&gt;
== Updated System Requirements ==&lt;br /&gt;
The system requirements have changed in the following points:&lt;br /&gt;
*PHP 5.3.1&lt;br /&gt;
*register_globals must be off&lt;br /&gt;
*magic_quotes_gpc must be off&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*Almost all functions, methods, members and classed marked as deprecated in 12.1 have been removed. They won't be listed in this document.&lt;br /&gt;
*Appending ?no_html to an URL to get a RAW view is not supported anymore (this was an old Joomla 1.0 feature)&lt;br /&gt;
*The DS constant has been removed. If you really need it you can use DIRECTORY_SEPARATOR instead&lt;br /&gt;
*Many more function arguments have been type hinted, including existing classes. Make sure you're always passing values of the correct type.&lt;br /&gt;
*The name of modules now have to start with mod_&lt;br /&gt;
*Extensions need to set the registeredurlparams now, the fall back on the URL has been removed.&lt;br /&gt;
*Some cookies are only accessible trough HTTP (not via JavaScript). For example the session cookie.&lt;br /&gt;
*Due to upcoming changes to the MVC implementation in the platform, JModel, JView, and JController are re-used as the names of the new interfaces. For now use JModelLegacy, JViewLegacy and JControllerLegacy instead. &lt;br /&gt;
&lt;br /&gt;
== Changes to extension installation ==&lt;br /&gt;
*Use of the &amp;lt;install&amp;gt; base tag (from 1.5) is no longer supported; use &amp;lt;extension&amp;gt; instead&lt;br /&gt;
*Suppport for install_script and uninstall_script, and the methods com_install and com_uninstall in these scripts, has been removed; use scriptfile instead&lt;br /&gt;
*In language extensions, support for client=&amp;quot;both&amp;quot; has been removed; package each client as a separate extension and optionally bundle them as a package extension instead&lt;br /&gt;
*File paths for plugins no longer support the old 1.5 method (i.e. plugins/system/cache.php); each plugin must be in its own folder (i.e. plugins/system/cache/cache.php)&lt;br /&gt;
&lt;br /&gt;
== Changes to Components ==&lt;br /&gt;
*In admin components the admin.*.php and toolbar.*.php are not automatically included anymore. This was a Joomla 1.0 legacy feature.&lt;br /&gt;
&lt;br /&gt;
== Moved files ==&lt;br /&gt;
All classes listed here should now be autoloadable. Explicit requires and includes have to be modified or removed.&lt;br /&gt;
&lt;br /&gt;
=== Classes moved to the CMS ===&lt;br /&gt;
*JFormFieldHelpsite&lt;br /&gt;
*JFormFieldMedia&lt;br /&gt;
*JFormFieldMenuitem&lt;br /&gt;
*JFormFieldUser&lt;br /&gt;
*JHelp&lt;br /&gt;
*JTableContent&lt;br /&gt;
&lt;br /&gt;
=== Classes moved within the platform ===&lt;br /&gt;
*JDatabaseQuery subclasses&lt;br /&gt;
*JInput (and all subclasses)&lt;br /&gt;
*JTable (and all subclasses)&lt;br /&gt;
*JArchive (and all subclasses)&lt;br /&gt;
&lt;br /&gt;
== Renamed classes ==&lt;br /&gt;
*JFTP is now called JClientFtp&lt;br /&gt;
*JLDAP is now called JClientLdap&lt;br /&gt;
*JWebClient is now called JApplicationWebClient&lt;br /&gt;
&lt;br /&gt;
== Removed classes ==&lt;br /&gt;
*JParameter (use JForm instead)&lt;br /&gt;
*JElement and its subclasses&lt;br /&gt;
*JFormFieldEditors (use JFormFieldPlugins instead)&lt;br /&gt;
*JHtmlImage&lt;br /&gt;
*JSimpleXML&lt;br /&gt;
*JPane&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Base classes ===&lt;br /&gt;
&lt;br /&gt;
==== JFactory ====&lt;br /&gt;
*JFactory::getXMLParser() has been removed. For RSS and Atom use cases, use JFactory::getFeedParser() instead. To read XML files or strings use JFactory::getXML().&lt;br /&gt;
*JFactory::_createConfig() has been removed. Use JFactory::createConfig() instead.&lt;br /&gt;
*JFactory::_createSession() has been removed. Use JFactory::createSession() instead.&lt;br /&gt;
*JFactory::_createDbo() has been removed. Use JFactory::createDbo() instead.&lt;br /&gt;
*JFactory::_createMailer() has been removed. Use JFactory::createMailer() instead.&lt;br /&gt;
*JFactory::_createDocument() has been removed. Use JFactory::createDocument() instead.&lt;br /&gt;
&lt;br /&gt;
=== Application ===&lt;br /&gt;
&lt;br /&gt;
==== JApplicationHelper ====&lt;br /&gt;
*JApplicationHelper::getPath() has been removed. No replacement.&lt;br /&gt;
*JApplicationHelper::_checkPath() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JController ====&lt;br /&gt;
*JController::$_acoSection has been removed.&lt;br /&gt;
*JController::$_acoSectionValue has been removed.&lt;br /&gt;
*JController::authorize() has been removed. Use JController::authorise() instead.&lt;br /&gt;
*JController:: setAccessControl() has been removed. Use JAccess.&lt;br /&gt;
&lt;br /&gt;
==== JControllerLegacy ====&lt;br /&gt;
* JControllerLegacy::display() needs an extra parameter: ($cachable = false, $urlparams = false).&lt;br /&gt;
&lt;br /&gt;
=== Archive ===&lt;br /&gt;
&lt;br /&gt;
==== Adapters ====&lt;br /&gt;
*JArchiveBzip2 does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveGzip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveTar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JArchiveZip does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Base ===&lt;br /&gt;
&lt;br /&gt;
==== JObject ====&lt;br /&gt;
*JObject::toString() has been removed. Use JObject::__toString() instead.&lt;br /&gt;
&lt;br /&gt;
=== Client ===&lt;br /&gt;
&lt;br /&gt;
==== JClientLdap (formerly JLDAP) ====&lt;br /&gt;
*JClientLdap does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
JDatabase had been renamed JDatabaseDriver. JDatabase is still around (but deprecated) and is the base of JDatabaseDriver, this way type hints and instance of checks keep working.&lt;br /&gt;
&lt;br /&gt;
Due to lazy-connecting a connection is only opened when running a query or explicitly calling JDatabseDriver::connected(). Beware of that when checking JDatabaseDriver::connected().&lt;br /&gt;
&lt;br /&gt;
==== JDatabase ====&lt;br /&gt;
*JDatabase::$hasQuoted has been removed.&lt;br /&gt;
*JDatabase::$quoted has been removed.&lt;br /&gt;
*JDatabase::addQuoted() has been removed.&lt;br /&gt;
*JDatabase::hasUTF() has been removed.&lt;br /&gt;
*JDatabase::debug() has been removed. Use JDatabase::setDebug() instead.&lt;br /&gt;
*JDatabase::explain() has been removed.&lt;br /&gt;
*JDatabase::getEscaped() has been removed. Use JDatabase::escape() instead.&lt;br /&gt;
*JDatabase::getTableFields() has been removed. Use JDatabase::getTableColumns() instead.&lt;br /&gt;
*JDatabase::getTicker() has been removed. Use JDatabase::count() instead.&lt;br /&gt;
*JDatabase::isQuoted() has been removed.&lt;br /&gt;
*JDatabase::loadResultArray() has been removed. Use JDatabase::loadColumn() instead.&lt;br /&gt;
*JDatabase::nameQuote() has been removed. Use JDatabase::quoteName() instead.&lt;br /&gt;
*JDatabase::queryBatch() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Document ===&lt;br /&gt;
&lt;br /&gt;
==== JDocument ====&lt;br /&gt;
*JDocument::setMetaData() the $sync argument has been removed. It was broken beyond repair.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentRenderer ====&lt;br /&gt;
*JDocumentRenderer does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentFeed ====&lt;br /&gt;
*JFeedItem does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedEnclosure does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JFeedImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentOpenSearch ====&lt;br /&gt;
*JOpenSearchUrl does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JOpenSearchImage does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JDocumentXml ====&lt;br /&gt;
*JDocumentXml::_name has been renamed to JDocumentXml::name&lt;br /&gt;
&lt;br /&gt;
=== Environment ===&lt;br /&gt;
&lt;br /&gt;
==== JBrowser ====&lt;br /&gt;
*JBrowser does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JBrowser::setQuirk() has been removed.&lt;br /&gt;
*JBrowser::hasQuirk() has been removed.&lt;br /&gt;
*JBrowser::getQuirk() has been removed.&lt;br /&gt;
*JBrowser::setFeature() has been removed.&lt;br /&gt;
*JBrowser::hasFeature() has been removed.&lt;br /&gt;
*JBrowser::getFeature() has been removed.&lt;br /&gt;
*JBrowser::_majorVersion has been renamed to JBrowser::majorVersion&lt;br /&gt;
*JBrowser::_minorVersion has been renamed to JBrowser::minorVersion&lt;br /&gt;
*JBrowser::_browser has been renamed to JBrowser::browser&lt;br /&gt;
*JBrowser::_agent has been renamed to JBrowser::agent&lt;br /&gt;
*JBrowser::_lowerAgent has been renamed to JBrowser::lowerAgent&lt;br /&gt;
*JBrowser::_accept has been renamed to JBrowser::accept&lt;br /&gt;
*JBrowser::_accept_parsed has been renamed to JBrowser::acceptParsed&lt;br /&gt;
*JBrowser::_platform has been renamed to JBrowser::platform&lt;br /&gt;
*JBrowser::_robots has been renamed to JBrowser::robots&lt;br /&gt;
*JBrowser::_mobile has been renamed to JBrowser::mobile&lt;br /&gt;
*JBrowser::_images has been renamed to JBrowser::images&lt;br /&gt;
&lt;br /&gt;
==== JRequest ====&lt;br /&gt;
*JRequest::clean() has been removed.&lt;br /&gt;
*JRequest::_cleanVar() is now protected.&lt;br /&gt;
&lt;br /&gt;
==== JURI ====&lt;br /&gt;
*JURI does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JUri::_uri has been renamed to JUri::uri&lt;br /&gt;
*JUri::_scheme has been renamed to JUri::scheme&lt;br /&gt;
*JUri::_host has been renamed to JUri::host&lt;br /&gt;
*JUri::_port has been renamed to JUri::port&lt;br /&gt;
*JUri::_user has been renamed to JUri::user&lt;br /&gt;
*JUri::_pass has been renamed to JUri::pass&lt;br /&gt;
*JUri::_path has been renamed to JUri::path&lt;br /&gt;
*JUri::_query has been renamed to JUri::query&lt;br /&gt;
*JUri::_fragment has been renamed to JUri::fragment&lt;br /&gt;
*JUri::_vars has been renamed to JUri::vars&lt;br /&gt;
&lt;br /&gt;
=== Error ===&lt;br /&gt;
&lt;br /&gt;
==== JError ====&lt;br /&gt;
*JError::isError() has been removed. Use instance of Exception instead.&lt;br /&gt;
&lt;br /&gt;
==== JProfiler ====&lt;br /&gt;
*JProfiler does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
*JProfiler::_start has been renamed to JProfiler::start&lt;br /&gt;
*JProfiler::_prefix has been renamed to JProfiler::prefix&lt;br /&gt;
*JProfiler::_buffer has been renamed to JProfiler::buffer&lt;br /&gt;
*JProfiler::_previous_time has been renamed to JProfiler::previousTime&lt;br /&gt;
*JProfiler::_previous_mem has been renamed to JProfiler::previousMem&lt;br /&gt;
*JProfiler::_iswin has been renamed to JProfiler::isWin&lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
&lt;br /&gt;
==== JStream ====&lt;br /&gt;
*JStream::_fh has been renamed to JStream::fh&lt;br /&gt;
*JStream::_filesize has been renamed to JStream::filesize&lt;br /&gt;
*JStream::_context has been renamed to JStream::context&lt;br /&gt;
*JStream::_contextOptions has been renamed to JStream::contextOptions&lt;br /&gt;
*JStream::_openmode has been renamed to JStream::openmode&lt;br /&gt;
&lt;br /&gt;
==== JStreamString ====&lt;br /&gt;
*JStream::_currentstring has been renamed to JStream::currentString&lt;br /&gt;
*JStream::_path has been renamed to JStream::path&lt;br /&gt;
*JStream::_mode has been renamed to JStream::mode&lt;br /&gt;
*JStream::_options has been renamed to JStream::options&lt;br /&gt;
*JStream::_opened_path has been renamed to JStream::openedPath&lt;br /&gt;
*JStream::_pos has been renamed to JStream::pos&lt;br /&gt;
*JStream::_len has been renamed to JStream::len&lt;br /&gt;
*JStream::_stat has been renamed to JStream::stat&lt;br /&gt;
&lt;br /&gt;
=== Filter ===&lt;br /&gt;
&lt;br /&gt;
==== JFilterInput ====&lt;br /&gt;
*JFilterInput does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
&lt;br /&gt;
==== JHtml ====&lt;br /&gt;
*JHtml::_includeRelativeFiles() has been removed. Use JHtml::includeRelativeFiles() instead.&lt;br /&gt;
*JHtml::core() has been removed. Use JHtmlBehavior::framework() instead.&lt;br /&gt;
*JHtml::script() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
*JHtml::stylesheet() doesn't support a string as the second parameter anymore. This used to be the path to the file in Joomla 1.5 and has been removed now.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlAccess ====&lt;br /&gt;
*JHtmlAccess::assetgroups() the argument $config has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlBehavior ====&lt;br /&gt;
*JHtmlBehavior::mootools() has been removed. Use JHtmlBehavior::framework instead.&lt;br /&gt;
*JHtmlBehavior::noframes() the argument $location has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlList ====&lt;br /&gt;
*JHtmlList::ordering() the argument $chop has been removed. It was previously unused.&lt;br /&gt;
*JHtmlList::users(), the argument $reg has been removed.&lt;br /&gt;
&lt;br /&gt;
==== JHtmlSelect ====&lt;br /&gt;
*JHtmlSelect::_optionDefaults has been renamed to JHtmlSelect::optionDefaults&lt;br /&gt;
&lt;br /&gt;
==== JToolBar ====&lt;br /&gt;
*JToolBar does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JButton ====&lt;br /&gt;
*JButton does not extend JObject anymore. You must not use any of JObject's methods.&lt;br /&gt;
&lt;br /&gt;
==== JPagination ====&lt;br /&gt;
*JPagination::_viewall has been renamed to JPagination::viewall&lt;br /&gt;
*JPagination::_additionalUrlParams has been renamed to JPagination::additionalUrlParams&lt;br /&gt;
&lt;br /&gt;
=== Installer ===&lt;br /&gt;
&lt;br /&gt;
==== JInstaller ====&lt;br /&gt;
*JInstaller::getOverwrite() has been removed. Use JInstaller::isOverwrite() instead.&lt;br /&gt;
*JInstaller::getUpgrade() has been removed. Use JInstaller::isUpgrade() instead.&lt;br /&gt;
*JInstaller::_paths has been renamed to JInstaller::paths&lt;br /&gt;
*JInstaller::_upgrade has been renamed to JInstaller::upgrade&lt;br /&gt;
*JInstaller::_overwrite has been renamed to JInstaller::overwrite&lt;br /&gt;
*JInstaller::_stepStack has been renamed to JInstaller::stepStack&lt;br /&gt;
&lt;br /&gt;
==== JInstallerLanguage ====&lt;br /&gt;
*JInstallerLanguage::_core as been renamed to JInstallerLanguage::core&lt;br /&gt;
&lt;br /&gt;
=== Language ===&lt;br /&gt;
&lt;br /&gt;
==== JLanguage ====&lt;br /&gt;
*JLanguage::getPluralSufficesCallback() has been removed. Use JLanguage::getPluralSuffixesCallback() instead.&lt;br /&gt;
*JLanguage::_parseLanguageFiles() has been removed. Use JLanguage::parseLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFiles() has been removed. Use JLanguage::parseXMLLanguageFiles() instead.&lt;br /&gt;
*JLanguage::_parseXMLLanguageFile() has been removed. Use JLanguage::parseXMLLanguageFile() instead.&lt;br /&gt;
*JLanguage::loadLanguage() the argument $overwrite has been removed. It was previously unused.&lt;br /&gt;
&lt;br /&gt;
=== Registry ===&lt;br /&gt;
&lt;br /&gt;
==== JRegistry ====&lt;br /&gt;
*JRegistry::loadXML() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadINI() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::loadJSON() has been removed. Use JRegistry::loadString() instead.&lt;br /&gt;
*JRegistry::makeNameSpace() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getNameSpaces() has been removed. No replacement.&lt;br /&gt;
*JRegistry::getValue() has been removed. Use JRegistry::get() instead.&lt;br /&gt;
*JRegistry::setValue() has been removed. Use JRegistry::set() instead.&lt;br /&gt;
*JRegistry::loadSetupFile() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatINI ====&lt;br /&gt;
* JRegistryFormatINI::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
==== JRegistryFormatJSON ====&lt;br /&gt;
*JRegistryFormatJSON::stringToObject() the second argument ($option) may not be a boolean anymore.&lt;br /&gt;
&lt;br /&gt;
=== Session ===&lt;br /&gt;
&lt;br /&gt;
==== JSessionStorageDatabase ====&lt;br /&gt;
*JSessionStorageDatabase::_data has been renamed to JSessionStorageDatabase::data&lt;br /&gt;
&lt;br /&gt;
=== Table ===&lt;br /&gt;
&lt;br /&gt;
==== JTable ====&lt;br /&gt;
*JTable::canDelete() has been removed.&lt;br /&gt;
*JTable::toXML() has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Updater ===&lt;br /&gt;
&lt;br /&gt;
==== JUpdate ====&lt;br /&gt;
*JUpdate::_xml_parser has been renamed to JUpdate::xmlParser&lt;br /&gt;
*JUpdate::_stack has been renamed to JUpdate::stack&lt;br /&gt;
*JUpdate::_state_store has been renamed to JUpdate::stateStore&lt;br /&gt;
*JUpdate::_current_update has been renamed to JUpdate::currentUpdate&lt;br /&gt;
&lt;br /&gt;
==== JUpdater ====&lt;br /&gt;
*JUpdater::arrayUnique() has been removed. Use JArrayHelper::arrayUnique() instead.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
==== JAuthentication ====&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_SUCCESS has been removed. Use JAuthentication::STATUS_SUCCESS instead.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_CANCEL has been removed. No replacement.&lt;br /&gt;
*The constant JAUTHENTICATE_STATUS_FAILURE has been removed. Use JAuthentication:: STATUS_FAILURE instead.&lt;br /&gt;
*JAuthentication::_observers has been renamed to JAuthentication::observers&lt;br /&gt;
*JAuthentication::_state has been renamed to JAuthentication::state&lt;br /&gt;
*JAuthentication::_methods has been renamed to JAuthentication::methods&lt;br /&gt;
&lt;br /&gt;
==== JUser ====&lt;br /&gt;
*JUser::getParameters() has been removed.&lt;br /&gt;
*Juser::authorisedLevels() has been removed. Use JUser::getAuthorisedViewLevels() instead.&lt;br /&gt;
*Juser::authorize() has been removed. Use JUser::authorise() instead.&lt;br /&gt;
*JUser::$usertype has been removed.&lt;br /&gt;
&lt;br /&gt;
=== Utility ===&lt;br /&gt;
&lt;br /&gt;
==== JBuffer ====&lt;br /&gt;
*JBuffer::_buffers has been renamed to JBuffer::buffers&lt;br /&gt;
&lt;br /&gt;
==== JDate ====&lt;br /&gt;
*JDate::toMysql() has been removed. Use JDate::toSql() instead.&lt;br /&gt;
*JDate::toFormat() has been removed. Use JDate::format() instead.&lt;br /&gt;
*JDate::setOffset() has been removed.&lt;br /&gt;
*JDate::$offsets has been removed.&lt;br /&gt;
*JDate__construct() doesn't accept an numeric value for $tz anymore.&lt;br /&gt;
*JDate::_tz has been renamed to JDate::tz.&lt;br /&gt;
&lt;br /&gt;
==== JUtility ====&lt;br /&gt;
*JUtility::sendMail() has been removed. Use JMail::sendMail() instead.&lt;br /&gt;
*JUtility::sendAdminMail() has been removed. Use JMail:: sendAdminMail() instead.&lt;br /&gt;
*JUtility::getHash() has been removed. Use JApplication::getHash() instead.&lt;br /&gt;
*JUtility::getToken() has been removed. Use JSession::getFormToken() instead.&lt;br /&gt;
*JUtility::isWinOS() has been removed. Use JApplication::isWinOS() instead.&lt;br /&gt;
*JUtility::dump() has been removed. No replacement.&lt;br /&gt;
*JUtility::array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
*JUtility:: array_unshift_ref() has been removed. No replacement.&lt;br /&gt;
&lt;br /&gt;
==== JXMLElement ====&lt;br /&gt;
*JXMLElement::data() has been removed&lt;br /&gt;
*JXMLElement::getAttribute() has been removed. Use SimpleXMLElement::attributes() instead.&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
*Compatibility with MooTools 1.2 has been removed&lt;br /&gt;
*Forms that have name=&amp;quot;adminForm&amp;quot; now also require id=&amp;quot;adminForm&amp;quot;&lt;br /&gt;
*checkAll() has been removed. Use Joomla.checkAll() instead.&lt;br /&gt;
*isChecked() has been removed. Use Joomla.isChecked() instead.&lt;br /&gt;
*popupWindow() has been removed. Use Joomla.popupWindow() instead.&lt;br /&gt;
*tableOrdering() has been removed. Use Joomla.tableOrdering() instead.&lt;br /&gt;
&lt;br /&gt;
= CMS =&lt;br /&gt;
&lt;br /&gt;
== General changes ==&lt;br /&gt;
*JUtility is not always loaded. If you need it you have to add jimport('joomla.utilities.utility'); to your code.&lt;br /&gt;
&lt;br /&gt;
== Changes to classes ==&lt;br /&gt;
&lt;br /&gt;
=== Component Classes ===&lt;br /&gt;
*MenusModelItem::getItem() no longer returns a JObject but a stdClass.&lt;br /&gt;
&lt;br /&gt;
=== Help ===&lt;br /&gt;
&lt;br /&gt;
==== JHelp ====&lt;br /&gt;
*JHelp::createSiteList() the argument $selected has been removed. It was unused.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Compatibility]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Framework]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/IIS</id>
		<title>IIS</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/IIS"/>
				<updated>2012-04-05T22:20:39Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Whilst IIS (Internet Information Services, a Microsoft web server) accounts for relatively few users, compared to Apache, there are enough to warrant providing information which is unique.&lt;br /&gt;
&lt;br /&gt;
PHP can run on IIS, so a Joomla! web site also can run on IIS.&lt;br /&gt;
&lt;br /&gt;
The PHP.net website should be referenced, regarding the installation of PHP on Windows and the configuration of IIS to process PHP webpages and scripts.&lt;br /&gt;
&lt;br /&gt;
To get started, here are some helpful links for developers who want to install PHP and Joomla! on IIS.&lt;br /&gt;
&lt;br /&gt;
* Install Joomla for Windows and IIS using the Web Platform Installer - http://www.microsoft.com/web/joomla &lt;br /&gt;
* PHP on Windows and IIS; building an IIS-optimized PHP - http://www.microsoft.com/web/php&lt;br /&gt;
&lt;br /&gt;
The two most common problems encountered by Joomla! admins whose sites are on IIS webservers are:&lt;br /&gt;
* Setting the website's directory/filesystem permissions correctly&lt;br /&gt;
* Enabling SEF URLs&lt;br /&gt;
&lt;br /&gt;
==Setting the filesystem permissions==&lt;br /&gt;
&lt;br /&gt;
===Conceptual Overview===&lt;br /&gt;
Windows filesystem permissions are more complex than the 3-level, 3-value Unix-style &amp;lt;code&amp;gt;rw-r--r--&amp;lt;/code&amp;gt; conventions. &lt;br /&gt;
&lt;br /&gt;
Windows servers have a user called &amp;lt;code&amp;gt;IUSR&amp;lt;/code&amp;gt;, which corresponds to the &amp;lt;code&amp;gt;apache&amp;lt;/code&amp;gt; user on many Linux systems. PHP scripts run under the IUSR account.&lt;br /&gt;
(For IIS 7.5, this may be the group WEB\Users)&lt;br /&gt;
&lt;br /&gt;
====Levels====&lt;br /&gt;
A directory or file does have an &amp;lt;code&amp;gt;owner&amp;lt;/code&amp;gt;, and Windows does have &amp;lt;code&amp;gt;group&amp;lt;/code&amp;gt;s, but there is no &amp;lt;code&amp;gt;&amp;quot;everyone else&amp;quot;&amp;lt;/code&amp;gt; under Windows. &lt;br /&gt;
&lt;br /&gt;
There is a group called &amp;lt;code&amp;gt;Users&amp;lt;/code&amp;gt;. This corresponds to all accounts used by human beings to deliberately interact with the server. But accounts for services, system operations, and software user permisions do not belong to that group, and in fact '''no''' accounts at all (human or otherwise) have '''any''' privileges which aren't explicitly granted either directly to the user or by membership in some group.&lt;br /&gt;
&lt;br /&gt;
====Values====&lt;br /&gt;
Beyond &amp;lt;code&amp;gt;Read&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Write&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Execute&amp;lt;/code&amp;gt;, Windows permissions include additional values. The important ones to know about for a Joomla website are &amp;lt;code&amp;gt;Read&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Write&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===HowTo configure the permissions===&lt;br /&gt;
When logged in to the Windows server, run Windows Explorer, and navigate to inetpub.&lt;br /&gt;
&lt;br /&gt;
Right-click the directory which holds your Joomla site.&amp;lt;br /&amp;gt;&lt;br /&gt;
Get Properties, tab to Security.&amp;lt;br /&amp;gt;&lt;br /&gt;
Click ADD.&amp;lt;br /&amp;gt;&lt;br /&gt;
Make sure that the LOCATION field is set to the local computer, not a domain controller.&amp;lt;br /&amp;gt;&lt;br /&gt;
Type iis_iusrs into the field for identifying the user/group you are granting access to.&amp;lt;br /&amp;gt;&lt;br /&gt;
Confirm.&amp;lt;br /&amp;gt;&lt;br /&gt;
Highlight the iis_iusrs entry in the access control list.&amp;lt;br /&amp;gt;&lt;br /&gt;
Check the boxes for Read &amp;amp; Execute, List Folder Contents, Read, and Write&amp;lt;br /&amp;gt;&lt;br /&gt;
Confirm, put the security window away now.&amp;lt;br /&amp;gt;&lt;br /&gt;
Open Start -. Administrator -&amp;gt; Computer Management.&amp;lt;br /&amp;gt;&lt;br /&gt;
Navigate to Local Users and Groups -&amp;gt; Groups.&amp;lt;br /&amp;gt;&lt;br /&gt;
Find or create the group iis_iusrs&amp;lt;br /&amp;gt;&lt;br /&gt;
Add a member to the group:&amp;lt;br /&amp;gt;&lt;br /&gt;
again, make sure that the LOCATION field is set to the local computer, not a domain controller.&amp;lt;br /&amp;gt;&lt;br /&gt;
Type IUSR into the field for identifying the user/group you are granting access to.&amp;lt;br /&amp;gt;&lt;br /&gt;
Confirm.&amp;lt;br /&amp;gt;&lt;br /&gt;
Save.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the Joomla installer again, and enjoy your PHP user's write privileges in your website folder.&lt;br /&gt;
&lt;br /&gt;
==[[Search Engine Friendly URLs]]==&lt;br /&gt;
The functioning of SEF URLs depends on &amp;quot;URL rewriting&amp;quot; - matching patterns in incoming HTTP requests, and passing the request to the webserver in a different format. Joomla can only understand the parameters present in the &amp;quot;ugly&amp;quot; request, so the human-readable path in the incoming HTTP request needs to be re-written for Joomla.&lt;br /&gt;
&lt;br /&gt;
===Apache's mod_rewrite===&lt;br /&gt;
&amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt; is the familiar way by which many webmasters translate nice human-readable, spider-friendly URL requests like &amp;lt;code&amp;gt;/about_us/contact_information&amp;lt;/code&amp;gt; into the &amp;quot;ugly&amp;quot; internal server path like &amp;lt;code&amp;gt;/index.php?option=com_content&amp;amp;view=article&amp;amp;id=999&amp;amp;Itemid=23&amp;lt;/code&amp;gt; that makes Joomla serve up some content. A text file called .htaccess contains the rewrite rules, which are written according to a specific syntax.&lt;br /&gt;
&lt;br /&gt;
===IIS===&lt;br /&gt;
Before Windows Server 2008 and IIS7, only third-party add-ons could add URL rewriting functionality to an IIS webserver. For servers today still running IIS6 or earlier, these are still available. CodePlex is a website and code-sharing developer forge associated with Microsoft, and it hosts at least two good-quality URL rewrite solutions for IIS6. At least one of these modules will parse and execute the same rewrite rules which work in Apache .htaccess files.&lt;br /&gt;
&lt;br /&gt;
Windows Server 2008 comes with IIS7, which is the first webserver for which Microsoft provides a native module which provides URL rewriting functionality.&lt;br /&gt;
&lt;br /&gt;
The module is called &amp;quot;IIS URL Rewrite Module&amp;quot; and is free to download and install on your IIS7 webserver.&lt;br /&gt;
&lt;br /&gt;
The IIS7 module configures and stores its rules in a very different way than the format Apache provides via .htaccess. The rules are stored as XML data in the web.config file in a website's root. The IIS Management Console provides a GUI and wizard for creating and testing rules. The wizard is capable of reading a text file with .htaccess-type rules and converting them to the native format.&lt;br /&gt;
&lt;br /&gt;
See [[Enabling Search Engine Friendly (SEF) URLs on IIS]] for instructions.&lt;br /&gt;
&lt;br /&gt;
==[[Restricting access to the backend by IP address]]==&lt;br /&gt;
&lt;br /&gt;
You can utilise server based IP protection.&lt;br /&gt;
If you're running IIS 7.5 on Windows Server 2008, you can use the IP and&lt;br /&gt;
Domain Security option. Go to the Server Manager MMC panel and select&lt;br /&gt;
&amp;quot;Roles&amp;quot; and then &amp;quot;Web Server (IIS). From here select &amp;quot;Add Role Services&amp;quot; and&lt;br /&gt;
in the window that pops up, scroll down to security and select the &amp;quot;IP And&lt;br /&gt;
Domain Security Option&amp;quot; (see screenshot below)&lt;br /&gt;
[[File:IPrestrictionIIS.jpg]]&lt;br /&gt;
and then hit next to install.&lt;br /&gt;
Once you've got it installed, open up the IIS Manager MMC panel (if you have&lt;br /&gt;
it open already, you will need to restart it for the appropriate panel to&lt;br /&gt;
appear; this also means the server manager one might not be useful to you)&lt;br /&gt;
and navigate down to the administrator directory of the site. Click on the&lt;br /&gt;
&amp;quot;IPv4 Address and Domain Restrictions&amp;quot;. You can change the default behaviour&lt;br /&gt;
by clicking &amp;quot;Edit Feature Settings&amp;quot; and setting the default value for&lt;br /&gt;
unspecified clients to deny. Then add allow entries for your trusted IP&lt;br /&gt;
addresses or subnets.&lt;br /&gt;
Check out the following article for details as well:&lt;br /&gt;
[[http://www.iis.net/ConfigReference/system.webServer/security/ipSecurity]]&lt;br /&gt;
(thanks to Sam Moffat for above info)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:IIS]][[Category:FAQ]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012</id>
		<title>Pizza Bugs and Fun March 3, 2012</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012"/>
				<updated>2012-02-22T17:20:53Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Removing Portland event.  Couldn't get anyone other than myself involved.... :(&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza, Bugs and Fun event scheduled for Saturday, March 3, 2012. The event is global for virtual participants with local venues where ever they are organized. We squashed a lot of bugs last month, but as more people use a new release, we always find more. We'll also have documentation ready to be worked on.&lt;br /&gt;
&lt;br /&gt;
'''See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#General_Instructions General Instructions] below for instructions.'''&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The '''twitter''' hash tag is #jpbf12.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* '''Bugs''' : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* '''Documentation''' : We still have documentation that needs to be done. If you want to help out writing documentation, you're also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only and you are all invited. This is the same chat we used for the PBF in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF. This Skype chat will be in English, but other languages can set up their own chat groups as well.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
&lt;br /&gt;
These instructions may change as we get closer to the event.&lt;br /&gt;
&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Look for issues with a status of Confirmed&lt;br /&gt;
* Before you start coding, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] and put your name on the issue so people know someone is working on it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don't hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* When you have a patch, add it to the tracker and change the status to Pending if you are able to.&lt;br /&gt;
* Go back into the Google doc and change the status there to Pending as well and remove your name and add a comment with your name that you added a patch. If the tracker still needs to be changed to pending, you can mention it there.&lt;br /&gt;
Helpful documentation:&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to test and you have or can set up SVN and XAMPP/MAMP ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, add comments to the tracker on your results. Start your comment with @test so you will get counted in the stats as a tester.&lt;br /&gt;
Helpful Documentation:&lt;br /&gt;
*  [[Tortoise SVN]] Freestanding Windows based SVN. This may be all you need, if you have a Windows PC&lt;br /&gt;
* [http://www.adobe.com/devnet/dreamweaver/articles/using_subversion_pt1.html Dreamweaver CS5 with SVN] Start of tutorials on how to use SVN in Dreamweaver&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]. A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development. This also guides you through installing XAMPP/MAMP on your computer.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user account. If you don't already have one, you may register on [[Special:UserLogin]]. While a brand new user account won't give you all the permissions you'd get with a confirmed and &amp;quot;elevated&amp;quot; account, you will be able to edit most pages.&lt;br /&gt;
* Get your user account a few days before and make sure that you are able to sign in since the automatic authorization system can lock some people out.&lt;br /&gt;
* If you'd like something to be edited, but you're not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the Skype chat to help you.&lt;br /&gt;
{{:Documentation wiki}}&lt;br /&gt;
&lt;br /&gt;
===== Help Screens =====&lt;br /&gt;
* There are help screens that still need to be made for 2.5 [[Help17:Help screens]]&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
We are offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlanewengland.org Joomla User Group New England]&lt;br /&gt;
 Marlboro College Graduate School&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301&lt;br /&gt;
 Contact: Andrea Tarr&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sydney, Australia 3pm-9pm&lt;br /&gt;
Hosted by Tim Plummer - Tweet @bfsurvey&lt;br /&gt;
InterfaceFLOR (usual Sydney JUG venue)&lt;br /&gt;
101 Chalmers Street, Surry Hills, NSW&lt;br /&gt;
http://www.meetup.com/Joomla-User-Group-Sydney/events/53020132/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. This is the same Skype chat we used in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don't already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else's.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the SVN for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: http://joomlacode.org/svn/joomla/development/trunk&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: It is the main trunk&lt;br /&gt;
&lt;br /&gt;
Q: Any known issues with JForge and Chrome on Windows?&lt;br /&gt;
&lt;br /&gt;
A: It have been seen that browsing the JForge tracker, Chrome may ask for a missing plugin (windows media player). No workaround for this is yet known.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
{{:Pizza Bugs and Fun March 3, 2012/Contributors List}}&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012</id>
		<title>Pizza Bugs and Fun March 3, 2012</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012"/>
				<updated>2012-02-10T06:35:38Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: /* North America */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza, Bugs and Fun event scheduled for Saturday, March 3, 2012. The event is global for virtual participants with local venues where ever they are organized. We squashed a lot of bugs last month, but as more people use a new release, we always find more. We'll also have documentation ready to be worked on.&lt;br /&gt;
&lt;br /&gt;
'''See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#General_Instructions General Instructions] below for instructions.'''&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The '''twitter''' hash tag is #jpbf12.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* '''Bugs''' : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* '''Documentation''' : We still have documentation that needs to be done. If you want to help out writing documentation, you're also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only and you are all invited. This is the same chat we used for the PBF in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF. This Skype chat will be in English, but other languages can set up their own chat groups as well.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
&lt;br /&gt;
These instructions may change as we get closer to the event.&lt;br /&gt;
&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Look for issues with a status of Confirmed&lt;br /&gt;
* Before you start coding, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] and put your name on the issue so people know someone is working on it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don't hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* When you have a patch, add it to the tracker and change the status to Pending if you are able to.&lt;br /&gt;
* Go back into the Google doc and change the status there to Pending as well and remove your name and add a comment with your name that you added a patch. If the tracker still needs to be changed to pending, you can mention it there.&lt;br /&gt;
Helpful documentation:&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to test and you have or can set up SVN and XAMPP/MAMP ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, add comments to the tracker on your results. Start your comment with @test so you will get counted in the stats as a tester.&lt;br /&gt;
Helpful Documentation:&lt;br /&gt;
*  [[Tortoise SVN]] Freestanding Windows based SVN. This may be all you need, if you have a Windows PC&lt;br /&gt;
* [http://www.adobe.com/devnet/dreamweaver/articles/using_subversion_pt1.html Dreamweaver CS5 with SVN] Start of tutorials on how to use SVN in Dreamweaver&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]. A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development. This also guides you through installing XAMPP/MAMP on your computer.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user account. If you don't already have one, you may register on [[Special:UserLogin]]. While a brand new user account won't give you all the permissions you'd get with a confirmed and &amp;quot;elevated&amp;quot; account, you will be able to edit most pages.&lt;br /&gt;
* Get your user account a few days before and make sure that you are able to sign in since the automatic authorization system can lock some people out.&lt;br /&gt;
* If you'd like something to be edited, but you're not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the Skype chat to help you.&lt;br /&gt;
{{:Documentation wiki}}&lt;br /&gt;
&lt;br /&gt;
===== Help Screens =====&lt;br /&gt;
* There are help screens that still need to be made for 2.5 [[Help17:Help screens]]&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
We are offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlanewengland.org Joomla User Group New England]&lt;br /&gt;
 Marlboro College Graduate School&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301&lt;br /&gt;
 Contact: Andrea Tarr&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlapdx.com/ Portland Joomla! User Group]&lt;br /&gt;
 Location: TBD&lt;br /&gt;
 Contact: Ben Sandberg&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. This is the same Skype chat we used in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don't already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else's.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the SVN for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: http://joomlacode.org/svn/joomla/development/trunk&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: It is the main trunk&lt;br /&gt;
&lt;br /&gt;
Q: Any known issues with JForge and Chrome on Windows?&lt;br /&gt;
&lt;br /&gt;
A: It have been seen that browsing the JForge tracker, Chrome may ask for a missing plugin (windows media player). No workaround for this is yet known.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
{{:Pizza Bugs and Fun March 3, 2012/Contributors List}}&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012</id>
		<title>Pizza Bugs and Fun March 3, 2012</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012"/>
				<updated>2012-02-10T06:35:30Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: refinement&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza, Bugs and Fun event scheduled for Saturday, March 3, 2012. The event is global for virtual participants with local venues where ever they are organized. We squashed a lot of bugs last month, but as more people use a new release, we always find more. We'll also have documentation ready to be worked on.&lt;br /&gt;
&lt;br /&gt;
'''See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#General_Instructions General Instructions] below for instructions.'''&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The '''twitter''' hash tag is #jpbf12.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* '''Bugs''' : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* '''Documentation''' : We still have documentation that needs to be done. If you want to help out writing documentation, you're also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only and you are all invited. This is the same chat we used for the PBF in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF. This Skype chat will be in English, but other languages can set up their own chat groups as well.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
&lt;br /&gt;
These instructions may change as we get closer to the event.&lt;br /&gt;
&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Look for issues with a status of Confirmed&lt;br /&gt;
* Before you start coding, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] and put your name on the issue so people know someone is working on it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don't hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* When you have a patch, add it to the tracker and change the status to Pending if you are able to.&lt;br /&gt;
* Go back into the Google doc and change the status there to Pending as well and remove your name and add a comment with your name that you added a patch. If the tracker still needs to be changed to pending, you can mention it there.&lt;br /&gt;
Helpful documentation:&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to test and you have or can set up SVN and XAMPP/MAMP ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, add comments to the tracker on your results. Start your comment with @test so you will get counted in the stats as a tester.&lt;br /&gt;
Helpful Documentation:&lt;br /&gt;
*  [[Tortoise SVN]] Freestanding Windows based SVN. This may be all you need, if you have a Windows PC&lt;br /&gt;
* [http://www.adobe.com/devnet/dreamweaver/articles/using_subversion_pt1.html Dreamweaver CS5 with SVN] Start of tutorials on how to use SVN in Dreamweaver&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]. A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development. This also guides you through installing XAMPP/MAMP on your computer.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user account. If you don't already have one, you may register on [[Special:UserLogin]]. While a brand new user account won't give you all the permissions you'd get with a confirmed and &amp;quot;elevated&amp;quot; account, you will be able to edit most pages.&lt;br /&gt;
* Get your user account a few days before and make sure that you are able to sign in since the automatic authorization system can lock some people out.&lt;br /&gt;
* If you'd like something to be edited, but you're not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the Skype chat to help you.&lt;br /&gt;
{{:Documentation wiki}}&lt;br /&gt;
&lt;br /&gt;
===== Help Screens =====&lt;br /&gt;
* There are help screens that still need to be made for 2.5 [[Help17:Help screens]]&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
We are offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlanewengland.org Joomla User Group New England]&lt;br /&gt;
 Marlboro College Graduate School&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301&lt;br /&gt;
 Contact: Andrea Tarr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlapdx.com/ Portland Joomla! User Group]&lt;br /&gt;
 Location: TBD&lt;br /&gt;
 Contact: Ben Sandberg&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. This is the same Skype chat we used in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don't already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else's.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the SVN for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: http://joomlacode.org/svn/joomla/development/trunk&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: It is the main trunk&lt;br /&gt;
&lt;br /&gt;
Q: Any known issues with JForge and Chrome on Windows?&lt;br /&gt;
&lt;br /&gt;
A: It have been seen that browsing the JForge tracker, Chrome may ask for a missing plugin (windows media player). No workaround for this is yet known.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
{{:Pizza Bugs and Fun March 3, 2012/Contributors List}}&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012</id>
		<title>Pizza Bugs and Fun March 3, 2012</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012"/>
				<updated>2012-02-10T06:34:57Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: adding Portland!!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Bug Squad]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Image:pbf.png|right]]&lt;br /&gt;
{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
We are announcing a Joomla! Pizza, Bugs and Fun event scheduled for Saturday, March 3, 2012. The event is global for virtual participants with local venues where ever they are organized. We squashed a lot of bugs last month, but as more people use a new release, we always find more. We'll also have documentation ready to be worked on.&lt;br /&gt;
&lt;br /&gt;
'''See the section [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#General_Instructions General Instructions] below for instructions.'''&lt;br /&gt;
&lt;br /&gt;
This wiki will be used as the central resource for coordinating efforts and accumulating results from this event.&lt;br /&gt;
&lt;br /&gt;
The '''twitter''' hash tag is #jpbf12.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
* '''Bugs''' : We will be working through the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] where there are bug reports needing patches and/or testing.&lt;br /&gt;
&lt;br /&gt;
* '''Documentation''' : We still have documentation that needs to be done. If you want to help out writing documentation, you're also more than welcome.&lt;br /&gt;
&lt;br /&gt;
== Organization, logistics and communications ==&lt;br /&gt;
&lt;br /&gt;
=== Communication ===&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only and you are all invited. This is the same chat we used for the PBF in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF. This Skype chat will be in English, but other languages can set up their own chat groups as well.&lt;br /&gt;
&lt;br /&gt;
=== General Instructions ===&lt;br /&gt;
&lt;br /&gt;
These instructions may change as we get closer to the event.&lt;br /&gt;
&lt;br /&gt;
==== If you want to code bug fixes ====&lt;br /&gt;
* Look for issues with a status of Confirmed&lt;br /&gt;
* Before you start coding, find the issue in the [https://docs.google.com/spreadsheet/ccc?key=0AuHNF8-wsi3tdGtOU0lqSThaLXB4NDJCUTBMNkxzcXc#gid=0 CMS Issues Google doc] and put your name on the issue so people know someone is working on it. You can sign things out to a group if a group is working on any issue. Remember that everyone is seeing the same document, so please don't hide rows.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* When you have a patch, add it to the tracker and change the status to Pending if you are able to.&lt;br /&gt;
* Go back into the Google doc and change the status there to Pending as well and remove your name and add a comment with your name that you added a patch. If the tracker still needs to be changed to pending, you can mention it there.&lt;br /&gt;
Helpful documentation:&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]].  A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
* [[Tortoise SVN]]&lt;br /&gt;
* [[Secure coding guidelines]]&lt;br /&gt;
* [[Development Best Practices]]&lt;br /&gt;
&lt;br /&gt;
==== If you want to test and you have or can set up SVN and XAMPP/MAMP ====&lt;br /&gt;
* Look for issues with a status of Pending. We want at least 2 testers and more on complex issues, so you can test what others have tested already.&lt;br /&gt;
* Use the [http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&amp;amp;tracker_id=8103 CMS Issue Tracker] as usual, which means you download the patch from the tracker and apply it to a current SVN copy of Joomla.&lt;br /&gt;
* Most of the issues should have test instructions with them.&lt;br /&gt;
* Once you have tested, add comments to the tracker on your results. Start your comment with @test so you will get counted in the stats as a tester.&lt;br /&gt;
Helpful Documentation:&lt;br /&gt;
*  [[Tortoise SVN]] Freestanding Windows based SVN. This may be all you need, if you have a Windows PC&lt;br /&gt;
* [http://www.adobe.com/devnet/dreamweaver/articles/using_subversion_pt1.html Dreamweaver CS5 with SVN] Start of tutorials on how to use SVN in Dreamweaver&lt;br /&gt;
* [[Setting up your workstation for Joomla! development]]. A step-by-step guide to installing the Eclipse IDE on your local workstation for Joomla! development. This also guides you through installing XAMPP/MAMP on your computer.&lt;br /&gt;
* [http://community.joomla.org/blogs/community/828-webinar-using-eclipse-for-joomla-development.html Using Eclipse for Joomla! Development] Video webinar demonstrating overview of Eclipse features for Joomla! development&lt;br /&gt;
&lt;br /&gt;
==== If you want to work on Documentation ====&lt;br /&gt;
* To edit this Documentation Wiki, you will need a user account. If you don't already have one, you may register on [[Special:UserLogin]]. While a brand new user account won't give you all the permissions you'd get with a confirmed and &amp;quot;elevated&amp;quot; account, you will be able to edit most pages.&lt;br /&gt;
* Get your user account a few days before and make sure that you are able to sign in since the automatic authorization system can lock some people out.&lt;br /&gt;
* If you'd like something to be edited, but you're not sure what to write exactly, use talk pages to add comments to pages.&lt;br /&gt;
* During the PBF, several experienced Wiki editors will be available in the Skype chat to help you.&lt;br /&gt;
{{:Documentation wiki}}&lt;br /&gt;
&lt;br /&gt;
===== Help Screens =====&lt;br /&gt;
* There are help screens that still need to be made for 2.5 [[Help17:Help screens]]&lt;br /&gt;
&lt;br /&gt;
=== Pizza ===&lt;br /&gt;
We are offering pizza and soda for pre-registered groups. We aren’t setting a specific maximum, but please don’t go crazy with it. Get enough so there’s plenty for everyone, but not a week’s worth of pizza and soda leftovers for everyone. Contact Andrea Tarr (andrea.tarr@joomla.org) before the event to register and get details.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
&lt;br /&gt;
If you want to get people together and have a venue to share, please add it below. Share as much as possible details like exact location, url for more information about the venue, ways to register, date and time the venue is available etc.&lt;br /&gt;
&lt;br /&gt;
If you set up a location please send contact information to Andy Tarr (andrea.tarr@joomla.org). Feel free to contact her with any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Europe ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== North America ===&lt;br /&gt;
&lt;br /&gt;
 [http://www.joomlanewengland.org Joomla User Group New England]&lt;br /&gt;
 Marlboro College Graduate School&lt;br /&gt;
 28 Vernon Street&lt;br /&gt;
 Brattleboro, VT 05301&lt;br /&gt;
 Contact: Andrea Tarr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.joomlapdx.com/ Portland Joomla! User Group]&lt;br /&gt;
Location: TBD&lt;br /&gt;
Contact: Ben Sandberg&lt;br /&gt;
&lt;br /&gt;
=== South America ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Asia/Pacific ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Africa ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Middle East ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Virtual===&lt;br /&gt;
====Skype Chat====&lt;br /&gt;
We have set up a Skype chat for all attendees of the PBF. Skype is invitation only. This is the same Skype chat we used in December. To get an invitation, email your Skype name to Andy Tarr (andrea.tarr@joomla.org). To make sure you can get in, get your invitation and log in before the day of the PBF.&lt;br /&gt;
&lt;br /&gt;
If you don't already have Skype, you can download it for free from [http://skype.com Skype].&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
=== For write access to this wiki ===&lt;br /&gt;
To get write access to this wiki you will need to [[Special:Userlogin|register here first]]. Please be aware that the registration process requires a valid email address. This is the same login for updating Joomla documentation.&lt;br /&gt;
&lt;br /&gt;
=== At a physical location ===&lt;br /&gt;
If you wish to be present at one of the physical locations listed above then you must register in advance because space most likely is limited.  Registrations are the responsibility of the individual location organizers and you should click on the appropriate link above for more information.&lt;br /&gt;
&lt;br /&gt;
=== Taking bugs, tasks and pizza ===&lt;br /&gt;
&lt;br /&gt;
Please check the [http://docs.joomla.org/Pizza_Bugs_and_Fun_March_3,_2012#Organization.2C_logistics_and_communications Organization, logistics and communications section] for detail on how to get involved in working on tasks.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* All code must be made available under the [http://www.gnu.org/licenses/gpl-2.0.html General Public Licence version 2].&lt;br /&gt;
* All documentation contributions must be made available under the [[JEDL|Joomla! Electronic Documentation License]]. Further information on the JEDL is available in the [[JEDL/FAQ|JEDL Frequently Asked Questions]]&lt;br /&gt;
* No advertising or self-promotion will be allowed.  This includes back links to your website or anyone else's.  The one exception is that if you have made a contribution then feel free to add your name and an optional link to your website to the [[Pizza Bugs and Fun 2011/Contributors List|Contributors List]]&lt;br /&gt;
* All contributions must be in English.  Note that the official language of the Joomla! project is British English.&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
Q: Where is the SVN for Joomla?&lt;br /&gt;
&lt;br /&gt;
A: http://joomlacode.org/svn/joomla/development/trunk&lt;br /&gt;
&lt;br /&gt;
Q: Which one is 2.5?&lt;br /&gt;
&lt;br /&gt;
A: It is the main trunk&lt;br /&gt;
&lt;br /&gt;
Q: Any known issues with JForge and Chrome on Windows?&lt;br /&gt;
&lt;br /&gt;
A: It have been seen that browsing the JForge tracker, Chrome may ask for a missing plugin (windows media player). No workaround for this is yet known.&lt;br /&gt;
&lt;br /&gt;
==Contributors==&lt;br /&gt;
{{:Pizza Bugs and Fun March 3, 2012/Contributors List}}&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-12-08T19:39:29Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: /* Zips */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}} and {{JVer|2.5}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;2.5&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;2.5&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip] (NOTE: This package is designed for Joomla! 1.6 only.)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
*[[User:HobbesPDX|Ben Sandberg]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-12-08T19:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: adding 2.5!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}} and {{JVer|2.5}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;2.5&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HelloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;2.5&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip] (NOTE: The package has not been updated with the above Joomla! 1.7 compatibility)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
*[[User:HobbesPDX|Ben Sandberg]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-10-02T19:30:41Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Removed errant comment.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip] (NOTE: The package has not been updated with the above Joomla! 1.7 compatibility)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
*[[User:HobbesPDX|Ben Sandberg]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-10-02T19:29:34Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: added myself to the list of contributors. ;-)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip] (NOTE: The package has not been updated with the above Joomla! 1.7 compatibility)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
*[[User:HobbesPDX|Ben Sandberg]]&lt;br /&gt;
On Installation of that component, the &amp;quot;Error Building Admin Menus&amp;quot; warning message is getting appear...&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/User:HobbesPDX</id>
		<title>User:HobbesPDX</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/User:HobbesPDX"/>
				<updated>2011-10-02T19:27:00Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.  I'm Ben, a Joomla! Evangelist.&lt;br /&gt;
&lt;br /&gt;
[http://www.pdxfixit.com/ PDXfixIT]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/User:HobbesPDX</id>
		<title>User:HobbesPDX</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/User:HobbesPDX"/>
				<updated>2011-10-02T19:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Created page with &amp;quot;Hi.  I'm Ben, a Joomla! Evangelist.  [http://www.pdxfixit.com/]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi.  I'm Ben, a Joomla! Evangelist.&lt;br /&gt;
&lt;br /&gt;
[http://www.pdxfixit.com/]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-10-02T19:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: fixed package type, added note to Zips section, to let user know not to expect the visible code.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip] (NOTE: The package has not been updated with the above Joomla! 1.7 compatibility)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
On Installation of that component, the &amp;quot;Error Building Admin Menus&amp;quot; warning message is getting appear...&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server</id>
		<title>J2.5:Developing a MVC Component/Adding an update server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J2.5:Developing_a_MVC_Component/Adding_an_update_server"/>
				<updated>2011-10-02T19:23:11Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: updated to include 1.7 icon, added update nodes for each Joomla! version, and added See Also section with a link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This tutorial is for {{JVer|1.6}} and {{JVer|1.7}}&lt;br /&gt;
&lt;br /&gt;
== Articles in this series ==&lt;br /&gt;
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Contents}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.&lt;br /&gt;
&lt;br /&gt;
== Adding a updateserver definition ==&lt;br /&gt;
To add a updateserver functionality adjust the helloworld.xml to look like this.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld.xml''&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;extension type=&amp;quot;component&amp;quot; version=&amp;quot;1.6.0&amp;quot; method=&amp;quot;upgrade&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;name&amp;gt;COM_HELLOWORLD&amp;lt;/name&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
	&amp;lt;creationDate&amp;gt;November 2009&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
	&amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
	&amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
	&amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
	&amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
	&amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
	&amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
	&amp;lt;version&amp;gt;0.0.15&amp;lt;/version&amp;gt;&lt;br /&gt;
	&amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
	&amp;lt;description&amp;gt;COM_HELLOWORLD_DESCRIPTION&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Runs on install/uninstall/update; New in 1.6 --&amp;gt;&lt;br /&gt;
	&amp;lt;scriptfile&amp;gt;script.php&amp;lt;/scriptfile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;install&amp;gt; &amp;lt;!-- Runs on install --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/install.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/install&amp;gt;&lt;br /&gt;
	&amp;lt;uninstall&amp;gt; &amp;lt;!-- Runs on uninstall --&amp;gt;&lt;br /&gt;
		&amp;lt;sql&amp;gt;&lt;br /&gt;
			&amp;lt;file driver=&amp;quot;mysql&amp;quot; charset=&amp;quot;utf8&amp;quot;&amp;gt;sql/uninstall.mysql.utf8.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
		&amp;lt;/sql&amp;gt;&lt;br /&gt;
	&amp;lt;/uninstall&amp;gt;&lt;br /&gt;
	&amp;lt;update&amp;gt; &amp;lt;!-- Runs on update; New in 1.6 --&amp;gt;&lt;br /&gt;
		&amp;lt;schemas&amp;gt;&lt;br /&gt;
			&amp;lt;schemapath type=&amp;quot;mysql&amp;quot;&amp;gt;sql/updates/mysql&amp;lt;/schemapath&amp;gt;&lt;br /&gt;
		&amp;lt;/schemas&amp;gt;&lt;br /&gt;
	&amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
	&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
		to copy FROM in the package to install therefore files copied&lt;br /&gt;
		in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
	&amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;folder&amp;gt;language&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;media destination=&amp;quot;com_helloworld&amp;quot; folder=&amp;quot;media&amp;quot;&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;images&amp;lt;/folder&amp;gt;&lt;br /&gt;
	&amp;lt;/media&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;administration&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
		&amp;lt;menu img=&amp;quot;../media/com_helloworld/images/tux-16x16.png&amp;quot;&amp;gt;COM_HELLOWORLD_MENU&amp;lt;/menu&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
			to copy FROM in the package to install therefore files copied&lt;br /&gt;
			in this section are copied from /admin/ in the package --&amp;gt;&lt;br /&gt;
		&amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;!-- Admin Main File Copy Section --&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;config.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;access.xml&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;helloworld.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
			&amp;lt;!-- SQL files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;sql&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- tables files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;tables&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- models files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;models&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- views files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;views&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- controllers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;controllers&amp;lt;/folder&amp;gt;&lt;br /&gt;
			&amp;lt;!-- helpers files section --&amp;gt;&lt;br /&gt;
			&amp;lt;folder&amp;gt;helpers&amp;lt;/folder&amp;gt;&lt;br /&gt;
		&amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;languages folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
			&amp;lt;language tag=&amp;quot;en-GB&amp;quot;&amp;gt;language/en-GB/en-GB.com_helloworld.sys.ini&amp;lt;/language&amp;gt;&lt;br /&gt;
		&amp;lt;/languages&amp;gt;&lt;br /&gt;
	&amp;lt;/administration&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- UPDATESERVER DEFINITION --&amp;gt;&lt;br /&gt;
	&amp;lt;updateservers&amp;gt;&lt;br /&gt;
		&amp;lt;!-- Note: No spaces or linebreaks allowed between the server tags --&amp;gt;&lt;br /&gt;
		&amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;1&amp;quot; name=&amp;quot;HelloWorld Update Site&amp;quot;&amp;gt;http://yourdomain.com/update/helloworld-update.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
	&amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You also need to put a XML-file on your server which contains all update-informations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;helloworld-update.xml&amp;quot;&amp;gt;&lt;br /&gt;
''helloworld-update.xml''&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;updates&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;tgz&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
   &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.0&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;tgz&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.0-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;tgz&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
    &amp;lt;update&amp;gt;&lt;br /&gt;
      &amp;lt;name&amp;gt;HelloWorld&amp;lt;/name&amp;gt;&lt;br /&gt;
      &amp;lt;description&amp;gt;HelloWorld Component&amp;lt;/description&amp;gt;&lt;br /&gt;
      &amp;lt;element&amp;gt;com_helloworld&amp;lt;/element&amp;gt;&lt;br /&gt;
      &amp;lt;type&amp;gt;component&amp;lt;/type&amp;gt;&lt;br /&gt;
      &amp;lt;version&amp;gt;1.5.1&amp;lt;/version&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;infourl title=&amp;quot;HalloWorld URL&amp;quot;&amp;gt;http://yourdomain.com&amp;lt;/infourl&amp;gt;&lt;br /&gt;
      &amp;lt;downloads&amp;gt;&lt;br /&gt;
         &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;tgz&amp;quot;&amp;gt;http://yourdomain.com/files/com_helloworld-1.5.1-final.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
      &amp;lt;/downloads&amp;gt;&lt;br /&gt;
      &amp;lt;tags&amp;gt;&lt;br /&gt;
         &amp;lt;tag&amp;gt;some-tag&amp;lt;/tag&amp;gt;&lt;br /&gt;
      &amp;lt;/tags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;maintainer&amp;gt;HelloWorld Inc.&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
      &amp;lt;maintainerurl&amp;gt;http://yourdomain.com&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
      &amp;lt;section&amp;gt;some-section&amp;lt;/section&amp;gt;&lt;br /&gt;
      &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.7&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/update&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/updates&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add a new update-node every time you publish a new release, as well as for each Joomla! version.  (you will need a distinct update node for each targetplatform)&lt;br /&gt;
&lt;br /&gt;
== Zips ==&lt;br /&gt;
Download the zip file for this Part:&lt;br /&gt;
[http://www.leyar.com/joomlaorg/part17.zip]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Deploying an Update Server]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
*[[User:Cdemko|Christophe Demko]]&lt;br /&gt;
*[[User:oaksu|Ozgur Aksu]]&lt;br /&gt;
On Installation of that component, the &amp;quot;Error Building Admin Menus&amp;quot; warning message is getting appear...&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/Deploying_an_Update_Server</id>
		<title>Deploying an Update Server</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/Deploying_an_Update_Server"/>
				<updated>2011-10-02T19:17:02Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: CDATA clarification for descriptions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{RightTOC}}&lt;br /&gt;
&lt;br /&gt;
This tutorial is for {{JVer|1.6}} and {{JVer|1.7}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This tutorial is designed to teach developers how to create an update server for integration with the update system introduced in Joomla! 1.6.  By adding an update server listing to your extension's manifest, developers enable users to update their extensions via the [[Help16:Extensions Extension Manager Update|Extension Manager's Update]] view with only a few clicks.&lt;br /&gt;
&lt;br /&gt;
= Defining an update server =&lt;br /&gt;
In order to use this feature, an update server must be defined in your extension's manifest.  This definition can be used in all Joomla! 1.6 and 1.7 compatible extensions but is not available for templates.  You can use two options for your server type; collection or extension.  These will be explained in detail shortly.  The update server is defined as follows for each type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;updateservers&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;collection&amp;quot;&amp;gt;http://example.com/list.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
    &amp;lt;server type=&amp;quot;extension&amp;quot; priority=&amp;quot;2&amp;quot; name=&amp;quot;My Extension's Updates&amp;quot;&amp;gt;http://example.com/extension.xml&amp;lt;/server&amp;gt;&lt;br /&gt;
 &amp;lt;/updateservers&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Multiple servers can be defined within the &amp;lt;updateservers&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
= Server types =&lt;br /&gt;
== Collection ==&lt;br /&gt;
The collection server type allows developers to define an extension's manifest to pull updates from a collection.  This type of server can be used if the developer wants to define all of their extension's updates in a single file (not recommended) or if their extension has multiple sub-extensions which are not distributed or updated at the same time (such as a package extension type).  The below example is the collection definition used by the updater when processing core Joomla! updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;extensionset name=&amp;quot;Joomla Core&amp;quot; description=&amp;quot;Joomla! Core&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;extension name=&amp;quot;Joomla&amp;quot; element=&amp;quot;joomla&amp;quot; type=&amp;quot;file&amp;quot; version=&amp;quot;1.7.0&amp;quot; detailsurl=&amp;quot;http://update.joomla.org/core/extension.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/extensionset&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All definitions must be defined between &amp;lt;extensionset&amp;gt; tags in your collection manifest.  The &amp;lt;extensionset&amp;gt; tag has two optional parameters; name and description.  For each extension that this collection references, a separate &amp;lt;extension&amp;gt; tag is required.  The &amp;lt;extension&amp;gt; tag has the following parameters, all of which are required for updates to properly process:&lt;br /&gt;
&lt;br /&gt;
* '''name''' - The name of the extension&lt;br /&gt;
* '''element''' - The untranslated extension name i.e. mod_custom&lt;br /&gt;
* '''type''' - The extension type (component, module, plugin, etc.)&lt;br /&gt;
* '''version''' - The latest version of the extension&lt;br /&gt;
* '''detailsurl''' - The URL of the XML file which contains that extension's individual update definitions&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
The extension server type allows developers to define an extension's manifest to pull updates from a single extension's manifest.  All collection manifests eventually point to this XML file.  All updates in this file must be defined after an &amp;lt;updates&amp;gt; tag at the beginning of the file.  The below example is the update definition for the Joomla! 1.7.0 release:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 &amp;lt;update&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;Joomla! 1.7&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Joomla! 1.7 CMS&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;element&amp;gt;joomla&amp;lt;/element&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;version&amp;gt;1.7.0&amp;lt;/version&amp;gt;&lt;br /&gt;
    &amp;lt;infourl title=&amp;quot;Joomla!&amp;quot;&amp;gt;http://www.joomla.org/&amp;lt;/infourl&amp;gt;&lt;br /&gt;
    &amp;lt;downloads&amp;gt;&lt;br /&gt;
        &amp;lt;downloadurl type=&amp;quot;full&amp;quot; format=&amp;quot;zip&amp;quot;&amp;gt;http://joomlacode.org/gf/download/frsrelease/15279/66552/Joomla_1.6.5_to_1.7.0_Package.zip&amp;lt;/downloadurl&amp;gt;&lt;br /&gt;
    &amp;lt;/downloads&amp;gt;&lt;br /&gt;
    &amp;lt;tags&amp;gt;&lt;br /&gt;
        &amp;lt;tag&amp;gt;stable&amp;lt;/tag&amp;gt;&lt;br /&gt;
    &amp;lt;/tags&amp;gt;&lt;br /&gt;
    &amp;lt;maintainer&amp;gt;Sam Moffatt&amp;lt;/maintainer&amp;gt;&lt;br /&gt;
    &amp;lt;maintainerurl&amp;gt;http://sammoffatt.com.au&amp;lt;/maintainerurl&amp;gt;&lt;br /&gt;
    &amp;lt;section&amp;gt;Testing&amp;lt;/section&amp;gt;&lt;br /&gt;
    &amp;lt;targetplatform name=&amp;quot;joomla&amp;quot; version=&amp;quot;1.6&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/update&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following section describes the elements of a single update entity.&lt;br /&gt;
&lt;br /&gt;
* '''name''' - The name of the extension, this name will appear in the Name column of the Extension Manager's Update view (required)&lt;br /&gt;
* '''description''' - A short description of the extension (optional) -- if you choose to use &amp;lt;![CDATA[]]&amp;gt;, double-quotes will break the HTML formatting.  Use single quotes with your HTML entities.&lt;br /&gt;
* '''element''' - The installed name of the extension (required)&lt;br /&gt;
* '''type''' - The type of extension (component, module, plugin, etc.) (required)&lt;br /&gt;
* '''folder''' - Specific to plugins, this tag describes the type of plugin being updated (content, system, etc.) (required for plugins)&lt;br /&gt;
* '''client_id''' - The client_id of the extension; 0 for site and 1 for administrator (optional)&lt;br /&gt;
* '''version''' - The version of the release (required)&lt;br /&gt;
* '''infourl''' - A URL to point users to containing information about the update (optional)&lt;br /&gt;
* '''downloads''' - The section which lists all download locations&lt;br /&gt;
** '''downloadurl''' - The URL to download the extension from; the &amp;lt;downloadurl&amp;gt; tag has two required parameters:&lt;br /&gt;
*** '''type''' - The type of package (full or upgrade)&lt;br /&gt;
*** '''format''' - The format of the package (zip, tar, etc.)&lt;br /&gt;
* '''tags''' - Optional (unknown use)&lt;br /&gt;
* '''maintainer''' - The name of the extension maintainer (similar to the &amp;lt;author&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* '''maintainerurl''' - The website of the extension maintainer (similar to the &amp;lt;authorUrl&amp;gt; tag in a manifest) (optional)&lt;br /&gt;
* '''section''' - Optional (unknown use)&lt;br /&gt;
* '''targetplatform''' - A tag to define platform requirements, requires the following elements&lt;br /&gt;
** '''name''' - The name of the platform dependency; as of this writing, it should ONLY be &amp;quot;joomla&amp;quot;&lt;br /&gt;
** '''version''' - The version of Joomla! the extension supports&lt;br /&gt;
*** '''Note:''' If your extension is both Joomla! 1.6 and 1.7 compatible, you will be required to have two &amp;lt;update&amp;gt; definitions; one with the targetplaform being 1.6 and the other being 1.7 due to the manner in which the updater checks the version&lt;br /&gt;
&lt;br /&gt;
A separate &amp;lt;update&amp;gt; definition will be required for each version of your extension you release.&lt;br /&gt;
&lt;br /&gt;
= Supporting Tools =&lt;br /&gt;
Maintaining your update server files can be difficult depending on the manner in which you set up your files.  An extension which can help you to maintain this is the Akeeba Release System, available free of charge from https://www.akeebabackup.com&lt;br /&gt;
&lt;br /&gt;
= Contributors =&lt;br /&gt;
*[[User:mbabker|Michael Babker]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5 talk:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T23:22:57Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: whoops.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Renaming Part 4 ==&lt;br /&gt;
I checked out the comment below. ;-) Certainly, the multitude of hello(s) is confusing. What I did is to rename most everything.&lt;br /&gt;
&lt;br /&gt;
Whenever there's something like HelloWhateverHello, the first Hello represents the component front-end, and the second represents the view/model. By the way, each view has its own model, which I think is pretty much standard MVC architecture. On the other hand, one controller can control several views, although this example doesn't do so.&lt;br /&gt;
&lt;br /&gt;
Conversely, if you see HellosWhateverHello or HellosWhateverHellos, the first Hellos represents the adminstrative back-end, and the Hello or Hellos at the end refers to the view for editing one greeting or for listing all greetings, respectively. (Replace *Whatever* with Model, View, or Controller as appropriate.)&lt;br /&gt;
&lt;br /&gt;
So, I renamed all this to look like FrontWhateverContent, AdminWhateverEdit, AdminWhateverList, and so on. Then I had to rename directories and files as well, so that models/hello.php became models/content.php in the front-end and models/edit.php in the back-end. Likewise, views/hello/ becomes views/content/ in the front-end and views/edit in the back-end. Also, in the back-end only, models/hellos.php &amp;amp; views/hellos/ become models/list.php &amp;amp; views/list. Lastly, I changed controllers/hello.php to controllers/edit.php, to reflect the change from HellosControllerHello to AdminControllerEdit.&lt;br /&gt;
&lt;br /&gt;
Hope this clears things up a bit. It's a tedious refactoring exercise to do all this renaming, but it *is* doable. Good luck.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello&amp;quot; Overloaded ==&lt;br /&gt;
&lt;br /&gt;
I'm not sure if anybody checks this, but I'm having a difficult time making my own component out of this document. &lt;br /&gt;
&lt;br /&gt;
The first three chapters of this documentation are great.  They are simple and to the point.  The fourth, this page, is very confusing.  &lt;br /&gt;
&lt;br /&gt;
First off, the word &amp;quot;hello&amp;quot; is way over loaded.  In the Creating an Admin Interface there are two models and two views:&lt;br /&gt;
Hello  and Hellos&lt;br /&gt;
&lt;br /&gt;
It's impossible to know why we need two different models.  Why cant we use one model and two views?&lt;br /&gt;
Its totally impossible to understand which one gets called when.&lt;br /&gt;
&lt;br /&gt;
I have discovered there are a lot of name conventions used here, but after reading this document over and over, it's still very difficult to know what the conventions are.  This is probably stemming from &amp;quot;hello&amp;quot; being way too overloaded.&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;get()&amp;quot; in JView is called in both views.  It is supposed to automatically know which model to use, and which method to call.  However, I don't think I followed the naming convention correctly, as it simply is not working (I get empty data with no error).&lt;br /&gt;
&lt;br /&gt;
I think I could untangle the naming conventions myself, but with &amp;quot;hello&amp;quot; so overloaded in this example, I am having no luck guessing.&lt;br /&gt;
&lt;br /&gt;
== Great up to chapter 3 ==&lt;br /&gt;
&lt;br /&gt;
The documentation was great upto chapter 3.  Got confused in 4th chapter.&lt;br /&gt;
&lt;br /&gt;
Also, this doesn't cover how to create sub menus for a component [http://www.vojtechovsky.net/joomla/component/tutorial-joomla-1.5-free-component.png See example]&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvement ==&lt;br /&gt;
&lt;br /&gt;
*This is a really long and tedious tutorial with a lot of very useful information in it. I think it would help to break it down into parts or creating separate tutorials covering this material.&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== REALLY GOOD DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
Apart from a small error in part 4 which I have now corrected&lt;br /&gt;
&lt;br /&gt;
did read: &lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;gt;controller=hello&amp;gt;task=edit&amp;gt;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
now reads:&lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;amp;controller=hello&amp;amp;task=edit&amp;amp;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Jamesconroyuk|James Conroy]] 16:29, 16 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Excellent documentation, but could use a slight extension ==&lt;br /&gt;
&lt;br /&gt;
Have been able to create components using this set of tutorials, but am missing how to use non-string based data in the administrator interface.&lt;br /&gt;
&lt;br /&gt;
The admin form only has one field (a string) and it might be useful to have either examples of, or a link to some other examples of how to view / capture other types of data such as :&lt;br /&gt;
&lt;br /&gt;
Checkboxes (boolean)&lt;br /&gt;
Dropdown menus / radio button (int or string)&lt;br /&gt;
&lt;br /&gt;
While it is easy to add the HTML form components (and even populate them with the values from the model), it isn't immediately clear how to recapture the data of these alternative types.&lt;br /&gt;
&lt;br /&gt;
There is another tutorial I have seen on this wiki that has the &amp;quot;build in a rich editor&amp;quot; function, could use a link from this page.&lt;br /&gt;
&lt;br /&gt;
[[User:craigmoore|Craig Moore]] 13:06, 09 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Really a great tutorial ... but too many hello.php's ==&lt;br /&gt;
&lt;br /&gt;
First of all, great tutorial, a very good effort to explain the basics.&lt;br /&gt;
&lt;br /&gt;
Maybe just my problem:&lt;br /&gt;
I personally prefer to edit several files at a time, what means, i have 10-20 tabs open in my editor (UltraEdit).&lt;br /&gt;
In my case that means, that my editor tab-bar looks like:&lt;br /&gt;
&lt;br /&gt;
hello.php - controller.php - hello.php - hello.php - hello.php - controller.php - hellos.php - and so on ...&lt;br /&gt;
&lt;br /&gt;
I would kiss the shoes of everyone who would:&lt;br /&gt;
&lt;br /&gt;
1.) precisely explain naming conventions for files of components (which file may, which file must be called hello.php)&lt;br /&gt;
&lt;br /&gt;
2.) resolve the hello.php-maze in this tutorial with more speaking filenames&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the authors, best regards and a hello to everyone&lt;br /&gt;
&lt;br /&gt;
Jochen&lt;br /&gt;
&lt;br /&gt;
== Good Tutorial ==&lt;br /&gt;
&lt;br /&gt;
Suggestion for improvement.&lt;br /&gt;
&lt;br /&gt;
I also found Part 4 hard to follow and lacking explanation of why various names/paths/parameters were chosen. For a beginner trying to understand Joomla! MVC conventions I found another component backend howto that gave more of the details I was looking for: [http://www.scribd.com/doc/11515210/Joomla-Component-Development-Backend]&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone else.&lt;br /&gt;
-Mike&lt;br /&gt;
[[User:M3t00|M3t00]] 15:55, 10 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== RE: Renaming Part 4 ==&lt;br /&gt;
&lt;br /&gt;
I'm actually even more confused now.&lt;br /&gt;
&lt;br /&gt;
Only by reading through this discussion did it occur to me that you need to use multiple views to handle the various tasks in the controller.  That seems like an important concept that is not entirely obvious to someone trying to learn the joomla framework.  And yet now that I recognize the concept, it's not obvious what the best practices would be to implement multiple views.  I'll work on it.&lt;br /&gt;
&lt;br /&gt;
Despite that, this is still an extremely valuable tutorial -- especially considering that much of the rest of the API documentation is sparse at best.  The entire joomla documentation in general could definitely benefit from a bit of a re-org.&lt;br /&gt;
&lt;br /&gt;
EDIT:  OK. So after reading through part 4 of the tutorial again, it is clear to me about the multiple views.  So, looking back, it would have been valuable to explain that in the introduction.  Something like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Now we will create an administrator section to create the greetings.  It uses 2 views.  The first view, called Hellos, will present a list of greetings with the ability to add new ones or remove old ones.  The second view will allow the user to edit each greeting.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
That would have helped tremendously.  In any case, I got it now.  I feel a little stupid for missing that the first time around, but maybe it was because it was late at night.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Component Hello, Site Hello, Admin Hellos, Admin Hello ==&lt;br /&gt;
&lt;br /&gt;
Chapters 1 and 2 were easy to follow. Chapter 3 contains some glitches that took me some time to understand but reading this chapter made everything really confusing. It took me a time to realise the Hello's, just my subject with only the focus clarifies already some impact. After re- and re-re reading it becomes clear to me what is meant. After re-reading the reason for using Hellos (as an Admin List) became clear and re-re- reading made the Admin single view/tmpl Hello obvious again. Why not rename these to:&lt;br /&gt;
&lt;br /&gt;
* Manage_Hello_List&lt;br /&gt;
* Manage_Hello_Item&lt;br /&gt;
&lt;br /&gt;
This would make everything much more readable, would set a clear context and increase the ease of understanding.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 12:37, 3 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Splitting up article into two articles ==&lt;br /&gt;
&lt;br /&gt;
If the writers have no objection I propose to split this chapter into two. There are multiple good reasons for doing so but the most important three are the following:&lt;br /&gt;
*This chapter is huge making reading a tedious job, overwhelming and scaring away the once that this article is intended for.&lt;br /&gt;
*This article has two logical section so braking it at '''Adding Functionality''' doesn't harm any body and helps newbies in achieving results. Being able to check a chapter and visually see the intermediate result is always the best motivation.&lt;br /&gt;
*Technically the same split at '''Adding Functionality''' is making a difference in know-how. the first part is not really new when you followed the ''site'' part examples '''Developing a Model-View-Controller Component 1, 2 and 3'''. Old wine in new bottles. The second part really goes into depth and requires good basic programming skills and a general understanding of HTML form handling.&lt;br /&gt;
If no objections I will initiate this spilt soon.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 07:34, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think splitting it is a good idea and should improve readability.  I look forward to seeing your improvements. [[User:Chris Davenport|Chris Davenport]] 08:51, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Confusing ==&lt;br /&gt;
&lt;br /&gt;
I agree Part 4 gets confusing. I see what it is attempting to demonstrate but it is confusing to jump into a completely new example rather than use an example from the onset that could cover the details of the controls in the Admin area. &lt;br /&gt;
&lt;br /&gt;
Maybe choosing a slightly more complex example than 'Hello world!' from the beginning?&lt;br /&gt;
&lt;br /&gt;
Will be good to see this article when it's been updated!&lt;br /&gt;
----&lt;br /&gt;
I have to add my agreement to this -- the Hello World was a fine, basic example -- no need to crummy up the lesson with this sudden deviation into an entirely different example.&lt;br /&gt;
&lt;br /&gt;
This article should be moved to its' own section, IMHO.&lt;br /&gt;
--[[User:HobbesPDX|HobbesPDX]] 23:21, 6 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hint in 'Mapping' section ==&lt;br /&gt;
&lt;br /&gt;
I'm removing the so-called hint from the section titled 'Mapping a Joomla! MVC component from the example.'&lt;br /&gt;
&lt;br /&gt;
I've never seen the 'registered' method, and I think it's bogus.&lt;br /&gt;
&lt;br /&gt;
Please respond if I'm wrong.&lt;br /&gt;
&lt;br /&gt;
[[User:HobbesPDX|HobbesPDX]] 20:19, 6 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Move 'sharing template parts' note to another article? ==&lt;br /&gt;
&lt;br /&gt;
I'd like to suggest to the community, that the expansive note, in section 3.2.3, regarding sharing template/view elements, using include/require, should be moved to another article.&lt;br /&gt;
&lt;br /&gt;
It's a very helpful point, but I feel it adds unnecessary and extra information to an already complex document.&lt;br /&gt;
&lt;br /&gt;
Discuss. :-)&lt;br /&gt;
&lt;br /&gt;
--[[User:HobbesPDX|HobbesPDX]] 21:00, 6 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5 talk:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T23:21:50Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: Article should be moved.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Renaming Part 4 ==&lt;br /&gt;
I checked out the comment below. ;-) Certainly, the multitude of hello(s) is confusing. What I did is to rename most everything.&lt;br /&gt;
&lt;br /&gt;
Whenever there's something like HelloWhateverHello, the first Hello represents the component front-end, and the second represents the view/model. By the way, each view has its own model, which I think is pretty much standard MVC architecture. On the other hand, one controller can control several views, although this example doesn't do so.&lt;br /&gt;
&lt;br /&gt;
Conversely, if you see HellosWhateverHello or HellosWhateverHellos, the first Hellos represents the adminstrative back-end, and the Hello or Hellos at the end refers to the view for editing one greeting or for listing all greetings, respectively. (Replace *Whatever* with Model, View, or Controller as appropriate.)&lt;br /&gt;
&lt;br /&gt;
So, I renamed all this to look like FrontWhateverContent, AdminWhateverEdit, AdminWhateverList, and so on. Then I had to rename directories and files as well, so that models/hello.php became models/content.php in the front-end and models/edit.php in the back-end. Likewise, views/hello/ becomes views/content/ in the front-end and views/edit in the back-end. Also, in the back-end only, models/hellos.php &amp;amp; views/hellos/ become models/list.php &amp;amp; views/list. Lastly, I changed controllers/hello.php to controllers/edit.php, to reflect the change from HellosControllerHello to AdminControllerEdit.&lt;br /&gt;
&lt;br /&gt;
Hope this clears things up a bit. It's a tedious refactoring exercise to do all this renaming, but it *is* doable. Good luck.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello&amp;quot; Overloaded ==&lt;br /&gt;
&lt;br /&gt;
I'm not sure if anybody checks this, but I'm having a difficult time making my own component out of this document. &lt;br /&gt;
&lt;br /&gt;
The first three chapters of this documentation are great.  They are simple and to the point.  The fourth, this page, is very confusing.  &lt;br /&gt;
&lt;br /&gt;
First off, the word &amp;quot;hello&amp;quot; is way over loaded.  In the Creating an Admin Interface there are two models and two views:&lt;br /&gt;
Hello  and Hellos&lt;br /&gt;
&lt;br /&gt;
It's impossible to know why we need two different models.  Why cant we use one model and two views?&lt;br /&gt;
Its totally impossible to understand which one gets called when.&lt;br /&gt;
&lt;br /&gt;
I have discovered there are a lot of name conventions used here, but after reading this document over and over, it's still very difficult to know what the conventions are.  This is probably stemming from &amp;quot;hello&amp;quot; being way too overloaded.&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;get()&amp;quot; in JView is called in both views.  It is supposed to automatically know which model to use, and which method to call.  However, I don't think I followed the naming convention correctly, as it simply is not working (I get empty data with no error).&lt;br /&gt;
&lt;br /&gt;
I think I could untangle the naming conventions myself, but with &amp;quot;hello&amp;quot; so overloaded in this example, I am having no luck guessing.&lt;br /&gt;
&lt;br /&gt;
== Great up to chapter 3 ==&lt;br /&gt;
&lt;br /&gt;
The documentation was great upto chapter 3.  Got confused in 4th chapter.&lt;br /&gt;
&lt;br /&gt;
Also, this doesn't cover how to create sub menus for a component [http://www.vojtechovsky.net/joomla/component/tutorial-joomla-1.5-free-component.png See example]&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvement ==&lt;br /&gt;
&lt;br /&gt;
*This is a really long and tedious tutorial with a lot of very useful information in it. I think it would help to break it down into parts or creating separate tutorials covering this material.&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== REALLY GOOD DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
Apart from a small error in part 4 which I have now corrected&lt;br /&gt;
&lt;br /&gt;
did read: &lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;gt;controller=hello&amp;gt;task=edit&amp;gt;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
now reads:&lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;amp;controller=hello&amp;amp;task=edit&amp;amp;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Jamesconroyuk|James Conroy]] 16:29, 16 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Excellent documentation, but could use a slight extension ==&lt;br /&gt;
&lt;br /&gt;
Have been able to create components using this set of tutorials, but am missing how to use non-string based data in the administrator interface.&lt;br /&gt;
&lt;br /&gt;
The admin form only has one field (a string) and it might be useful to have either examples of, or a link to some other examples of how to view / capture other types of data such as :&lt;br /&gt;
&lt;br /&gt;
Checkboxes (boolean)&lt;br /&gt;
Dropdown menus / radio button (int or string)&lt;br /&gt;
&lt;br /&gt;
While it is easy to add the HTML form components (and even populate them with the values from the model), it isn't immediately clear how to recapture the data of these alternative types.&lt;br /&gt;
&lt;br /&gt;
There is another tutorial I have seen on this wiki that has the &amp;quot;build in a rich editor&amp;quot; function, could use a link from this page.&lt;br /&gt;
&lt;br /&gt;
[[User:craigmoore|Craig Moore]] 13:06, 09 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Really a great tutorial ... but too many hello.php's ==&lt;br /&gt;
&lt;br /&gt;
First of all, great tutorial, a very good effort to explain the basics.&lt;br /&gt;
&lt;br /&gt;
Maybe just my problem:&lt;br /&gt;
I personally prefer to edit several files at a time, what means, i have 10-20 tabs open in my editor (UltraEdit).&lt;br /&gt;
In my case that means, that my editor tab-bar looks like:&lt;br /&gt;
&lt;br /&gt;
hello.php - controller.php - hello.php - hello.php - hello.php - controller.php - hellos.php - and so on ...&lt;br /&gt;
&lt;br /&gt;
I would kiss the shoes of everyone who would:&lt;br /&gt;
&lt;br /&gt;
1.) precisely explain naming conventions for files of components (which file may, which file must be called hello.php)&lt;br /&gt;
&lt;br /&gt;
2.) resolve the hello.php-maze in this tutorial with more speaking filenames&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the authors, best regards and a hello to everyone&lt;br /&gt;
&lt;br /&gt;
Jochen&lt;br /&gt;
&lt;br /&gt;
== Good Tutorial ==&lt;br /&gt;
&lt;br /&gt;
Suggestion for improvement.&lt;br /&gt;
&lt;br /&gt;
I also found Part 4 hard to follow and lacking explanation of why various names/paths/parameters were chosen. For a beginner trying to understand Joomla! MVC conventions I found another component backend howto that gave more of the details I was looking for: [http://www.scribd.com/doc/11515210/Joomla-Component-Development-Backend]&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone else.&lt;br /&gt;
-Mike&lt;br /&gt;
[[User:M3t00|M3t00]] 15:55, 10 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== RE: Renaming Part 4 ==&lt;br /&gt;
&lt;br /&gt;
I'm actually even more confused now.&lt;br /&gt;
&lt;br /&gt;
Only by reading through this discussion did it occur to me that you need to use multiple views to handle the various tasks in the controller.  That seems like an important concept that is not entirely obvious to someone trying to learn the joomla framework.  And yet now that I recognize the concept, it's not obvious what the best practices would be to implement multiple views.  I'll work on it.&lt;br /&gt;
&lt;br /&gt;
Despite that, this is still an extremely valuable tutorial -- especially considering that much of the rest of the API documentation is sparse at best.  The entire joomla documentation in general could definitely benefit from a bit of a re-org.&lt;br /&gt;
&lt;br /&gt;
EDIT:  OK. So after reading through part 4 of the tutorial again, it is clear to me about the multiple views.  So, looking back, it would have been valuable to explain that in the introduction.  Something like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Now we will create an administrator section to create the greetings.  It uses 2 views.  The first view, called Hellos, will present a list of greetings with the ability to add new ones or remove old ones.  The second view will allow the user to edit each greeting.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
That would have helped tremendously.  In any case, I got it now.  I feel a little stupid for missing that the first time around, but maybe it was because it was late at night.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Component Hello, Site Hello, Admin Hellos, Admin Hello ==&lt;br /&gt;
&lt;br /&gt;
Chapters 1 and 2 were easy to follow. Chapter 3 contains some glitches that took me some time to understand but reading this chapter made everything really confusing. It took me a time to realise the Hello's, just my subject with only the focus clarifies already some impact. After re- and re-re reading it becomes clear to me what is meant. After re-reading the reason for using Hellos (as an Admin List) became clear and re-re- reading made the Admin single view/tmpl Hello obvious again. Why not rename these to:&lt;br /&gt;
&lt;br /&gt;
* Manage_Hello_List&lt;br /&gt;
* Manage_Hello_Item&lt;br /&gt;
&lt;br /&gt;
This would make everything much more readable, would set a clear context and increase the ease of understanding.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 12:37, 3 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Splitting up article into two articles ==&lt;br /&gt;
&lt;br /&gt;
If the writers have no objection I propose to split this chapter into two. There are multiple good reasons for doing so but the most important three are the following:&lt;br /&gt;
*This chapter is huge making reading a tedious job, overwhelming and scaring away the once that this article is intended for.&lt;br /&gt;
*This article has two logical section so braking it at '''Adding Functionality''' doesn't harm any body and helps newbies in achieving results. Being able to check a chapter and visually see the intermediate result is always the best motivation.&lt;br /&gt;
*Technically the same split at '''Adding Functionality''' is making a difference in know-how. the first part is not really new when you followed the ''site'' part examples '''Developing a Model-View-Controller Component 1, 2 and 3'''. Old wine in new bottles. The second part really goes into depth and requires good basic programming skills and a general understanding of HTML form handling.&lt;br /&gt;
If no objections I will initiate this spilt soon.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 07:34, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think splitting it is a good idea and should improve readability.  I look forward to seeing your improvements. [[User:Chris Davenport|Chris Davenport]] 08:51, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Confusing ==&lt;br /&gt;
&lt;br /&gt;
I agree Part 4 gets confusing. I see what it is attempting to demonstrate but it is confusing to jump into a completely new example rather than use an example from the onset that could cover the details of the controls in the Admin area. &lt;br /&gt;
&lt;br /&gt;
Maybe choosing a slightly more complex example than 'Hello world!' from the beginning?&lt;br /&gt;
&lt;br /&gt;
Will be good to see this article when it's been updated!&lt;br /&gt;
----&lt;br /&gt;
I have to add my agreement to this -- the Hello World was a fine, basic example -- no need to crummy up the lesson with this sudden deviation into an entirely different example.&lt;br /&gt;
&lt;br /&gt;
This article should be moved to it's own section, IMHO.&lt;br /&gt;
--[[User:HobbesPDX|HobbesPDX]] 23:21, 6 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hint in 'Mapping' section ==&lt;br /&gt;
&lt;br /&gt;
I'm removing the so-called hint from the section titled 'Mapping a Joomla! MVC component from the example.'&lt;br /&gt;
&lt;br /&gt;
I've never seen the 'registered' method, and I think it's bogus.&lt;br /&gt;
&lt;br /&gt;
Please respond if I'm wrong.&lt;br /&gt;
&lt;br /&gt;
[[User:HobbesPDX|HobbesPDX]] 20:19, 6 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Move 'sharing template parts' note to another article? ==&lt;br /&gt;
&lt;br /&gt;
I'd like to suggest to the community, that the expansive note, in section 3.2.3, regarding sharing template/view elements, using include/require, should be moved to another article.&lt;br /&gt;
&lt;br /&gt;
It's a very helpful point, but I feel it adds unnecessary and extra information to an already complex document.&lt;br /&gt;
&lt;br /&gt;
Discuss. :-)&lt;br /&gt;
&lt;br /&gt;
--[[User:HobbesPDX|HobbesPDX]] 21:00, 6 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Basic_Backend_Framework</id>
		<title>J1.5:Developing a MVC Component/Basic Backend Framework</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Basic_Backend_Framework"/>
				<updated>2010-03-06T22:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
This article focuses on the entry page/article for the administrator. Whilst the MVC pattern is the same as for the frontend user, this chapter will rapidly go though all steps and setup the backend counter part in the admin section. This article will only focus on setting up the Basic Framework with a list of all the ''Hellos'' but without user interaction. The actual user interaction is added in the succeeding article [[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]].&lt;br /&gt;
&lt;br /&gt;
== Tutorial specific naming ==&lt;br /&gt;
Within the next articles the explanation of this administrator section we will keep as close as possible to the component name. For the general overview, lists from the database, we will use ''Hellos'' as identification. The ''Hellos'' naming will be used for viewing and controlling multiple Hellos at once from the database. When selecting a single Hello for Editing or Adding we will use the singular ''Hello'' as naming for the Controller and View. This ''Admin Hello'' has no functional relation with the ''Site Hello'' (the only dependency is the database content of cause).&lt;br /&gt;
&lt;br /&gt;
Where parts 1,2 and 3 of the MVC explanation were working in the site directory tree of com_hello, part 5 and 6 will focus on the admin directory tree. Part 5 and 6 will not add or change files in the site directory tree. Look at the XML file in the attached example of the full com_hello implementation. The XML configuration file will help you with the exact location of the different files being used in this and the following chapter.&lt;br /&gt;
&lt;br /&gt;
== Creating the Basic Framework ==&lt;br /&gt;
&lt;br /&gt;
The basic framework of the administrator panel is very similar to the site portion. The main entry point for the administrator section of the component is hello.php. This file is identical to the hello.php file that was used in the site portion except the name of the controller it loads will be changed to HellosController. The default controller is also called controller.php and this file is identical to the default controller in the site portion, with the exception that the controller is named HellosController instead of HelloController. This difference is so that JController will by default load the hellos view, which will display a list of our greetings.&lt;br /&gt;
&lt;br /&gt;
Here is the listing for hello.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// No direct access&lt;br /&gt;
&lt;br /&gt;
defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt;
&lt;br /&gt;
// Require the base controller&lt;br /&gt;
&lt;br /&gt;
require_once( JPATH_COMPONENT.DS.'controller.php' );&lt;br /&gt;
&lt;br /&gt;
// Require specific controller if requested&lt;br /&gt;
if($controller = JRequest::getWord('controller')) {&lt;br /&gt;
    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';&lt;br /&gt;
    if (file_exists($path)) {&lt;br /&gt;
        require_once $path;&lt;br /&gt;
    } else {&lt;br /&gt;
        $controller = '';&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Create the controller&lt;br /&gt;
$classname    = 'HellosController'.$controller;&lt;br /&gt;
$controller   = new $classname( );&lt;br /&gt;
&lt;br /&gt;
// Perform the Request task&lt;br /&gt;
$controller-&amp;gt;execute( JRequest::getVar( 'task' ) );&lt;br /&gt;
&lt;br /&gt;
// Redirect if set by the controller&lt;br /&gt;
$controller-&amp;gt;redirect();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The view and model that we will start with is the hellos view and the hellos model. We will start with the model.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos Model ====&lt;br /&gt;
&lt;br /&gt;
The Hellos Model will be very simple. The only operation that we currently need is the ability to retrieve the list of hellos from the database. This operation will be implemented in a method called getData().&lt;br /&gt;
&lt;br /&gt;
The JModel class has a built in protected method called _getList(). This method can be used to simplify the task of retrieving a list of records from the database. We simply need to pass it the query and it will return the list of records.&lt;br /&gt;
&lt;br /&gt;
At a later point in time, we might want to use our query from within another method. Therefore, we will create a private method called _buildQuery() which will return the query that will be passed to _getList(). This makes it easier to change the query as well since it is localized in one place.&lt;br /&gt;
&lt;br /&gt;
Therefore we need two methods in our class: getData() and _buildQuery().&lt;br /&gt;
&lt;br /&gt;
_buildQuery() simply returns the query. It looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang=&amp;quot;php&amp;quot;&amp;gt;/**&lt;br /&gt;
 * Returns the query&lt;br /&gt;
 * @return string The query to be used to retrieve the rows from the database&lt;br /&gt;
 */&lt;br /&gt;
function _buildQuery()&lt;br /&gt;
{&lt;br /&gt;
    $query = ' SELECT * '&lt;br /&gt;
           . ' FROM #__hello '&lt;br /&gt;
    ;&lt;br /&gt;
&lt;br /&gt;
    return $query;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
getData() will obtain the query and retrieve the records from the database. Now it might happen that we need to retrieve this list of data twice in one page load. It would be a waste to have to query the database twice. Therefore, we will have this method store the data in a protected property so that on subsequent requests it can simply return the data it has already retrieved. This property will be called _data. (''&amp;lt;-- Naming convention conflict. Private or Protected data should be preceded with a '_' but as this reference is returned to the view where this data is directly accessed, this data can only be considered as public.'')&lt;br /&gt;
&lt;br /&gt;
Here is the getData() method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang=&amp;quot;php&amp;quot;&amp;gt;/**&lt;br /&gt;
 * Retrieves the hello data&lt;br /&gt;
 * @return array Array of objects containing the data from the database&lt;br /&gt;
 */&lt;br /&gt;
function getData()&lt;br /&gt;
{&lt;br /&gt;
    // Lets load the data if it doesn't already exist&lt;br /&gt;
    if (empty( $this-&amp;gt;_data ))&lt;br /&gt;
    {&lt;br /&gt;
        $query = $this-&amp;gt;_buildQuery();&lt;br /&gt;
        $this-&amp;gt;_data = $this-&amp;gt;_getList( $query );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return $this-&amp;gt;_data;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The completed model looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos Model for Hello World Component&lt;br /&gt;
 * &lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license        GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is included in Joomla!&lt;br /&gt;
defined('_JEXEC') or die();&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.model' );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hello Model&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 */&lt;br /&gt;
class HellosModelHellos extends JModel&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Hellos data array&lt;br /&gt;
     *&lt;br /&gt;
     * @var array&lt;br /&gt;
     */&lt;br /&gt;
    var $_data;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns the query&lt;br /&gt;
     * @return string The query to be used to retrieve the rows from the database&lt;br /&gt;
     */&lt;br /&gt;
    function _buildQuery()&lt;br /&gt;
    {&lt;br /&gt;
        $query = ' SELECT * '&lt;br /&gt;
            . ' FROM #__hello '&lt;br /&gt;
        ;&lt;br /&gt;
        return $query;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Retrieves the hello data&lt;br /&gt;
     * @return array Array of objects containing the data from the database&lt;br /&gt;
     */&lt;br /&gt;
    function getData()&lt;br /&gt;
    {&lt;br /&gt;
        // Lets load the data if it doesn't already exist&lt;br /&gt;
        if (empty( $this-&amp;gt;_data ))&lt;br /&gt;
        {&lt;br /&gt;
            $query = $this-&amp;gt;_buildQuery();&lt;br /&gt;
            $this-&amp;gt;_data = $this-&amp;gt;_getList( $query );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $this-&amp;gt;_data;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is saved as models/hellos.php.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos View ====&lt;br /&gt;
&lt;br /&gt;
Now that we have a model to retrieve our data, we need to display it. This view will be fairly similar to the view from the site section as well.&lt;br /&gt;
&lt;br /&gt;
Just as our model was automatically instantiated in the site, so it is in the administrator. Methods that start with &amp;quot;get&amp;quot; [e.g. getData()] in the model can be accessed using the get() method of the JView class. So our view has three lines: one to retrieve the data from the model, one to push the data into the template, and one to invoke the display method to display the output. Thus we have:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos View for Hello World Component&lt;br /&gt;
 * &lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license        GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is included in Joomla!&lt;br /&gt;
defined('_JEXEC') or die();&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.view' );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos View&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 */&lt;br /&gt;
class HellosViewHellos extends JView&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Hellos view display method&lt;br /&gt;
     * @return void&lt;br /&gt;
     **/&lt;br /&gt;
    function display($tpl = null)&lt;br /&gt;
    {&lt;br /&gt;
        JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' );&lt;br /&gt;
        JToolBarHelper::deleteList();&lt;br /&gt;
        JToolBarHelper::editListX();&lt;br /&gt;
        JToolBarHelper::addNewX();&lt;br /&gt;
&lt;br /&gt;
        // Get data from the model&lt;br /&gt;
        $items =&amp;amp; $this-&amp;gt;get( 'Data');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;assignRef( 'items', $items );&lt;br /&gt;
&lt;br /&gt;
        parent::display($tpl);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is saved as views/hellos/view.html.php.&lt;br /&gt;
&lt;br /&gt;
Look carefully at the almost hidden differences compared to ''site'' example. The data is stored in a variable that is encapsulated within the model. Because the data amount is huge due to using the very handy _getList(), the need for returning a reference instead of a value is obvious. This is handled in:&lt;br /&gt;
 $items =&amp;amp; $this-&amp;gt;get( 'Data');&lt;br /&gt;
Looking again at this line and you will notice another difference with respect to the ''site'' view.html.php. The calling of the model function is done implicitly. The actual model function name is getData(). In the ''site'' example you had to call following two lines:&lt;br /&gt;
 $model =&amp;amp; $this-&amp;gt;getModel();&lt;br /&gt;
 $greeting = $model-&amp;gt;getData();&lt;br /&gt;
Both lines are now taken care of by calling: &amp;lt;code&amp;gt;$this-&amp;gt;get( 'Data');&amp;lt;/code&amp;gt;. Under the surface of this &amp;lt;code&amp;gt;get()&amp;lt;/code&amp;gt; the 'Data' is prefixed with 'get' so when using this function make sure the model functions are preceded with 'get'. This function can also be used in the ''site'' section. Keeping the data in the model and accessing it by reference, via &amp;lt;code&amp;gt;get()&amp;lt;/code&amp;gt; methods, is the preferred way of getting data from the model.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos Template ====&lt;br /&gt;
&lt;br /&gt;
The template will take the data pushed into it from the view and produce the output. We will display our output in a simple table. While the frontend template was very simple, in the administrator we will need a minimal amount of extra logic to handle looping through the data.&lt;br /&gt;
&lt;br /&gt;
Here is our template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php defined('_JEXEC') or die('Restricted access'); ?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;editcell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table class=&amp;quot;adminlist&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th width=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo JText::_( 'ID' ); ?&amp;gt;&lt;br /&gt;
            &amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo JText::_( 'Greeting' ); ?&amp;gt;&lt;br /&gt;
            &amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;            &lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
    $k = 0;&lt;br /&gt;
    for ($i=0, $n=count( $this-&amp;gt;items ); $i &amp;lt; $n; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &amp;lt;tr class=&amp;quot;&amp;lt;?php echo &amp;quot;row$k&amp;quot;; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo $row-&amp;gt;id; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo $row-&amp;gt;greeting; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;?php&lt;br /&gt;
        $k = 1 - $k;&lt;br /&gt;
    }&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_hello&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;boxchecked&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This template is saved as views/hellos/tmpl/default.php.&lt;br /&gt;
&lt;br /&gt;
You will notice that our output is enclosed in a form. Though this is not necessary now, it will be soon.&lt;br /&gt;
&lt;br /&gt;
We have now completed the basic part of the first view. We have added five files to the admin section of our component:&lt;br /&gt;
&lt;br /&gt;
* hello.php&lt;br /&gt;
* controller.php&lt;br /&gt;
* models/hellos.php&lt;br /&gt;
* views/hellos/view.html.php&lt;br /&gt;
* views/hellos/tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
You can now add these files to the XML install file and give it a try!&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We have now implemented a basic framework for the backend admin component. A list where all of the Hellos are displayed. The next chapter will extend this framework and add user interaction / database manipulation.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
The full admin component can be downloaded at: [http://joomlacode.org/gf/download/frsrelease/8111/29436/com_hello4_01.zip com_hello4_01].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Basic_Backend_Framework</id>
		<title>J1.5:Developing a MVC Component/Basic Backend Framework</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Basic_Backend_Framework"/>
				<updated>2010-03-06T22:45:10Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
This article focuses on the entry page/article for the administrator. Whilst the MVC pattern is the same as for the frontend user, this chapter will rapidly go though all steps and setup the backend counter part in the admin section. This article will only focus on setting up the Basic Framework with a list of all the ''Hellos'' but without user interaction. The actual user interaction is added in the succeeding article [[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]].&lt;br /&gt;
&lt;br /&gt;
== Tutorial specific naming ==&lt;br /&gt;
Within the next articles the explanation of this administrator section we will keep as close as possible to the component name. For the general overview, lists from the database, we will use ''Hellos'' as identification. The ''Hellos'' naming will be used for viewing and controlling multiple Hellos at once from the database. When selecting a single Hello for Editing or Adding we will use the singular ''Hello'' as naming for the Controller and View. This ''Admin Hello'' has no functional relation with the ''Site Hello'' (the only dependency is the database content of cause).&lt;br /&gt;
&lt;br /&gt;
Where parts 1,2 and 3 of the MVC explanation were working in the site directory tree of com_hello, part 5 and 6 will focus on the admin directory tree. Part 5 and 6 will not add or change files in the site directory tree. Look at the XML file in the attached example of the full com_hello implementation. The XML configuration file will help you with the exact location of the different files being used in this and the following chapter.&lt;br /&gt;
&lt;br /&gt;
== Creating the Basic Framework ==&lt;br /&gt;
&lt;br /&gt;
The basic framework of the administrator panel is very similar to the site portion. The main entry point for the administrator section of the component is hello.php. This file is identical to the hello.php file that was used in the site portion except the name of the controller it loads will be changed to HellosController. The default controller is also called controller.php and this file is identical to the default controller in the site portion, with the exception that the controller is named HellosController instead of HelloController. This difference is so that JController will by default load the hellos view, which will display a list of our greetings.&lt;br /&gt;
&lt;br /&gt;
Here is the listing for hello.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// No direct access&lt;br /&gt;
&lt;br /&gt;
defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt;
&lt;br /&gt;
// Require the base controller&lt;br /&gt;
&lt;br /&gt;
require_once( JPATH_COMPONENT.DS.'controller.php' );&lt;br /&gt;
&lt;br /&gt;
// Require specific controller if requested&lt;br /&gt;
if($controller = JRequest::getWord('controller')) {&lt;br /&gt;
    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';&lt;br /&gt;
    if (file_exists($path)) {&lt;br /&gt;
        require_once $path;&lt;br /&gt;
    } else {&lt;br /&gt;
        $controller = '';&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Create the controller&lt;br /&gt;
$classname    = 'HellosController'.$controller;&lt;br /&gt;
$controller   = new $classname( );&lt;br /&gt;
&lt;br /&gt;
// Perform the Request task&lt;br /&gt;
$controller-&amp;gt;execute( JRequest::getVar( 'task' ) );&lt;br /&gt;
&lt;br /&gt;
// Redirect if set by the controller&lt;br /&gt;
$controller-&amp;gt;redirect();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The view and model that we will start with is the hellos view and the hellos model. We will start with the model.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos Model ====&lt;br /&gt;
&lt;br /&gt;
The Hellos Model will be very simple. The only operation that we currently need is the ability to retrieve the list of hellos from the database. This operation will be implemented in a method called getData().&lt;br /&gt;
&lt;br /&gt;
The JModel class has a built in protected method called _getList(). This method can be used to simplify the task of retrieving a list of records from the database. We simply need to pass it the query and it will return the list of records.&lt;br /&gt;
&lt;br /&gt;
At a later point in time, we might want to use our query from within another method. Therefore, we will create a private method called _buildQuery() which will return the query that will be passed to _getList(). This makes it easier to change the query as well since it is localized in one place.&lt;br /&gt;
&lt;br /&gt;
Therefore we need two methods in our class: getData() and _buildQuery().&lt;br /&gt;
&lt;br /&gt;
_buildQuery() simply returns the query. It looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang=&amp;quot;php&amp;quot;&amp;gt;/**&lt;br /&gt;
 * Returns the query&lt;br /&gt;
 * @return string The query to be used to retrieve the rows from the database&lt;br /&gt;
 */&lt;br /&gt;
function _buildQuery()&lt;br /&gt;
{&lt;br /&gt;
    $query = ' SELECT * '&lt;br /&gt;
           . ' FROM #__hello '&lt;br /&gt;
    ;&lt;br /&gt;
&lt;br /&gt;
    return $query;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
getData() will obtain the query and retrieve the records from the database. Now it might happen that we need to retrieve this list of data twice in one page load. It would be a waste to have to query the database twice. Therefore, we will have this method store the data in a protected property so that on subsequent requests it can simply return the data it has already retrieved. This property will be called _data. (''&amp;lt;-- Naming convention conflict. Private or Protected data should be preceded with a '_' but as this reference is returned to the view where this data is directly accessed, this data can only be considered as public.'')&lt;br /&gt;
&lt;br /&gt;
Here is the getData() method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source  lang=&amp;quot;php&amp;quot;&amp;gt;/**&lt;br /&gt;
 * Retrieves the hello data&lt;br /&gt;
 * @return array Array of objects containing the data from the database&lt;br /&gt;
 */&lt;br /&gt;
function getData()&lt;br /&gt;
{&lt;br /&gt;
    // Lets load the data if it doesn't already exist&lt;br /&gt;
    if (empty( $this-&amp;gt;_data ))&lt;br /&gt;
    {&lt;br /&gt;
        $query = $this-&amp;gt;_buildQuery();&lt;br /&gt;
        $this-&amp;gt;_data = $this-&amp;gt;_getList( $query );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return $this-&amp;gt;_data;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The completed model looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos Model for Hello World Component&lt;br /&gt;
 * &lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license        GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is included in Joomla!&lt;br /&gt;
defined('_JEXEC') or die();&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.model' );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hello Model&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 */&lt;br /&gt;
class HellosModelHellos extends JModel&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Hellos data array&lt;br /&gt;
     *&lt;br /&gt;
     * @var array&lt;br /&gt;
     */&lt;br /&gt;
    var $_data;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Returns the query&lt;br /&gt;
     * @return string The query to be used to retrieve the rows from the database&lt;br /&gt;
     */&lt;br /&gt;
    function _buildQuery()&lt;br /&gt;
    {&lt;br /&gt;
        $query = ' SELECT * '&lt;br /&gt;
            . ' FROM #__hello '&lt;br /&gt;
        ;&lt;br /&gt;
        return $query;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Retrieves the hello data&lt;br /&gt;
     * @return array Array of objects containing the data from the database&lt;br /&gt;
     */&lt;br /&gt;
    function getData()&lt;br /&gt;
    {&lt;br /&gt;
        // Lets load the data if it doesn't already exist&lt;br /&gt;
        if (empty( $this-&amp;gt;_data ))&lt;br /&gt;
        {&lt;br /&gt;
            $query = $this-&amp;gt;_buildQuery();&lt;br /&gt;
            $this-&amp;gt;_data = $this-&amp;gt;_getList( $query );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return $this-&amp;gt;_data;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is saved as models/hellos.php.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos View ====&lt;br /&gt;
&lt;br /&gt;
Now that we have a model to retrieve our data, we need to display it. This view will be fairly similar to the view from the site section as well.&lt;br /&gt;
&lt;br /&gt;
Just as our model was automatically instantiated in the site, so it is in the administrator. Methods that start with &amp;quot;get&amp;quot; [e.g. getData()] in the model can be accessed using the get() method of the JView class. So our view has three lines: one to retrieve the data from the model, one to push the data into the template, and one to invoke the display method to display the output. Thus we have:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos View for Hello World Component&lt;br /&gt;
 * &lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_4&lt;br /&gt;
 * @license        GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// Check to ensure this file is included in Joomla!&lt;br /&gt;
defined('_JEXEC') or die();&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.view' );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hellos View&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 */&lt;br /&gt;
class HellosViewHellos extends JView&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Hellos view display method&lt;br /&gt;
     * @return void&lt;br /&gt;
     **/&lt;br /&gt;
    function display($tpl = null)&lt;br /&gt;
    {&lt;br /&gt;
        JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' );&lt;br /&gt;
        JToolBarHelper::deleteList();&lt;br /&gt;
        JToolBarHelper::editListX();&lt;br /&gt;
        JToolBarHelper::addNewX();&lt;br /&gt;
&lt;br /&gt;
        // Get data from the model&lt;br /&gt;
        $items =&amp;amp; $this-&amp;gt;get( 'Data');&lt;br /&gt;
&lt;br /&gt;
        $this-&amp;gt;assignRef( 'items', $items );&lt;br /&gt;
&lt;br /&gt;
        parent::display($tpl);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This file is saved as views/hellos/view.html.php.&lt;br /&gt;
&lt;br /&gt;
Look carefully at the almost hidden differences compared to ''site'' example. The data is stored in a variable that is encapsulated within the model. Because the data amount is huge due to using the very handy _getList(), the need for returning a reference instead of a value is obvious. This is handled in:&lt;br /&gt;
 $items =&amp;amp; $this-&amp;gt;get( 'Data');&lt;br /&gt;
Looking again at this line and you will notice another difference with respect to the ''site'' view.html.php. The calling of the model function is done implicitly. The actual model function name is getData(). In the ''site'' example you had to call following two lines:&lt;br /&gt;
 $model =&amp;amp; $this-&amp;gt;getModel();&lt;br /&gt;
 $greeting = $model-&amp;gt;getData();&lt;br /&gt;
Both lines are now taken care of by calling: &amp;lt;code&amp;gt;$this-&amp;gt;get( 'Data');&amp;lt;/code&amp;gt;. Under the surface of this &amp;lt;code&amp;gt;get()&amp;lt;/code&amp;gt; the 'Data' is prefixed with 'get' so when using this function make sure the model functions are preceded with 'get'. This function can also be used in the ''site'' section. It is considered good programming practise to keep the data in the model and access it by reference, &amp;lt;code&amp;gt;get()&amp;lt;/code&amp;gt; methods are the preferred way of getting data from the model.&lt;br /&gt;
&lt;br /&gt;
==== The Hellos Template ====&lt;br /&gt;
&lt;br /&gt;
The template will take the data pushed into it from the view and produce the output. We will display our output in a simple table. While the frontend template was very simple, in the administrator we will need a minimal amount of extra logic to handle looping through the data.&lt;br /&gt;
&lt;br /&gt;
Here is our template:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php defined('_JEXEC') or die('Restricted access'); ?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;editcell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;table class=&amp;quot;adminlist&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th width=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo JText::_( 'ID' ); ?&amp;gt;&lt;br /&gt;
            &amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo JText::_( 'Greeting' ); ?&amp;gt;&lt;br /&gt;
            &amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;            &lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
    $k = 0;&lt;br /&gt;
    for ($i=0, $n=count( $this-&amp;gt;items ); $i &amp;lt; $n; $i++)&lt;br /&gt;
    {&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &amp;lt;tr class=&amp;quot;&amp;lt;?php echo &amp;quot;row$k&amp;quot;; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo $row-&amp;gt;id; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;?php echo $row-&amp;gt;greeting; ?&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;?php&lt;br /&gt;
        $k = 1 - $k;&lt;br /&gt;
    }&lt;br /&gt;
    ?&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_hello&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;boxchecked&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This template is saved as views/hellos/tmpl/default.php.&lt;br /&gt;
&lt;br /&gt;
You will notice that our output is enclosed in a form. Though this is not necessary now, it will be soon.&lt;br /&gt;
&lt;br /&gt;
We have now completed the basic part of the first view. We have added five files to the admin section of our component:&lt;br /&gt;
&lt;br /&gt;
* hello.php&lt;br /&gt;
* controller.php&lt;br /&gt;
* models/hellos.php&lt;br /&gt;
* views/hellos/view.html.php&lt;br /&gt;
* views/hellos/tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
You can now add these files to the XML install file and give it a try!&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We have now implemented a basic framework for the backend admin component. A list where all of the Hellos are displayed. The next chapter will extend this framework and add user interaction / database manipulation.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
The full admin component can be downloaded at: [http://joomlacode.org/gf/download/frsrelease/8111/29436/com_hello4_01.zip com_hello4_01].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T21:35:00Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
| type  = notice&lt;br /&gt;
| image = notice&lt;br /&gt;
| text  = This {{thingamabob}} has been divided into three sections, two new articles are added. Especially this page needs a review&lt;br /&gt;
&amp;lt;small&amp;gt;(August 2009)&amp;lt;/small&amp;gt;}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first three tutorials, we have developed a MVC component that retrieves its data from a table in the database. Currently, there is no way to add data to the database except to do it manually using another tool. In the next articles of this tutorial, we will develop an administrator section for our component which will make it possible to manage the entries in the database.&lt;br /&gt;
&lt;br /&gt;
This article, [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface | Part 4 - Creating an Administrator Interface]], will be an article with no new source code for our Hello component but will describe some basic details of the MVC pattern. In the frontend solution (site section) we developed the first part of our component. The frontend solution is based upon default Controllers, Views and Templates and you were &amp;quot;taken by the hand&amp;quot; and &amp;quot;left to trust&amp;quot; the default handling of the code. This is going to change in the Backend or Administration section of our Hello component - we will have to develop all of the code that manages the application flow.&lt;br /&gt;
&lt;br /&gt;
== Site / Admin ==&lt;br /&gt;
Joomla! is a content management system. The '''frontend''' is used for presenting the users with content and allows certain logged in users to manipulate the content. The '''backend''' is responsible for administering the website framework (structuring / managing / controlling / maintaining). This division between (frontend) site-content and (backend) administration is a fundamental aspect of the Joomla! architecture.&lt;br /&gt;
&lt;br /&gt;
=== Entrance points ===&lt;br /&gt;
From the XML file of our frontend example it was already obvious that there would be an administration part:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!--  Administration Menu Section --&amp;gt; &lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt; &lt;br /&gt;
  &amp;lt;!--  Administration Main File Copy Section --&amp;gt; &lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;/files&amp;gt;&lt;br /&gt;
  &amp;lt;/administration&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Only the .sql files were of use and only during installation for our frontend view, the other two files have no content besides generating a blank page. Access your websites' file system at your hosting provider (or on your own server) and browse through the directories after installing the frontend com_hello component. You may have noticed that our Hello component is to be found twice:&lt;br /&gt;
 &amp;lt;root&amp;gt;/components/com_hello&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/components/com_hello&lt;br /&gt;
&lt;br /&gt;
These two sub-directories link to the previously explained site-content and administration. Administrator interactions explicitly go via the administrator sub-directory, where guest or registered users will enter the default entrance on the root:&lt;br /&gt;
 &amp;lt;root&amp;gt;/index.php&lt;br /&gt;
Administrative users will have to log in, and after logging in they will enter your site via:&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/index.php&lt;br /&gt;
&lt;br /&gt;
With the different access points it is easy to grasp that with setting up the administrator section the naming conventions have no dependency with the site section. Whilst the MVC pattern is also applicable for the administrator section this implies that identical Controls, Views and Models naming can (and sometimes must) be used as in the site section.&lt;br /&gt;
&lt;br /&gt;
== MVC pattern interaction ==&lt;br /&gt;
[[image:MVC joomla.png|frameless|right]]In [[Developing a Model-View-Controller Component - Part 1]] the figure on the right was used to explain the focus of the first three parts of this ''Developing a Model-View-Controller Component tutorial''. Now we will use this figure to explain how decisions are made on what is going to be displayed and how to manipulate this.&lt;br /&gt;
&lt;br /&gt;
=== Example roll-out ===&lt;br /&gt;
For explanation purposes an easy to grasp example will be used. A library has the main function of lending books to registered users. Simply laid out there are three tables:&lt;br /&gt;
* users&lt;br /&gt;
* books&lt;br /&gt;
* relation&lt;br /&gt;
&lt;br /&gt;
Lets keep it all very simple. The users are addressed by Id and Name. The books are identified by Id and Title and the relation contains both Ids and the date of lending.&lt;br /&gt;
&lt;br /&gt;
[[image:Library Example.png|400px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
The example is carefully chosen and will help in explaining the Joomla! architecture in more detail. The administrative side of our Hello component is not even that complex with only one table to manage. After the explanation of this chapter it should be easy to follow the tutorial in the succeeding chapters&lt;br /&gt;
&lt;br /&gt;
=== Mapping a Joomla! MVC component from the example ===&lt;br /&gt;
In this example we will assume that administrative actions (add, edit, delete) are tasks that are to be performed by the administrator. For the frontend user only the view of the Relation table is interesting (&amp;quot;when do I have to bring back the books?&amp;quot;). This example shows the entire list and ignores all privacy stuff that could be taken care of by letting registered users only see their own books.&lt;br /&gt;
&lt;br /&gt;
Just like our frontend Hello component, for this library component only the default view is being used in the frontend. It lists the relational table, left joining the other two tables to obtain a human readable list of books with their corresponding due date. &lt;br /&gt;
 Alice | One flew over ... | 12-aug-2009&lt;br /&gt;
 Alice | Celeb talk        | 12-aug-2009&lt;br /&gt;
 Mark  | Joomla!           | 15-aug-2009&lt;br /&gt;
&lt;br /&gt;
With respect to the administration part it is important to understand that we have one default and three dedicated views, each controlling three tasks:&lt;br /&gt;
* &amp;lt;Component name default view&amp;gt;&lt;br /&gt;
* User administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Book administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Relation administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
The main controller of the admin section needs to differentiate between the different Adds, Changes or Deletes that are requested. This is taken care of by creating sub-controllers for each view for handling their specific tasks.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controller.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/relation.php&lt;br /&gt;
&lt;br /&gt;
The controller is an important part of the MVC pattern. Not only does it take care of the requested tasks, it is also the initiator of instantiating the model with the same name and it is responsible for setting the view and the desired form for that view. The controller really justifies its name. &lt;br /&gt;
&lt;br /&gt;
Within the controller it is good to make a difference between '''activating tasks''' (for example the edit selection from a menu) and '''resulting tasks''' (for example the result of an edit trigger is the posted data).&lt;br /&gt;
&lt;br /&gt;
Typical controller functions look like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function &amp;lt;activating task&amp;gt;()  // &amp;lt;-- edit, add, delete &lt;br /&gt;
{&lt;br /&gt;
    JRequest::setVar( 'view', '[&amp;lt;componentname&amp;gt; | users | books | relation ]' );&lt;br /&gt;
    JRequest::setVar( 'layout', 'default'  );     // &amp;lt;-- The default form is named here, but in&lt;br /&gt;
                                                  // some complex views, multiple layouts might&lt;br /&gt;
                                                  // be needed.&lt;br /&gt;
    parent::display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function &amp;lt;resulting task&amp;gt;()  // &amp;lt;-- save, remove&lt;br /&gt;
{&lt;br /&gt;
	$model = $this-&amp;gt;getModel('[&amp;lt;componentname&amp;gt; | users | books | relation ]');&lt;br /&gt;
	if(!$model-&amp;gt;action() ) {    // &amp;lt;-- action could be delete() or store()&lt;br /&gt;
		$msg = JText::_( 'Error: Could not perform action' );&lt;br /&gt;
	} else {&lt;br /&gt;
		$msg = JText::_( 'Action executed' );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;setRedirect( 'index.php?option=&amp;lt;componentname&amp;gt;', $msg );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A controller takes care of all tasks for that dedicated controller. After completing a resulting task the module will return to the main administration entrance point for that component, the main controller with the default view. Activating tasks enforce a new view with a form to display after first defining it.&lt;br /&gt;
&lt;br /&gt;
The explicit definition of the form within a view might raise some eyebrows but our examples are too simple. For the general understanding and consistency this field should mostly be ''default''. In complex views multiple forms could be defined within one view.&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
The Controllers interact with their equally named Model counter part. In the frontend view the Model was only used to retrieve data. The backend has more controllers and thus also more model files. The backend model files not only are responsible for delivering data to the viewer but also take care of tasks initiated from the controller. A good model contains all actions required to manage a single table in the database.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/relation.php&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
Separate views are of course also required. For views and subsequent forms no forced naming conventions are required (linking to views is taken care of in the controller). In the following listing the Administrative tasks are identified as a subset for the different views. This choice is totally random and maybe even non-logical but that doesn't matter for the explanation. Just for example purposes I added also a different view, a delete view, that could be used for all the deletes for all administrative tasks asking an &amp;quot;Are you sure&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/&amp;lt;componentname&amp;gt;/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/users/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/books/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/relation/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;amp;nbsp;&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/delete/view.html.php    + .../tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
''Note'': In general it is good practice to maintain one form per view because the view.html.php still has to deliver the content. With some basic logic you can enable, disable certain content but if this logic is becoming too complex start considering splitting up the view. &lt;br /&gt;
&lt;br /&gt;
''Note'': Sharing template parts amongst the different views (for uniform layouting of headers and titles of your component) can be done using the PHP &amp;lt;code&amp;gt;include / require;&amp;lt;/code&amp;gt;. There is one slight problem ... how to make the logical reference? In my modules I have a collector bin for general to use sniplets. Because it involved the views and forms I put this general bin in the views directory. The variable $pathToGeneralView needs to be defined somewhere in the first lines of your file and you have to make sure that the logical reference path is correct (the '..'s). In the following example the files marked with a '*' use the following code:&lt;br /&gt;
&lt;br /&gt;
 ./com_compname/views/general/navigate.header.php  &amp;lt;-- sniplet code for the header&lt;br /&gt;
 ./com_compname/views/general/navigate.footer.php  &amp;lt;-- sniplet code for the footer&lt;br /&gt;
 ./com_compname/views/mngtable1/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable1/tmpl/default.php *&lt;br /&gt;
 ./com_compname/views/mngtable2/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable2/tmpl/default.php *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = strchr(dirname(__FILE__), dirname($_SERVER['SCRIPT_NAME']));&lt;br /&gt;
$pathToGeneralView = str_replace(dirname($_SERVER['SCRIPT_NAME']),'.',$pathToGeneralView );&lt;br /&gt;
$pathToGeneralView = $pathToGeneralView . &amp;quot;/../../general/&amp;quot;;  &amp;lt;-- returning path from current position. &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Another Way to do the same thing:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = JPATH_COMPONENT_ADMINISTRATOR.DS. &amp;quot;views&amp;quot;.DS.&amp;quot;general&amp;quot;.DS;  &amp;lt;-- will return 'path/Joomla/administrator/components/com_example/views/general/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': Giving the forms logical instead of the ''default'' naming is of course handy when having a lot of different views. Also, having that many ''default'' forms can make it difficult to determine the context. On the other hand, the view.html.php cannot be renamed, and one is always forced to look at the directory name for the view.&lt;br /&gt;
&lt;br /&gt;
=== Essential Interaction Parameters ===&lt;br /&gt;
Everything is in place:&lt;br /&gt;
* main and dedicated controllers;&lt;br /&gt;
* main and dedicated modules;&lt;br /&gt;
* different views and their forms.&lt;br /&gt;
&lt;br /&gt;
Just one big question remains: '''How to use them'''!&lt;br /&gt;
&lt;br /&gt;
Three parameters are mandatory for letting Joomla! do its job:&lt;br /&gt;
* option&lt;br /&gt;
* controller&lt;br /&gt;
* task&lt;br /&gt;
&lt;br /&gt;
These three parameters are almost self explaining ;). The ''option'' part when developing a component is easy, always assign your component name to it. For component development consider this one as a constant, of course the Joomla! engine has more options than only components.&lt;br /&gt;
&lt;br /&gt;
The ''controller'' and ''task'' parameters can be manipulated within your component anyway you want it to. &lt;br /&gt;
&lt;br /&gt;
==== How it all works together ====&lt;br /&gt;
Looking at the simplified MVC picture Joomla! the logical flow of interaction goes the following way:&lt;br /&gt;
# What is my entrance point? &lt;br /&gt;
#*The Joomla! engine discovers a logged in administrator and sets the entrance point to &amp;lt;root&amp;gt;/administrator/index.php otherwise it wil go to the &amp;lt;root&amp;gt;/index.php entrance.&lt;br /&gt;
# What option is requested? &lt;br /&gt;
#*The Joomla! engine reads the option variable and discovers that a component named &amp;lt;componentname&amp;gt; is requested. The entrance point becomes: &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
# Is there need to access a dedicated controller? &lt;br /&gt;
#* The Joomla! engine reads the controller variable and discovers that a dedicated controller is required: &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/controllers/&amp;lt;dedicatedcontroller&amp;gt;.php&lt;br /&gt;
# Is there a task that needs to be addressed? &lt;br /&gt;
#* The identified controller is handed the task value as parameter. &lt;br /&gt;
# The Model is derived from the controller and instantiated.&lt;br /&gt;
# The View and Form are set in the controller and initiated to become active.&lt;br /&gt;
&lt;br /&gt;
=== How to add interaction ===&lt;br /&gt;
Within HTML there are two common ways to interact with Joomla!:&lt;br /&gt;
# reference to a link&lt;br /&gt;
# form submission post / get&lt;br /&gt;
&lt;br /&gt;
==== Link reference for the Joomla! engine ====&lt;br /&gt;
Remember the '''activating tasks''' and '''resulting tasks''' mentioned earlier? Most activating tasks are initiated by a link. In case of the Library example the site section overview could be copied to the admin section. This default view will now be extended and every cell will become a link for editing the specific database element.&lt;br /&gt;
&lt;br /&gt;
Using the Library example, the template PHP code without looping control will contain the following code:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=users&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idu );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;name&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=books&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idb );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=relation&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idr );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;date&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within each clickable field the three mandatory parameters to manipulate Joomla! can be identified. In addition there is one user parameter for handling the correct index in the controller task (cid). These parameter are separated by '&amp;amp;'. Do not use spaces in your variables, as this might screw-up parameter handling in certain browsers. After looping, all text entries will be clickable and trigger the corresponding controller with the correct row id in the associated table.&lt;br /&gt;
&lt;br /&gt;
 [Alice} | [One flew over ...] | [12-aug-2009]&lt;br /&gt;
 [Alice] | [Celeb talk]        | [12-aug-2009]&lt;br /&gt;
 [Mark]  | [Joomla!]           | [15-aug-2009]&lt;br /&gt;
&lt;br /&gt;
==== Posting Form Data to the Joomla! Engine ====&lt;br /&gt;
After being initiated by an activating task, an input form view might be the result. The snippet of code below could be the result of clicking the first cell of the default component view that is clicked for editing ([Alice]:cid=3). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; size=&amp;quot;32&amp;quot; maxlength=&amp;quot;250&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;name;?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;SubmitButton&amp;quot; value=&amp;quot;Save&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_library&amp;quot; /&amp;gt;                  // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;                    // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;save&amp;quot; /&amp;gt;                           // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;id&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;id; ?&amp;gt;&amp;quot; /&amp;gt;   // &amp;lt;-- user parameter, index in database for [Alice]&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three Joomla! mandatory parameters are placed as hidden in the form. Hidden parameters are not shown in any way but will be added to the posting data.&lt;br /&gt;
&lt;br /&gt;
''Tip'': when debugging this form, replace in the form tag &amp;lt;code&amp;gt;method=&amp;quot;post&amp;quot;&amp;lt;/code&amp;gt; temporarily with &amp;lt;code&amp;gt;method=&amp;quot;get&amp;quot;&amp;lt;/code&amp;gt;. All posted parameters will be shown in the URL of your browser. If the module is working undo this change. For one reason it looks sharper without all the parameters being shown in the URL and you avoid motivating people to manipulate the browser URL themselves. Of course one can look at the source code but using ''Post'' instead of ''Get'', but this eliminates the first 90% of the earth population. The other reason is more technical and the simple explanation is that post methods (i.e. method=&amp;quot;post&amp;quot;) can contain more (complex) data.&lt;br /&gt;
&lt;br /&gt;
''Remark'': In some developed modules you may notice that developers have also added the ''view'' parameter. This is bad programming whilst the controller(s) should take care of the ''view'' and the ''form''.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The use of the three mandatory parameters and the different access points are clarified. Let's do something with this knowledge and extend the Hello component to the administrative section in the succeeding articles of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T21:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
| type  = notice&lt;br /&gt;
| image = notice&lt;br /&gt;
| text  = This {{thingamabob}} has been divided into three sections, two new articles are added. Especially this page needs a review&lt;br /&gt;
&amp;lt;small&amp;gt;(August 2009)&amp;lt;/small&amp;gt;}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first three tutorials, we have developed a MVC component that retrieves its data from a table in the database. Currently, there is no way to add data to the database except to do it manually using another tool. In the next articles of this tutorial, we will develop an administrator section for our component which will make it possible to manage the entries in the database.&lt;br /&gt;
&lt;br /&gt;
This article, [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface | Part 4 - Creating an Administrator Interface]], will be an article with no new source code for our Hello component but will describe some basic details of the MVC pattern. In the frontend solution (site section) we developed the first part of our component. The frontend solution is based upon default Controllers, Views and Templates and you were &amp;quot;taken by the hand&amp;quot; and &amp;quot;left to trust&amp;quot; the default handling of the code. This is going to change in the Backend or Administration section of our Hello component - we will have to develop all of the code that manages the application flow.&lt;br /&gt;
&lt;br /&gt;
== Site / Admin ==&lt;br /&gt;
Joomla! is a content management system. The '''frontend''' is used for presenting the users with content and allows certain logged in users to manipulate the content. The '''backend''' is responsible for administering the website framework (structuring / managing / controlling / maintaining). This division between (frontend) site-content and (backend) administration is a fundamental aspect of the Joomla! architecture.&lt;br /&gt;
&lt;br /&gt;
=== Entrance points ===&lt;br /&gt;
From the XML file of our frontend example it was already obvious that there would be an administration part:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!--  Administration Menu Section --&amp;gt; &lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt; &lt;br /&gt;
  &amp;lt;!--  Administration Main File Copy Section --&amp;gt; &lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;/files&amp;gt;&lt;br /&gt;
  &amp;lt;/administration&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Only the .sql files were of use and only during installation for our frontend view, the other two files have no content besides generating a blank page. Access your websites' file system at your hosting provider (or on your own server) and browse through the directories after installing the frontend com_hello component. You may have noticed that our Hello component is to be found twice:&lt;br /&gt;
 &amp;lt;root&amp;gt;/components/com_hello&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/components/com_hello&lt;br /&gt;
&lt;br /&gt;
These two sub-directories link to the previously explained site-content and administration. Administrator interactions explicitly go via the administrator sub-directory, where guest or registered users will enter the default entrance on the root:&lt;br /&gt;
 &amp;lt;root&amp;gt;/index.php&lt;br /&gt;
Administrative users will have to log in, and after logging in they will enter your site via:&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/index.php&lt;br /&gt;
&lt;br /&gt;
With the different access points it is easy to grasp that with setting up the administrator section the naming conventions have no dependency with the site section. Whilst the MVC pattern is also applicable for the administrator section this implies that identical Controls, Views and Models naming can (and sometimes must) be used as in the site section.&lt;br /&gt;
&lt;br /&gt;
== MVC pattern interaction ==&lt;br /&gt;
[[image:MVC joomla.png|frameless|right]]In [[Developing a Model-View-Controller Component - Part 1]] the figure on the right was used to explain the focus of the first three parts of this ''Developing a Model-View-Controller Component tutorial''. Now we will use this figure to explain how decisions are made on what is going to be displayed and how to manipulate this.&lt;br /&gt;
&lt;br /&gt;
=== Example roll-out ===&lt;br /&gt;
For explanation purposes an easy to grasp example will be used. A library has the main function of lending books to registered users. Simply laid out there are three tables:&lt;br /&gt;
* users&lt;br /&gt;
* books&lt;br /&gt;
* relation&lt;br /&gt;
&lt;br /&gt;
Lets keep it all very simple. The users are addressed by Id and Name. The books are identified by Id and Title and the relation contains both Ids and the date of lending.&lt;br /&gt;
&lt;br /&gt;
[[image:Library Example.png|400px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
The example is carefully chosen and will help in explaining the Joomla! architecture in more detail. The administrative side of our Hello component is not even that complex with only one table to manage. After the explanation of this chapter it should be easy to follow the tutorial in the succeeding chapters&lt;br /&gt;
&lt;br /&gt;
=== Mapping a Joomla! MVC component from the example ===&lt;br /&gt;
In this example we will assume that administrative actions (add, edit, delete) are tasks that are to be performed by the administrator. For the frontend user only the view of the Relation table is interesting (&amp;quot;when do I have to bring back the books?&amp;quot;). This example shows the entire list and ignores all privacy stuff that could be taken care of by letting registered users only see their own books.&lt;br /&gt;
&lt;br /&gt;
Just like our frontend Hello component, for this library component only the default view is being used in the frontend. It lists the relational table, left joining the other two tables to obtain a human readable list of books with their corresponding due date. &lt;br /&gt;
 Alice | One flew over ... | 12-aug-2009&lt;br /&gt;
 Alice | Celeb talk        | 12-aug-2009&lt;br /&gt;
 Mark  | Joomla!           | 15-aug-2009&lt;br /&gt;
&lt;br /&gt;
With respect to the administration part it is important to understand that we have one default and three dedicated views, each controlling three tasks:&lt;br /&gt;
* &amp;lt;Component name default view&amp;gt;&lt;br /&gt;
* User administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Book administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Relation administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
The main controller of the admin section needs to differentiate between the different Adds, Changes or Deletes that are requested. This is taken care of by creating sub-controllers for each view for handling their specific tasks.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controller.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/relation.php&lt;br /&gt;
&lt;br /&gt;
The controller is an important part of the MVC pattern. Not only does it take care of the requested tasks, it is also the initiator of instantiating the model with the same name and it is responsible for setting the view and the desired form for that view. The controller really justifies its name. &lt;br /&gt;
&lt;br /&gt;
Within the controller it is good to make a difference between '''activating tasks''' (for example the edit selection from a menu) and '''resulting tasks''' (for example the result of an edit trigger is the posted data).&lt;br /&gt;
&lt;br /&gt;
Typical controller functions look like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function &amp;lt;activating task&amp;gt;()  // &amp;lt;-- edit, add, delete &lt;br /&gt;
{&lt;br /&gt;
    JRequest::setVar( 'view', '[&amp;lt;componentname&amp;gt; | users | books | relation ]' );&lt;br /&gt;
    JRequest::setVar( 'layout', 'default'  );     // &amp;lt;-- The default form is named here, but in&lt;br /&gt;
                                                  // some complex views, multiple layouts might&lt;br /&gt;
                                                  // be needed.&lt;br /&gt;
    parent::display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function &amp;lt;resulting task&amp;gt;()  // &amp;lt;-- save, remove&lt;br /&gt;
{&lt;br /&gt;
	$model = $this-&amp;gt;getModel('[&amp;lt;componentname&amp;gt; | users | books | relation ]');&lt;br /&gt;
	if(!$model-&amp;gt;action() ) {    // &amp;lt;-- action could be delete() or store()&lt;br /&gt;
		$msg = JText::_( 'Error: Could not perform action' );&lt;br /&gt;
	} else {&lt;br /&gt;
		$msg = JText::_( 'Action executed' );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;setRedirect( 'index.php?option=&amp;lt;componentname&amp;gt;', $msg );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A controller takes care of all tasks for that dedicated controller. After completing a resulting task the module will return to the main administration entrance point for that component, the main controller with the default view. Activating tasks enforce a new view with a form to display after first defining it.&lt;br /&gt;
&lt;br /&gt;
The explicit definition of the form within a view might raise some eyebrows but our examples are too simple. For the general understanding and consistency this field should mostly be ''default''. In complex views multiple forms could be defined within one view.&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
The Controllers interact with their equally named Model counter part. In the frontend view the Model was only used to retrieve data. The backend has more controllers and thus also more model files. The backend model files not only are responsible for delivering data to the viewer but also take care of tasks initiated from the controller. A good model contains all actions required to manage a single table in the database.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/relation.php&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
Separate views are of course also required. For views and subsequent forms no forced naming conventions are required (linking to views is taken care of in the controller). In the following listing the Administrative tasks are identified as a subset for the different views. This choice is totally random and maybe even non-logical but that doesn't matter for the explanation. Just for example purposes I added also a different view, a delete view, that could be used for all the deletes for all administrative tasks asking an &amp;quot;Are you sure&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/&amp;lt;componentname&amp;gt;/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/users/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/books/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/relation/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;amp;nbsp;&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/delete/view.html.php    + .../tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
''Note'': In general it is good practice to maintain one form per view because the view.html.php still has to deliver the content. With some basic logic you can enable, disable certain content but if this logic is becoming too complex start considering splitting up the view. &lt;br /&gt;
&lt;br /&gt;
''Note'': Sharing template parts amongst the different views (for uniform layouting of headers and titles of your component) can be done using the PHP &amp;lt;code&amp;gt;include / require;&amp;lt;/code&amp;gt;. There is one slight problem ... how to make the logical reference? In my modules I have a collector bin for general to use sniplets. Because it involved the views and forms I put this general bin in the views directory. The variable $pathToGeneralView needs to be defined somewhere in the first lines of your file and you have to make sure that the logical reference path is correct (the '..'s). In the following example the files marked with a '*' use the following code:&lt;br /&gt;
&lt;br /&gt;
 ./com_compname/views/general/navigate.header.php  &amp;lt;-- sniplet code for the header&lt;br /&gt;
 ./com_compname/views/general/navigate.footer.php  &amp;lt;-- sniplet code for the footer&lt;br /&gt;
 ./com_compname/views/mngtable1/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable1/tmpl/default.php *&lt;br /&gt;
 ./com_compname/views/mngtable2/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable2/tmpl/default.php *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = strchr(dirname(__FILE__), dirname($_SERVER['SCRIPT_NAME']));&lt;br /&gt;
$pathToGeneralView = str_replace(dirname($_SERVER['SCRIPT_NAME']),'.',$pathToGeneralView );&lt;br /&gt;
$pathToGeneralView = $pathToGeneralView . &amp;quot;/../../general/&amp;quot;;  &amp;lt;-- returning path from current position. &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Another Way to do the same thing:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = JPATH_COMPONENT_ADMINISTRATOR.DS. &amp;quot;views&amp;quot;.DS.&amp;quot;general&amp;quot;.DS;  &amp;lt;-- will return 'path/Joomla/administrator/components/com_example/views/general/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': Giving the forms logical instead of the ''default'' naming is of course handy when having a lot of different views. Also, having that many ''default'' forms can make it difficult to determine the context. On the other hand, the view.html.php cannot be renamed, and one is always forced to look at the directory name for the view.&lt;br /&gt;
&lt;br /&gt;
=== Essential Interaction Parameters ===&lt;br /&gt;
Everything is in place:&lt;br /&gt;
* main and dedicated controllers;&lt;br /&gt;
* main and dedicated modules;&lt;br /&gt;
* different views and their forms.&lt;br /&gt;
&lt;br /&gt;
Just one big question remains: '''How to use them'''!&lt;br /&gt;
&lt;br /&gt;
Three parameters are mandatory for letting Joomla! do its job:&lt;br /&gt;
* option&lt;br /&gt;
* controller&lt;br /&gt;
* task&lt;br /&gt;
&lt;br /&gt;
These three parameters are almost self explaining ;). The ''option'' part when developing a component is easy, always assign your component name to it. For component development consider this one as a constant, of course the Joomla! engine has more options than only components.&lt;br /&gt;
&lt;br /&gt;
The ''controller'' and ''task'' parameters can be manipulated within your component anyway you want it to. &lt;br /&gt;
&lt;br /&gt;
==== How it all works together ====&lt;br /&gt;
Looking at the simplified MVC picture Joomla! the logical flow of interaction goes the following way:&lt;br /&gt;
# What is my entrance point? &lt;br /&gt;
#*The Joomla! engine discovers a logged in administrator and sets the entrance point to &amp;lt;root&amp;gt;/administrator/index.php otherwise it wil go to the &amp;lt;root&amp;gt;/index.php entrance.&lt;br /&gt;
# What option is requested? &lt;br /&gt;
#*The Joomla! engine reads the option variable and discovers that a component named &amp;lt;componentname&amp;gt; is requested. The entrance point becomes: &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
# Is there need to access a dedicated controller? &lt;br /&gt;
#* The Joomla! engine reads the controller variable and discovers that a dedicated controller is required: &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/controllers/&amp;lt;dedicatedcontroller&amp;gt;.php&lt;br /&gt;
# Is there a task that needs to be addressed? &lt;br /&gt;
#* The identified controller is handed the task value as parameter. &lt;br /&gt;
# The Model is derived from the controller and instantiated.&lt;br /&gt;
# The View and Form are set in the controller and initiated to become active.&lt;br /&gt;
&lt;br /&gt;
=== How to add interaction ===&lt;br /&gt;
Within HTML there are two common ways to interact with Joomla!:&lt;br /&gt;
# reference to a link&lt;br /&gt;
# form submission post / get&lt;br /&gt;
&lt;br /&gt;
==== Link reference for the Joomla! engine ====&lt;br /&gt;
Remember the '''activating tasks''' and '''resulting tasks''' mentioned earlier? Most activating tasks are initiated by a link. In case of the Library example the site section overview could be copied to the admin section. This default view will now be extended and every cell will become a link for editing the specific database element.&lt;br /&gt;
&lt;br /&gt;
Using the Library example, the template PHP code without looping control will contain the following code:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=users&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idu );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;name&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=books&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idb );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=relation&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idr );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;date&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within each clickable field the three mandatory parameters to manipulate MVC can be identified. In addition there is one user parameter for handling the correct index in the controller task (cid). These parameter are separated by '&amp;amp;'. Do not use spaces in your variables this might screw-up parameter handling in certain browsers. After looping all text entries will be clickable and trigger the corresponding controller with the correct row id in the associated table.&lt;br /&gt;
&lt;br /&gt;
 [Alice} | [One flew over ...] | [12 aug 2009]&lt;br /&gt;
 [Alice] | [Celeb talk]        | [12 aug 2009]&lt;br /&gt;
 [Mark]  | [Joomla!]           | [15 aug 2009]&lt;br /&gt;
&lt;br /&gt;
==== Posting Form Data to the Joomla! Engine ====&lt;br /&gt;
After being initiated by an activating task, an input form view might be the result. The sniplet code below could be the result of clicking the first cell of the default component view that is clicked for editing ([Alice]:cid=3). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; size=&amp;quot;32&amp;quot; maxlength=&amp;quot;250&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;name;?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;SubmitButton&amp;quot; value=&amp;quot;Save&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_library&amp;quot; /&amp;gt;                  // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;                    // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;save&amp;quot; /&amp;gt;                           // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;id&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;id; ?&amp;gt;&amp;quot; /&amp;gt;   // &amp;lt;-- user parameter, index in database for [Alice]&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three Joomla! mandatory parameters are placed as hidden in the form. Hidden parameters are not shown in any way but will be added to the posting data.&lt;br /&gt;
&lt;br /&gt;
''Tip'': when debugging this form, replace in the form tag &amp;lt;code&amp;gt;method=&amp;quot;post&amp;quot;&amp;lt;/code&amp;gt; temporarily with &amp;lt;code&amp;gt;method=&amp;quot;get&amp;quot;&amp;lt;/code&amp;gt;. All posted parameters will be shown in the URL of your browser. If the module is working undo this change. For one reason it looks sharper without all the parameters being shown in the URL and you avoid motivating people to manipulate the browser URL themselves. Of course one can look at the source code but using ''Post'' instead of ''Get'', but this eliminates the first 90% of the earth population. The other reason is more technical and the simple explanation is that post methods (i.e. method=&amp;quot;post&amp;quot;) can contain more (complex) data.&lt;br /&gt;
&lt;br /&gt;
''Remark'': In some developed modules you may notice that developers have also added the ''view'' parameter. This is bad programming whilst the controller(s) should take care of the ''view'' and the ''form''.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The use of the three mandatory parameters and the different access points are clarified. Let's do something with this knowledge and extend the Hello component to the administrative section in the succeeding articles of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5 talk:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T21:00:33Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: /* Move 'sharing template parts' note to another article? */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Renaming Part 4 ==&lt;br /&gt;
I checked out the comment below. ;-) Certainly, the multitude of hello(s) is confusing. What I did is to rename most everything.&lt;br /&gt;
&lt;br /&gt;
Whenever there's something like HelloWhateverHello, the first Hello represents the component front-end, and the second represents the view/model. By the way, each view has its own model, which I think is pretty much standard MVC architecture. On the other hand, one controller can control several views, although this example doesn't do so.&lt;br /&gt;
&lt;br /&gt;
Conversely, if you see HellosWhateverHello or HellosWhateverHellos, the first Hellos represents the adminstrative back-end, and the Hello or Hellos at the end refers to the view for editing one greeting or for listing all greetings, respectively. (Replace *Whatever* with Model, View, or Controller as appropriate.)&lt;br /&gt;
&lt;br /&gt;
So, I renamed all this to look like FrontWhateverContent, AdminWhateverEdit, AdminWhateverList, and so on. Then I had to rename directories and files as well, so that models/hello.php became models/content.php in the front-end and models/edit.php in the back-end. Likewise, views/hello/ becomes views/content/ in the front-end and views/edit in the back-end. Also, in the back-end only, models/hellos.php &amp;amp; views/hellos/ become models/list.php &amp;amp; views/list. Lastly, I changed controllers/hello.php to controllers/edit.php, to reflect the change from HellosControllerHello to AdminControllerEdit.&lt;br /&gt;
&lt;br /&gt;
Hope this clears things up a bit. It's a tedious refactoring exercise to do all this renaming, but it *is* doable. Good luck.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello&amp;quot; Overloaded ==&lt;br /&gt;
&lt;br /&gt;
I'm not sure if anybody checks this, but I'm having a difficult time making my own component out of this document. &lt;br /&gt;
&lt;br /&gt;
The first three chapters of this documentation are great.  They are simple and to the point.  The fourth, this page, is very confusing.  &lt;br /&gt;
&lt;br /&gt;
First off, the word &amp;quot;hello&amp;quot; is way over loaded.  In the Creating an Admin Interface there are two models and two views:&lt;br /&gt;
Hello  and Hellos&lt;br /&gt;
&lt;br /&gt;
It's impossible to know why we need two different models.  Why cant we use one model and two views?&lt;br /&gt;
Its totally impossible to understand which one gets called when.&lt;br /&gt;
&lt;br /&gt;
I have discovered there are a lot of name conventions used here, but after reading this document over and over, it's still very difficult to know what the conventions are.  This is probably stemming from &amp;quot;hello&amp;quot; being way too overloaded.&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;get()&amp;quot; in JView is called in both views.  It is supposed to automatically know which model to use, and which method to call.  However, I don't think I followed the naming convention correctly, as it simply is not working (I get empty data with no error).&lt;br /&gt;
&lt;br /&gt;
I think I could untangle the naming conventions myself, but with &amp;quot;hello&amp;quot; so overloaded in this example, I am having no luck guessing.&lt;br /&gt;
&lt;br /&gt;
== Great up to chapter 3 ==&lt;br /&gt;
&lt;br /&gt;
The documentation was great upto chapter 3.  Got confused in 4th chapter.&lt;br /&gt;
&lt;br /&gt;
Also, this doesn't cover how to create sub menus for a component [http://www.vojtechovsky.net/joomla/component/tutorial-joomla-1.5-free-component.png See example]&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvement ==&lt;br /&gt;
&lt;br /&gt;
*This is a really long and tedious tutorial with a lot of very useful information in it. I think it would help to break it down into parts or creating separate tutorials covering this material.&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== REALLY GOOD DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
Apart from a small error in part 4 which I have now corrected&lt;br /&gt;
&lt;br /&gt;
did read: &lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;gt;controller=hello&amp;gt;task=edit&amp;gt;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
now reads:&lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;amp;controller=hello&amp;amp;task=edit&amp;amp;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Jamesconroyuk|James Conroy]] 16:29, 16 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Excellent documentation, but could use a slight extension ==&lt;br /&gt;
&lt;br /&gt;
Have been able to create components using this set of tutorials, but am missing how to use non-string based data in the administrator interface.&lt;br /&gt;
&lt;br /&gt;
The admin form only has one field (a string) and it might be useful to have either examples of, or a link to some other examples of how to view / capture other types of data such as :&lt;br /&gt;
&lt;br /&gt;
Checkboxes (boolean)&lt;br /&gt;
Dropdown menus / radio button (int or string)&lt;br /&gt;
&lt;br /&gt;
While it is easy to add the HTML form components (and even populate them with the values from the model), it isn't immediately clear how to recapture the data of these alternative types.&lt;br /&gt;
&lt;br /&gt;
There is another tutorial I have seen on this wiki that has the &amp;quot;build in a rich editor&amp;quot; function, could use a link from this page.&lt;br /&gt;
&lt;br /&gt;
[[User:craigmoore|Craig Moore]] 13:06, 09 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Really a great tutorial ... but too many hello.php's ==&lt;br /&gt;
&lt;br /&gt;
First of all, great tutorial, a very good effort to explain the basics.&lt;br /&gt;
&lt;br /&gt;
Maybe just my problem:&lt;br /&gt;
I personally prefer to edit several files at a time, what means, i have 10-20 tabs open in my editor (UltraEdit).&lt;br /&gt;
In my case that means, that my editor tab-bar looks like:&lt;br /&gt;
&lt;br /&gt;
hello.php - controller.php - hello.php - hello.php - hello.php - controller.php - hellos.php - and so on ...&lt;br /&gt;
&lt;br /&gt;
I would kiss the shoes of everyone who would:&lt;br /&gt;
&lt;br /&gt;
1.) precisely explain naming conventions for files of components (which file may, which file must be called hello.php)&lt;br /&gt;
&lt;br /&gt;
2.) resolve the hello.php-maze in this tutorial with more speaking filenames&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the authors, best regards and a hello to everyone&lt;br /&gt;
&lt;br /&gt;
Jochen&lt;br /&gt;
&lt;br /&gt;
== Good Tutorial ==&lt;br /&gt;
&lt;br /&gt;
Suggestion for improvement.&lt;br /&gt;
&lt;br /&gt;
I also found Part 4 hard to follow and lacking explanation of why various names/paths/parameters were chosen. For a beginner trying to understand Joomla! MVC conventions I found another component backend howto that gave more of the details I was looking for: [http://www.scribd.com/doc/11515210/Joomla-Component-Development-Backend]&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone else.&lt;br /&gt;
-Mike&lt;br /&gt;
[[User:M3t00|M3t00]] 15:55, 10 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== RE: Renaming Part 4 ==&lt;br /&gt;
&lt;br /&gt;
I'm actually even more confused now.&lt;br /&gt;
&lt;br /&gt;
Only by reading through this discussion did it occur to me that you need to use multiple views to handle the various tasks in the controller.  That seems like an important concept that is not entirely obvious to someone trying to learn the joomla framework.  And yet now that I recognize the concept, it's not obvious what the best practices would be to implement multiple views.  I'll work on it.&lt;br /&gt;
&lt;br /&gt;
Despite that, this is still an extremely valuable tutorial -- especially considering that much of the rest of the API documentation is sparse at best.  The entire joomla documentation in general could definitely benefit from a bit of a re-org.&lt;br /&gt;
&lt;br /&gt;
EDIT:  OK. So after reading through part 4 of the tutorial again, it is clear to me about the multiple views.  So, looking back, it would have been valuable to explain that in the introduction.  Something like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Now we will create an administrator section to create the greetings.  It uses 2 views.  The first view, called Hellos, will present a list of greetings with the ability to add new ones or remove old ones.  The second view will allow the user to edit each greeting.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
That would have helped tremendously.  In any case, I got it now.  I feel a little stupid for missing that the first time around, but maybe it was because it was late at night.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Component Hello, Site Hello, Admin Hellos, Admin Hello ==&lt;br /&gt;
&lt;br /&gt;
Chapters 1 and 2 were easy to follow. Chapter 3 contains some glitches that took me some time to understand but reading this chapter made everything really confusing. It took me a time to realise the Hello's, just my subject with only the focus clarifies already some impact. After re- and re-re reading it becomes clear to me what is meant. After re-reading the reason for using Hellos (as an Admin List) became clear and re-re- reading made the Admin single view/tmpl Hello obvious again. Why not rename these to:&lt;br /&gt;
&lt;br /&gt;
* Manage_Hello_List&lt;br /&gt;
* Manage_Hello_Item&lt;br /&gt;
&lt;br /&gt;
This would make everything much more readable, would set a clear context and increase the ease of understanding.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 12:37, 3 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Splitting up article into two articles ==&lt;br /&gt;
&lt;br /&gt;
If the writers have no objection I propose to split this chapter into two. There are multiple good reasons for doing so but the most important three are the following:&lt;br /&gt;
*This chapter is huge making reading a tedious job, overwhelming and scaring away the once that this article is intended for.&lt;br /&gt;
*This article has two logical section so braking it at '''Adding Functionality''' doesn't harm any body and helps newbies in achieving results. Being able to check a chapter and visually see the intermediate result is always the best motivation.&lt;br /&gt;
*Technically the same split at '''Adding Functionality''' is making a difference in know-how. the first part is not really new when you followed the ''site'' part examples '''Developing a Model-View-Controller Component 1, 2 and 3'''. Old wine in new bottles. The second part really goes into depth and requires good basic programming skills and a general understanding of HTML form handling.&lt;br /&gt;
If no objections I will initiate this spilt soon.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 07:34, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think splitting it is a good idea and should improve readability.  I look forward to seeing your improvements. [[User:Chris Davenport|Chris Davenport]] 08:51, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Confusing ==&lt;br /&gt;
&lt;br /&gt;
I agree Part 4 gets confusing. I see what it is attempting to demonstrate but it is confusing to jump into a completely new example rather than use an example from the onset that could cover the details of the controls in the Admin area. &lt;br /&gt;
&lt;br /&gt;
Maybe choosing a slightly more complex example than 'Hello world!' from the beginning?&lt;br /&gt;
&lt;br /&gt;
Will be good to see this article when it's been updated!&lt;br /&gt;
&lt;br /&gt;
== Hint in 'Mapping' section ==&lt;br /&gt;
&lt;br /&gt;
I'm removing the so-called hint from the section titled 'Mapping a Joomla! MVC component from the example.'&lt;br /&gt;
&lt;br /&gt;
I've never seen the 'registered' method, and I think it's bogus.&lt;br /&gt;
&lt;br /&gt;
Please respond if I'm wrong.&lt;br /&gt;
&lt;br /&gt;
[[User:HobbesPDX|HobbesPDX]] 20:19, 6 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Move 'sharing template parts' note to another article? ==&lt;br /&gt;
&lt;br /&gt;
I'd like to suggest to the community, that the expansive note, in section 3.2.3, regarding sharing template/view elements, using include/require, should be moved to another article.&lt;br /&gt;
&lt;br /&gt;
It's a very helpful point, but I feel it adds unnecessary and extra information to an already complex document.&lt;br /&gt;
&lt;br /&gt;
Discuss. :-)&lt;br /&gt;
&lt;br /&gt;
--[[User:HobbesPDX|HobbesPDX]] 21:00, 6 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T20:30:08Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: clean-up, consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
| type  = notice&lt;br /&gt;
| image = notice&lt;br /&gt;
| text  = This {{thingamabob}} has been divided into three sections, two new articles are added. Especially this page needs a review&lt;br /&gt;
&amp;lt;small&amp;gt;(August 2009)&amp;lt;/small&amp;gt;}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first three tutorials, we have developed a MVC component that retrieves its data from a table in the database. Currently, there is no way to add data to the database except to do it manually using another tool. In the next articles of this tutorial, we will develop an administrator section for our component which will make it possible to manage the entries in the database.&lt;br /&gt;
&lt;br /&gt;
This article, [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface | Part 4 - Creating an Administrator Interface]], will be an article with no new source code for our Hello component but will describe some basic details of the MVC pattern. In the frontend solution (site section) we developed the first part of our component. The frontend solution is based upon default Controllers, Views and Templates and you were &amp;quot;taken by the hand&amp;quot; and &amp;quot;left to trust&amp;quot; the default handling of the code. This is going to change in the Backend or Administration section of our Hello component - we will have to develop all of the code that manages the application flow.&lt;br /&gt;
&lt;br /&gt;
== Site / Admin ==&lt;br /&gt;
Joomla! is a content management system. The '''frontend''' is used for presenting the users with content and allows certain logged in users to manipulate the content. The '''backend''' is responsible for administering the website framework (structuring / managing / controlling / maintaining). This division between (frontend) site-content and (backend) administration is a fundamental aspect of the Joomla! architecture.&lt;br /&gt;
&lt;br /&gt;
=== Entrance points ===&lt;br /&gt;
From the XML file of our frontend example it was already obvious that there would be an administration part:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!--  Administration Menu Section --&amp;gt; &lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt; &lt;br /&gt;
  &amp;lt;!--  Administration Main File Copy Section --&amp;gt; &lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;/files&amp;gt;&lt;br /&gt;
  &amp;lt;/administration&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Only the .sql files were of use and only during installation for our frontend view, the other two files have no content besides generating a blank page. Access your websites' file system at your hosting provider (or on your own server) and browse through the directories after installing the frontend com_hello component. You may have noticed that our Hello component is to be found twice:&lt;br /&gt;
 &amp;lt;root&amp;gt;/components/com_hello&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/components/com_hello&lt;br /&gt;
&lt;br /&gt;
These two sub-directories link to the previously explained site-content and administration. Administrator interactions explicitly go via the administrator sub-directory, where guest or registered users will enter the default entrance on the root:&lt;br /&gt;
 &amp;lt;root&amp;gt;/index.php&lt;br /&gt;
Administrative users will have to log in, and after logging in they will enter your site via:&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/index.php&lt;br /&gt;
&lt;br /&gt;
With the different access points it is easy to grasp that with setting up the administrator section the naming conventions have no dependency with the site section. Whilst the MVC pattern is also applicable for the administrator section this implies that identical Controls, Views and Models naming can (and sometimes must) be used as in the site section.&lt;br /&gt;
&lt;br /&gt;
== MVC pattern interaction ==&lt;br /&gt;
[[image:MVC joomla.png|frameless|right]]In [[Developing a Model-View-Controller Component - Part 1]] the figure on the right was used to explain the focus of the first three parts of this ''Developing a Model-View-Controller Component tutorial''. Now we will use this figure to explain how decisions are made on what is going to be displayed and how to manipulate this.&lt;br /&gt;
&lt;br /&gt;
=== Example roll-out ===&lt;br /&gt;
For explanation purposes an easy to grasp example will be used. A library has the main function of lending books to registered users. Simply laid out there are three tables:&lt;br /&gt;
* users&lt;br /&gt;
* books&lt;br /&gt;
* relation&lt;br /&gt;
&lt;br /&gt;
Lets keep it all very simple. The users are addressed by Id and Name. The books are identified by Id and Title and the relation contains both Ids and the date of lending.&lt;br /&gt;
&lt;br /&gt;
[[image:Library Example.png|400px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
The example is carefully chosen and will help in explaining the Joomla! architecture in more detail. The administrative side of our Hello component is not even that complex with only one table to manage. After the explanation of this chapter it should be easy to follow the tutorial in the succeeding chapters&lt;br /&gt;
&lt;br /&gt;
=== Mapping a Joomla! MVC component from the example ===&lt;br /&gt;
In this example we will assume that administrative actions (add, edit, delete) are tasks that are to be performed by the administrator. For the frontend user only the view of the Relation table is interesting (&amp;quot;when do I have to bring back the books?&amp;quot;). This example shows the entire list and ignores all privacy stuff that could be taken care of by letting registered users only see their own books.&lt;br /&gt;
&lt;br /&gt;
Just like our frontend Hello component, for this library component only the default view is being used in the frontend. It lists the relational table, left joining the other two tables to obtain a human readable list of books with their corresponding due date. &lt;br /&gt;
 Alice | One flew over ... | 12-aug-2009&lt;br /&gt;
 Alice | Celeb talk        | 12-aug-2009&lt;br /&gt;
 Mark  | Joomla!           | 15-aug-2009&lt;br /&gt;
&lt;br /&gt;
With respect to the administration part it is important to understand that we have one default and three dedicated views, each controlling three tasks:&lt;br /&gt;
* &amp;lt;Component name default view&amp;gt;&lt;br /&gt;
* User administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Book administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Relation administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
The main controller of the admin section needs to differentiate between the different Adds, Changes or Deletes that are requested. This is taken care of by creating sub-controllers for each view for handling their specific tasks.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controller.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/relation.php&lt;br /&gt;
&lt;br /&gt;
The controller is an important part of the MVC pattern. Not only does it take care of the requested tasks, it is also the initiator of instantiating the model with the same name and it is responsible for setting the view and the desired form for that view. The controller really justifies its name. &lt;br /&gt;
&lt;br /&gt;
Within the controller it is good to make a difference between '''activating tasks''' (for example the edit selection from a menu) and '''resulting tasks''' (for example the result of an edit trigger is the posted data).&lt;br /&gt;
&lt;br /&gt;
Typical controller functions look like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function &amp;lt;activating task&amp;gt;()  // &amp;lt;-- edit, add, delete &lt;br /&gt;
{&lt;br /&gt;
    JRequest::setVar( 'view', '[&amp;lt;componentname&amp;gt; | users | books | relation ]' );&lt;br /&gt;
    JRequest::setVar( 'layout', 'default'  );     // &amp;lt;-- The default form is named here, but in&lt;br /&gt;
                                                  // some complex views, multiple layouts might&lt;br /&gt;
                                                  // be needed.&lt;br /&gt;
    parent::display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function &amp;lt;resulting task&amp;gt;()  // &amp;lt;-- save, remove&lt;br /&gt;
{&lt;br /&gt;
	$model = $this-&amp;gt;getModel('[&amp;lt;componentname&amp;gt; | users | books | relation ]');&lt;br /&gt;
	if(!$model-&amp;gt;action() ) {    // &amp;lt;-- action could be delete() or store()&lt;br /&gt;
		$msg = JText::_( 'Error: Could not perform action' );&lt;br /&gt;
	} else {&lt;br /&gt;
		$msg = JText::_( 'Action executed' );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;setRedirect( 'index.php?option=&amp;lt;componentname&amp;gt;', $msg );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A controller takes care of all tasks for that dedicated controller. After completing a resulting task the module will return to the main administration entrance point for that component, the main controller with the default view. Activating tasks enforce a new view with a form to display after first defining it.&lt;br /&gt;
&lt;br /&gt;
The explicit definition of the form within a view might raise some eyebrows but our examples are too simple. For the general understanding and consistency this field should mostly be ''default''. In complex views multiple forms could be defined within one view.&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
The Controllers interact with their equally named Model counter part. In the frontend view the Model was only used to retrieve data. The backend has more controllers and thus also more model files. The backend model files not only are responsible for delivering data to the viewer but also take care of tasks initiated from the controller. A good model contains all actions required to manage a single table in the database.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/relation.php&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
Separate views are of course also required. For views and subsequent forms no forced naming conventions are required (linking to views is taken care of in the controller). In the following listing the Administrative tasks are identified as a subset for the different views. This choice is totally random and maybe even non-logical but that doesn't matter for the explanation. Just for example purposes I added also a different view, a delete view, that could be used for all the deletes for all administrative tasks asking an &amp;quot;Are you sure&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/&amp;lt;componentname&amp;gt;/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/users/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/books/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/relation/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;amp;nbsp;&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/delete/view.html.php    + .../tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
''Note'': In general it is good practice to maintain one form per view because the view.html.php still has to deliver the content. With some basic logic you can enable, disable certain content but if this logic is becoming too complex start considering splitting up the view. &lt;br /&gt;
&lt;br /&gt;
''Note'': Sharing template parts amongst the different views (for uniform layouting of headers and titles of your component) can be done using the PHP &amp;lt;code&amp;gt;include / require;&amp;lt;/code&amp;gt;. There is one slight problem ... how to make the logical reference? In my modules I have a collector bin for general to use sniplets. Because it involved the views and forms I put this general bin in the views directory. The variable $pathToGeneralView needs to be defined somewhere in the first lines of your file and you have to make sure that the logical reference path is correct (the '..'s). In the following example the files marked with a '*' use the following code:&lt;br /&gt;
&lt;br /&gt;
 ./com_compname/views/general/navigate.header.php  &amp;lt;-- sniplet code for the header&lt;br /&gt;
 ./com_compname/views/general/navigate.footer.php  &amp;lt;-- sniplet code for the footer&lt;br /&gt;
 ./com_compname/views/mngtable1/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable1/tmpl/default.php *&lt;br /&gt;
 ./com_compname/views/mngtable2/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable2/tmpl/default.php *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = strchr(dirname(__FILE__), dirname($_SERVER['SCRIPT_NAME']));&lt;br /&gt;
$pathToGeneralView = str_replace(dirname($_SERVER['SCRIPT_NAME']),'.',$pathToGeneralView );&lt;br /&gt;
$pathToGeneralView = $pathToGeneralView . &amp;quot;/../../general/&amp;quot;;  &amp;lt;-- returning path from current position. &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Another Way to do the same thing:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = JPATH_COMPONENT_ADMINISTRATOR.DS. &amp;quot;views&amp;quot;.DS.&amp;quot;general&amp;quot;.DS;  &amp;lt;-- will return 'path/Joomla/administrator/components/com_example/views/general/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': Giving the forms logical instead of the ''default'' naming is of course handy when having a lot of different views. Having also that much ''default'' forms could make you easily loose oversight. On the other hand the view.html.php can not be renamed and you are always forced to look at the directory name for the view name you are working in.&lt;br /&gt;
&lt;br /&gt;
=== Essential Interaction Parameters ===&lt;br /&gt;
Everything is in place:&lt;br /&gt;
* main and dedicated controllers;&lt;br /&gt;
* main and dedicated modules;&lt;br /&gt;
* different views and their forms.&lt;br /&gt;
&lt;br /&gt;
Just one big question remains: '''How to use them'''!&lt;br /&gt;
&lt;br /&gt;
Three parameters are mandatory for letting Joomla! do its job:&lt;br /&gt;
* option&lt;br /&gt;
* controller&lt;br /&gt;
* task&lt;br /&gt;
&lt;br /&gt;
These three parameters are almost self explaining ;). The ''option'' part when developing a component is easy, always assign your component name to it. For component development consider this one as a constant, of course the Joomla! engine has more options than only components.&lt;br /&gt;
&lt;br /&gt;
The ''controller'' and ''task'' parameters can be manipulated within your component anyway you want it to. &lt;br /&gt;
&lt;br /&gt;
==== How it all works together ====&lt;br /&gt;
Looking at the simplified MVC picture Joomla! the logical flow of interaction goes the following way:&lt;br /&gt;
# What is my entrance point? &lt;br /&gt;
#*The Joomla! engine discovers a logged in administrator and sets the entrance point to &amp;lt;root&amp;gt;/administrator/index.php otherwise it wil go to the &amp;lt;root&amp;gt;/index.php entrance.&lt;br /&gt;
# What option is requested? &lt;br /&gt;
#*The Joomla! engine reads the option variable and discovers that a component named &amp;lt;componentname&amp;gt; is requested. The entrance point becomes: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
# Is there need to access a dedicated controller? &lt;br /&gt;
#* The Joomla! engine reads the controller variable and discovers that a dedicated controller is required: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/controllers/&amp;lt;dedicatedcontroller&amp;gt;.php&lt;br /&gt;
# Is there a task that needs to be addressed? &lt;br /&gt;
#* The identified controller is handed the task value as parameter. &lt;br /&gt;
# The Model is derived from the controller and instantiated.&lt;br /&gt;
# The View and Form are set in the controller and initiated to become active.&lt;br /&gt;
&lt;br /&gt;
((Remark: the text states that the path is &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php, but I am pretty sure that this is an error. It probably should say &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php. Can somebody please verify this and correct it?))&lt;br /&gt;
&lt;br /&gt;
=== How to add interaction ===&lt;br /&gt;
Within HTML there are two common ways to interact with Joomla!:&lt;br /&gt;
# reference to a link&lt;br /&gt;
# form submission post / get&lt;br /&gt;
&lt;br /&gt;
==== Link reference for the Joomla! engine ====&lt;br /&gt;
Remember the '''activating tasks''' and '''resulting tasks''' mentioned earlier? Most activating tasks are initiated by a link. In case of the Library example the site section overview could be copied to the admin section. This default view will now be extended and every cell will become a link for editing the specific database element.&lt;br /&gt;
&lt;br /&gt;
Using the Library example, the template PHP code without looping control will contain the following code:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=users&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idu );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;name&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=books&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idb );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=relation&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idr );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;date&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within each clickable field the three mandatory parameters to manipulate MVC can be identified. In addition there is one user parameter for handling the correct index in the controller task (cid). These parameter are separated by '&amp;amp;'. Do not use spaces in your variables this might screw-up parameter handling in certain browsers. After looping all text entries will be clickable and trigger the corresponding controller with the correct row id in the associated table.&lt;br /&gt;
&lt;br /&gt;
 [Alice} | [One flew over ...] | [12 aug 2009]&lt;br /&gt;
 [Alice] | [Celeb talk]        | [12 aug 2009]&lt;br /&gt;
 [Mark]  | [Joomla!]           | [15 aug 2009]&lt;br /&gt;
&lt;br /&gt;
==== Posting Form Data to the Joomla! Engine ====&lt;br /&gt;
After being initiated by an activating task, an input form view might be the result. The sniplet code below could be the result of clicking the first cell of the default component view that is clicked for editing ([Alice]:cid=3). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; size=&amp;quot;32&amp;quot; maxlength=&amp;quot;250&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;name;?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;SubmitButton&amp;quot; value=&amp;quot;Save&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_library&amp;quot; /&amp;gt;                  // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;                    // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;save&amp;quot; /&amp;gt;                           // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;id&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;id; ?&amp;gt;&amp;quot; /&amp;gt;   // &amp;lt;-- user parameter, index in database for [Alice]&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three Joomla! mandatory parameters are placed as hidden in the form. Hidden parameters are not shown in any way but will be added to the posting data.&lt;br /&gt;
&lt;br /&gt;
''Tip'': when debugging this form, replace in the form tag &amp;lt;code&amp;gt;method=&amp;quot;post&amp;quot;&amp;lt;/code&amp;gt; temporarily with &amp;lt;code&amp;gt;method=&amp;quot;get&amp;quot;&amp;lt;/code&amp;gt;. All posted parameters will be shown in the URL of your browser. If the module is working undo this change. For one reason it looks sharper without all the parameters being shown in the URL and you avoid motivating people to manipulate the browser URL themselves. Of course one can look at the source code but using ''Post'' instead of ''Get'', but this eliminates the first 90% of the earth population. The other reason is more technical and the simple explanation is that post methods (i.e. method=&amp;quot;post&amp;quot;) can contain more (complex) data.&lt;br /&gt;
&lt;br /&gt;
''Remark'': In some developed modules you may notice that developers have also added the ''view'' parameter. This is bad programming whilst the controller(s) should take care of the ''view'' and the ''form''.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The use of the three mandatory parameters and the different access points are clarified. Let's do something with this knowledge and extend the Hello component to the administrative section in the succeeding articles of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T20:20:27Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: removed potentially bogus 'hint'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
| type  = notice&lt;br /&gt;
| image = notice&lt;br /&gt;
| text  = This {{thingamabob}} has been divided into three sections, two new articles are added. Especially this page needs a review&lt;br /&gt;
&amp;lt;small&amp;gt;(August 2009)&amp;lt;/small&amp;gt;}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first three tutorials, we have developed a MVC component that retrieves its data from a table in the database. Currently, there is no way to add data to the database except to do it manually using another tool. In the next articles of this tutorial, we will develop an administrator section for our component which will make it possible to manage the entries in the database.&lt;br /&gt;
&lt;br /&gt;
This article, [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface | Part 4 - Creating an Administrator Interface]], will be an article with no new source code for our Hello component but will describe some basic details of the MVC pattern. In the frontend solution (site section) we developed the first part of our component. The frontend solution is based upon default Controllers, Views and Templates and you were &amp;quot;taken by the hand&amp;quot; and &amp;quot;left to trust&amp;quot; the default handling of the code. This is going to change in the Backend or Administration section of our Hello component - we will have to develop all of the code that manages the application flow.&lt;br /&gt;
&lt;br /&gt;
== Site / Admin ==&lt;br /&gt;
Joomla! is a content management system. The '''frontend''' is used for presenting the users with content and allows certain logged in users to manipulate the content. The '''backend''' is responsible for administering the website framework (structuring / managing / controlling / maintaining). This division between (frontend) site-content and (backend) administration is a fundamental aspect of the Joomla! architecture.&lt;br /&gt;
&lt;br /&gt;
=== Entrance points ===&lt;br /&gt;
From the XML file of our frontend example it was already obvious that there would be an administration part:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!--  Administration Menu Section --&amp;gt; &lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt; &lt;br /&gt;
  &amp;lt;!--  Administration Main File Copy Section --&amp;gt; &lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;/files&amp;gt;&lt;br /&gt;
  &amp;lt;/administration&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Only the .sql files were of use and only during installation for our frontend view, the other two files have no content besides generating a blank page. Access your websites' file system at your hosting provider (or on your own server) and browse through the directories after installing the frontend com_hello component. You may have noticed that our Hello component is to be found twice:&lt;br /&gt;
 &amp;lt;root&amp;gt;/components/com_hello&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/components/com_hello&lt;br /&gt;
&lt;br /&gt;
These two sub-directories link to the previously explained site-content and administration. Administrator interactions explicitly go via the administrator sub-directory, where guest or registered users will enter the default entrance on the root:&lt;br /&gt;
 &amp;lt;root&amp;gt;/index.php&lt;br /&gt;
Administrative users will have to log in, and after logging in they will enter your site via:&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/index.php&lt;br /&gt;
&lt;br /&gt;
With the different access points it is easy to grasp that with setting up the administrator section the naming conventions have no dependency with the site section. Whilst the MVC pattern is also applicable for the administrator section this implies that identical Controls, Views and Models naming can (and sometimes must) be used as in the site section.&lt;br /&gt;
&lt;br /&gt;
== MVC pattern interaction ==&lt;br /&gt;
[[image:MVC joomla.png|frameless|right]]In [[Developing a Model-View-Controller Component - Part 1]] the figure on the right was used to explain the focus of the first three parts of this ''Developing a Model-View-Controller Component tutorial''. Now we will use this figure to explain how decisions are made on what is going to be displayed and how to manipulate this.&lt;br /&gt;
&lt;br /&gt;
=== Example roll-out ===&lt;br /&gt;
For explanation purposes an easy to grasp example will be used. A library has the main function of lending books to registered users. Simply laid out there are three tables:&lt;br /&gt;
* users&lt;br /&gt;
* books&lt;br /&gt;
* relation&lt;br /&gt;
&lt;br /&gt;
Lets keep it all very simple. The users are addressed by Id and Name. The books are identified by Id and Title and the relation contains both Ids and the date of lending.&lt;br /&gt;
&lt;br /&gt;
[[image:Library Example.png|400px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
The example is carefully chosen and will help in explaining the Joomla! architecture in more detail. The administrative side of our Hello component is not even that complex with only one table to manage. After the explanation of this chapter it should be easy to follow the tutorial in the succeeding chapters&lt;br /&gt;
&lt;br /&gt;
=== Mapping a Joomla! MVC component from the example ===&lt;br /&gt;
In this example we will assume that administrative actions (add, edit, delete) are tasks that are to be performed by the administrator. For the frontend user only the view of the Relation table is interesting (&amp;quot;when do I have to bring back the books?&amp;quot;). This example shows the entire list and ignores all privacy stuff that could be taken care of by letting registered users only see their own books.&lt;br /&gt;
&lt;br /&gt;
Just like our frontend Hello component, for this library component only the default view is being used in the frontend. It lists the relational table, left joining the other two tables to obtain a human readable list of lend books. &lt;br /&gt;
 Alice | One flew over ... | 12 aug 2009&lt;br /&gt;
 Alice | Celeb talk        | 12 aug 2009&lt;br /&gt;
 Mark  | Joomla!           | 15 aug 2009&lt;br /&gt;
&lt;br /&gt;
With respect to the administration part it is important to understand that we have one default and three dedicated views, each controlling three tasks:&lt;br /&gt;
* &amp;lt;Component name default view&amp;gt;&lt;br /&gt;
* User administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Book administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Relation administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
The main controller of the admin section needs to differentiate between the different Adds, Changes or Deletes that are requested. This is taken care of by creating sub-controllers for each view for handling their specific tasks.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controller.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/relation.php&lt;br /&gt;
&lt;br /&gt;
The controller is an important part of the MVC pattern. Not only does it take care of the requested tasks, it is also the initiator of instantiating the model with the same name and it is responsible for setting the view and the desired form for that view. The controller really justifies its name. &lt;br /&gt;
&lt;br /&gt;
Within the controller it is good to make a difference between '''activating tasks''' (for example the edit selection from a menu) and '''resulting tasks''' (for example the result of an edit trigger is the posted data).&lt;br /&gt;
&lt;br /&gt;
Typical controller functions look like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function &amp;lt;activating task&amp;gt;()  // &amp;lt;-- edit, add, delete &lt;br /&gt;
{&lt;br /&gt;
    JRequest::setVar( 'view', '[&amp;lt;componentname&amp;gt; | users | books | relation ]' );&lt;br /&gt;
    JRequest::setVar( 'layout', 'default'  );     // &amp;lt;-- The default form is named here but in complex &lt;br /&gt;
                                                  //     views multiple layouts might be needed.&lt;br /&gt;
    parent::display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function &amp;lt;resulting task&amp;gt;()  // &amp;lt;-- save, remove&lt;br /&gt;
{&lt;br /&gt;
	$model = $this-&amp;gt;getModel('[&amp;lt;componentname&amp;gt; | users | books | relation ]');&lt;br /&gt;
	if(!$model-&amp;gt;action() ) {    // &amp;lt;-- action could be delete() or store()&lt;br /&gt;
		$msg = JText::_( 'Error: Could not perform action' );&lt;br /&gt;
	} else {&lt;br /&gt;
		$msg = JText::_( 'Action executed' );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;setRedirect( 'index.php?option=&amp;lt;componentname&amp;gt;', $msg );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A controller takes care of all tasks for that dedicated controller. After completing a resulting task the module will return to the main administration entrance point for that component, the main controller with the default view. Activating tasks enforce a new view with a form to display after first defining it.&lt;br /&gt;
&lt;br /&gt;
The explicit definition of the form within a view might raise some eyebrows but our examples are too simple. For the general understanding and consistency this field should mostly be ''default''. In complex views multiple forms could be defined within one view.&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
The Controllers interact with their equally named Model counter part. In the frontend view the Model was only used to retrieve data. The backend has more controllers and thus also more model files. The backend model files not only are responsible for delivering data to the viewer but also take care of tasks initiated from the controller. A good model contains all actions required to manage a single table in the database.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/relation.php&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
Separate views are of course also required. For views and subsequent forms no forced naming conventions are required (linking to views is taken care of in the controller). In the following listing the Administrative tasks are identified as a subset for the different views. This choice is totally random and maybe even non-logical but that doesn't matter for the explanation. Just for example purposes I added also a different view, a delete view, that could be used for all the deletes for all administrative tasks asking an &amp;quot;Are you sure&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/&amp;lt;componentname&amp;gt;/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/users/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/books/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/relation/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;amp;nbsp;&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/delete/view.html.php    + .../tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
''Note'': In general it is good practice to maintain one form per view because the view.html.php still has to deliver the content. With some basic logic you can enable, disable certain content but if this logic is becoming too complex start considering splitting up the view. &lt;br /&gt;
&lt;br /&gt;
''Note'': Sharing template parts amongst the different views (for uniform layouting of headers and titles of your component) can be done using the PHP &amp;lt;code&amp;gt;include / require;&amp;lt;/code&amp;gt;. There is one slight problem ... how to make the logical reference? In my modules I have a collector bin for general to use sniplets. Because it involved the views and forms I put this general bin in the views directory. The variable $pathToGeneralView needs to be defined somewhere in the first lines of your file and you have to make sure that the logical reference path is correct (the '..'s). In the following example the files marked with a '*' use the following code:&lt;br /&gt;
&lt;br /&gt;
 ./com_compname/views/general/navigate.header.php  &amp;lt;-- sniplet code for the header&lt;br /&gt;
 ./com_compname/views/general/navigate.footer.php  &amp;lt;-- sniplet code for the footer&lt;br /&gt;
 ./com_compname/views/mngtable1/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable1/tmpl/default.php *&lt;br /&gt;
 ./com_compname/views/mngtable2/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable2/tmpl/default.php *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = strchr(dirname(__FILE__), dirname($_SERVER['SCRIPT_NAME']));&lt;br /&gt;
$pathToGeneralView = str_replace(dirname($_SERVER['SCRIPT_NAME']),'.',$pathToGeneralView );&lt;br /&gt;
$pathToGeneralView = $pathToGeneralView . &amp;quot;/../../general/&amp;quot;;  &amp;lt;-- returning path from current position. &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Another Way to do the same thing:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = JPATH_COMPONENT_ADMINISTRATOR.DS. &amp;quot;views&amp;quot;.DS.&amp;quot;general&amp;quot;.DS;  &amp;lt;-- will return 'path/Joomla/administrator/components/com_example/views/general/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': Giving the forms logical instead of the ''default'' naming is of course handy when having a lot of different views. Having also that much ''default'' forms could make you easily loose oversight. On the other hand the view.html.php can not be renamed and you are always forced to look at the directory name for the view name you are working in.&lt;br /&gt;
&lt;br /&gt;
=== Essential Interaction Parameters ===&lt;br /&gt;
Everything is in place:&lt;br /&gt;
* main and dedicated controllers;&lt;br /&gt;
* main and dedicated modules;&lt;br /&gt;
* different views and their forms.&lt;br /&gt;
&lt;br /&gt;
Just one big question remains: '''How to use them'''!&lt;br /&gt;
&lt;br /&gt;
Three parameters are mandatory for letting Joomla! do its job:&lt;br /&gt;
* option&lt;br /&gt;
* controller&lt;br /&gt;
* task&lt;br /&gt;
&lt;br /&gt;
These three parameters are almost self explaining ;). The ''option'' part when developing a component is easy, always assign your component name to it. For component development consider this one as a constant, of course the Joomla! engine has more options than only components.&lt;br /&gt;
&lt;br /&gt;
The ''controller'' and ''task'' parameters can be manipulated within your component anyway you want it to. &lt;br /&gt;
&lt;br /&gt;
==== How it all works together ====&lt;br /&gt;
Looking at the simplified MVC picture Joomla! the logical flow of interaction goes the following way:&lt;br /&gt;
# What is my entrance point? &lt;br /&gt;
#*The Joomla! engine discovers a logged in administrator and sets the entrance point to &amp;lt;root&amp;gt;/administrator/index.php otherwise it wil go to the &amp;lt;root&amp;gt;/index.php entrance.&lt;br /&gt;
# What option is requested? &lt;br /&gt;
#*The Joomla! engine reads the option variable and discovers that a component named &amp;lt;componentname&amp;gt; is requested. The entrance point becomes: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
# Is there need to access a dedicated controller? &lt;br /&gt;
#* The Joomla! engine reads the controller variable and discovers that a dedicated controller is required: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/controllers/&amp;lt;dedicatedcontroller&amp;gt;.php&lt;br /&gt;
# Is there a task that needs to be addressed? &lt;br /&gt;
#* The identified controller is handed the task value as parameter. &lt;br /&gt;
# The Model is derived from the controller and instantiated.&lt;br /&gt;
# The View and Form are set in the controller and initiated to become active.&lt;br /&gt;
&lt;br /&gt;
((Remark: the text states that the path is &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php, but I am pretty sure that this is an error. It probably should say &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php. Can somebody please verify this and correct it?))&lt;br /&gt;
&lt;br /&gt;
=== How to add interaction ===&lt;br /&gt;
Within HTML there are two common ways to interact with Joomla!:&lt;br /&gt;
# reference to a link&lt;br /&gt;
# form submission post / get&lt;br /&gt;
&lt;br /&gt;
==== Link reference for the Joomla! engine ====&lt;br /&gt;
Remember the '''activating tasks''' and '''resulting tasks''' mentioned earlier? Most activating tasks are initiated by a link. In case of the Library example the site section overview could be copied to the admin section. This default view will now be extended and every cell will become a link for editing the specific database element.&lt;br /&gt;
&lt;br /&gt;
Using the Library example, the template PHP code without looping control will contain the following code:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=users&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idu );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;name&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=books&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idb );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=relation&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idr );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;date&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within each clickable field the three mandatory parameters to manipulate MVC can be identified. In addition there is one user parameter for handling the correct index in the controller task (cid). These parameter are separated by '&amp;amp;'. Do not use spaces in your variables this might screw-up parameter handling in certain browsers. After looping all text entries will be clickable and trigger the corresponding controller with the correct row id in the associated table.&lt;br /&gt;
&lt;br /&gt;
 [Alice} | [One flew over ...] | [12 aug 2009]&lt;br /&gt;
 [Alice] | [Celeb talk]        | [12 aug 2009]&lt;br /&gt;
 [Mark]  | [Joomla!]           | [15 aug 2009]&lt;br /&gt;
&lt;br /&gt;
==== Posting Form Data to the Joomla! Engine ====&lt;br /&gt;
After being initiated by an activating task, an input form view might be the result. The sniplet code below could be the result of clicking the first cell of the default component view that is clicked for editing ([Alice]:cid=3). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; size=&amp;quot;32&amp;quot; maxlength=&amp;quot;250&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;name;?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;SubmitButton&amp;quot; value=&amp;quot;Save&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_library&amp;quot; /&amp;gt;                  // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;                    // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;save&amp;quot; /&amp;gt;                           // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;id&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;id; ?&amp;gt;&amp;quot; /&amp;gt;   // &amp;lt;-- user parameter, index in database for [Alice]&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three Joomla! mandatory parameters are placed as hidden in the form. Hidden parameters are not shown in any way but will be added to the posting data.&lt;br /&gt;
&lt;br /&gt;
''Tip'': when debugging this form, replace in the form tag &amp;lt;code&amp;gt;method=&amp;quot;post&amp;quot;&amp;lt;/code&amp;gt; temporarily with &amp;lt;code&amp;gt;method=&amp;quot;get&amp;quot;&amp;lt;/code&amp;gt;. All posted parameters will be shown in the URL of your browser. If the module is working undo this change. For one reason it looks sharper without all the parameters being shown in the URL and you avoid motivating people to manipulate the browser URL themselves. Of course one can look at the source code but using ''Post'' instead of ''Get'', but this eliminates the first 90% of the earth population. The other reason is more technical and the simple explanation is that post methods (i.e. method=&amp;quot;post&amp;quot;) can contain more (complex) data.&lt;br /&gt;
&lt;br /&gt;
''Remark'': In some developed modules you may notice that developers have also added the ''view'' parameter. This is bad programming whilst the controller(s) should take care of the ''view'' and the ''form''.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The use of the three mandatory parameters and the different access points are clarified. Let's do something with this knowledge and extend the Hello component to the administrative section in the succeeding articles of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5 talk:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T20:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: /* Hint in 'Mapping' section */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Renaming Part 4 ==&lt;br /&gt;
I checked out the comment below. ;-) Certainly, the multitude of hello(s) is confusing. What I did is to rename most everything.&lt;br /&gt;
&lt;br /&gt;
Whenever there's something like HelloWhateverHello, the first Hello represents the component front-end, and the second represents the view/model. By the way, each view has its own model, which I think is pretty much standard MVC architecture. On the other hand, one controller can control several views, although this example doesn't do so.&lt;br /&gt;
&lt;br /&gt;
Conversely, if you see HellosWhateverHello or HellosWhateverHellos, the first Hellos represents the adminstrative back-end, and the Hello or Hellos at the end refers to the view for editing one greeting or for listing all greetings, respectively. (Replace *Whatever* with Model, View, or Controller as appropriate.)&lt;br /&gt;
&lt;br /&gt;
So, I renamed all this to look like FrontWhateverContent, AdminWhateverEdit, AdminWhateverList, and so on. Then I had to rename directories and files as well, so that models/hello.php became models/content.php in the front-end and models/edit.php in the back-end. Likewise, views/hello/ becomes views/content/ in the front-end and views/edit in the back-end. Also, in the back-end only, models/hellos.php &amp;amp; views/hellos/ become models/list.php &amp;amp; views/list. Lastly, I changed controllers/hello.php to controllers/edit.php, to reflect the change from HellosControllerHello to AdminControllerEdit.&lt;br /&gt;
&lt;br /&gt;
Hope this clears things up a bit. It's a tedious refactoring exercise to do all this renaming, but it *is* doable. Good luck.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello&amp;quot; Overloaded ==&lt;br /&gt;
&lt;br /&gt;
I'm not sure if anybody checks this, but I'm having a difficult time making my own component out of this document. &lt;br /&gt;
&lt;br /&gt;
The first three chapters of this documentation are great.  They are simple and to the point.  The fourth, this page, is very confusing.  &lt;br /&gt;
&lt;br /&gt;
First off, the word &amp;quot;hello&amp;quot; is way over loaded.  In the Creating an Admin Interface there are two models and two views:&lt;br /&gt;
Hello  and Hellos&lt;br /&gt;
&lt;br /&gt;
It's impossible to know why we need two different models.  Why cant we use one model and two views?&lt;br /&gt;
Its totally impossible to understand which one gets called when.&lt;br /&gt;
&lt;br /&gt;
I have discovered there are a lot of name conventions used here, but after reading this document over and over, it's still very difficult to know what the conventions are.  This is probably stemming from &amp;quot;hello&amp;quot; being way too overloaded.&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;get()&amp;quot; in JView is called in both views.  It is supposed to automatically know which model to use, and which method to call.  However, I don't think I followed the naming convention correctly, as it simply is not working (I get empty data with no error).&lt;br /&gt;
&lt;br /&gt;
I think I could untangle the naming conventions myself, but with &amp;quot;hello&amp;quot; so overloaded in this example, I am having no luck guessing.&lt;br /&gt;
&lt;br /&gt;
== Great up to chapter 3 ==&lt;br /&gt;
&lt;br /&gt;
The documentation was great upto chapter 3.  Got confused in 4th chapter.&lt;br /&gt;
&lt;br /&gt;
Also, this doesn't cover how to create sub menus for a component [http://www.vojtechovsky.net/joomla/component/tutorial-joomla-1.5-free-component.png See example]&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvement ==&lt;br /&gt;
&lt;br /&gt;
*This is a really long and tedious tutorial with a lot of very useful information in it. I think it would help to break it down into parts or creating separate tutorials covering this material.&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== REALLY GOOD DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
Apart from a small error in part 4 which I have now corrected&lt;br /&gt;
&lt;br /&gt;
did read: &lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;gt;controller=hello&amp;gt;task=edit&amp;gt;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
now reads:&lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;amp;controller=hello&amp;amp;task=edit&amp;amp;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Jamesconroyuk|James Conroy]] 16:29, 16 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Excellent documentation, but could use a slight extension ==&lt;br /&gt;
&lt;br /&gt;
Have been able to create components using this set of tutorials, but am missing how to use non-string based data in the administrator interface.&lt;br /&gt;
&lt;br /&gt;
The admin form only has one field (a string) and it might be useful to have either examples of, or a link to some other examples of how to view / capture other types of data such as :&lt;br /&gt;
&lt;br /&gt;
Checkboxes (boolean)&lt;br /&gt;
Dropdown menus / radio button (int or string)&lt;br /&gt;
&lt;br /&gt;
While it is easy to add the HTML form components (and even populate them with the values from the model), it isn't immediately clear how to recapture the data of these alternative types.&lt;br /&gt;
&lt;br /&gt;
There is another tutorial I have seen on this wiki that has the &amp;quot;build in a rich editor&amp;quot; function, could use a link from this page.&lt;br /&gt;
&lt;br /&gt;
[[User:craigmoore|Craig Moore]] 13:06, 09 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Really a great tutorial ... but too many hello.php's ==&lt;br /&gt;
&lt;br /&gt;
First of all, great tutorial, a very good effort to explain the basics.&lt;br /&gt;
&lt;br /&gt;
Maybe just my problem:&lt;br /&gt;
I personally prefer to edit several files at a time, what means, i have 10-20 tabs open in my editor (UltraEdit).&lt;br /&gt;
In my case that means, that my editor tab-bar looks like:&lt;br /&gt;
&lt;br /&gt;
hello.php - controller.php - hello.php - hello.php - hello.php - controller.php - hellos.php - and so on ...&lt;br /&gt;
&lt;br /&gt;
I would kiss the shoes of everyone who would:&lt;br /&gt;
&lt;br /&gt;
1.) precisely explain naming conventions for files of components (which file may, which file must be called hello.php)&lt;br /&gt;
&lt;br /&gt;
2.) resolve the hello.php-maze in this tutorial with more speaking filenames&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the authors, best regards and a hello to everyone&lt;br /&gt;
&lt;br /&gt;
Jochen&lt;br /&gt;
&lt;br /&gt;
== Good Tutorial ==&lt;br /&gt;
&lt;br /&gt;
Suggestion for improvement.&lt;br /&gt;
&lt;br /&gt;
I also found Part 4 hard to follow and lacking explanation of why various names/paths/parameters were chosen. For a beginner trying to understand Joomla! MVC conventions I found another component backend howto that gave more of the details I was looking for: [http://www.scribd.com/doc/11515210/Joomla-Component-Development-Backend]&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone else.&lt;br /&gt;
-Mike&lt;br /&gt;
[[User:M3t00|M3t00]] 15:55, 10 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== RE: Renaming Part 4 ==&lt;br /&gt;
&lt;br /&gt;
I'm actually even more confused now.&lt;br /&gt;
&lt;br /&gt;
Only by reading through this discussion did it occur to me that you need to use multiple views to handle the various tasks in the controller.  That seems like an important concept that is not entirely obvious to someone trying to learn the joomla framework.  And yet now that I recognize the concept, it's not obvious what the best practices would be to implement multiple views.  I'll work on it.&lt;br /&gt;
&lt;br /&gt;
Despite that, this is still an extremely valuable tutorial -- especially considering that much of the rest of the API documentation is sparse at best.  The entire joomla documentation in general could definitely benefit from a bit of a re-org.&lt;br /&gt;
&lt;br /&gt;
EDIT:  OK. So after reading through part 4 of the tutorial again, it is clear to me about the multiple views.  So, looking back, it would have been valuable to explain that in the introduction.  Something like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Now we will create an administrator section to create the greetings.  It uses 2 views.  The first view, called Hellos, will present a list of greetings with the ability to add new ones or remove old ones.  The second view will allow the user to edit each greeting.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
That would have helped tremendously.  In any case, I got it now.  I feel a little stupid for missing that the first time around, but maybe it was because it was late at night.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Component Hello, Site Hello, Admin Hellos, Admin Hello ==&lt;br /&gt;
&lt;br /&gt;
Chapters 1 and 2 were easy to follow. Chapter 3 contains some glitches that took me some time to understand but reading this chapter made everything really confusing. It took me a time to realise the Hello's, just my subject with only the focus clarifies already some impact. After re- and re-re reading it becomes clear to me what is meant. After re-reading the reason for using Hellos (as an Admin List) became clear and re-re- reading made the Admin single view/tmpl Hello obvious again. Why not rename these to:&lt;br /&gt;
&lt;br /&gt;
* Manage_Hello_List&lt;br /&gt;
* Manage_Hello_Item&lt;br /&gt;
&lt;br /&gt;
This would make everything much more readable, would set a clear context and increase the ease of understanding.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 12:37, 3 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Splitting up article into two articles ==&lt;br /&gt;
&lt;br /&gt;
If the writers have no objection I propose to split this chapter into two. There are multiple good reasons for doing so but the most important three are the following:&lt;br /&gt;
*This chapter is huge making reading a tedious job, overwhelming and scaring away the once that this article is intended for.&lt;br /&gt;
*This article has two logical section so braking it at '''Adding Functionality''' doesn't harm any body and helps newbies in achieving results. Being able to check a chapter and visually see the intermediate result is always the best motivation.&lt;br /&gt;
*Technically the same split at '''Adding Functionality''' is making a difference in know-how. the first part is not really new when you followed the ''site'' part examples '''Developing a Model-View-Controller Component 1, 2 and 3'''. Old wine in new bottles. The second part really goes into depth and requires good basic programming skills and a general understanding of HTML form handling.&lt;br /&gt;
If no objections I will initiate this spilt soon.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 07:34, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think splitting it is a good idea and should improve readability.  I look forward to seeing your improvements. [[User:Chris Davenport|Chris Davenport]] 08:51, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Confusing ==&lt;br /&gt;
&lt;br /&gt;
I agree Part 4 gets confusing. I see what it is attempting to demonstrate but it is confusing to jump into a completely new example rather than use an example from the onset that could cover the details of the controls in the Admin area. &lt;br /&gt;
&lt;br /&gt;
Maybe choosing a slightly more complex example than 'Hello world!' from the beginning?&lt;br /&gt;
&lt;br /&gt;
Will be good to see this article when it's been updated!&lt;br /&gt;
&lt;br /&gt;
== Hint in 'Mapping' section ==&lt;br /&gt;
&lt;br /&gt;
I'm removing the so-called hint from the section titled 'Mapping a Joomla! MVC component from the example.'&lt;br /&gt;
&lt;br /&gt;
I've never seen the 'registered' method, and I think it's bogus.&lt;br /&gt;
&lt;br /&gt;
Please respond if I'm wrong.&lt;br /&gt;
&lt;br /&gt;
[[User:HobbesPDX|HobbesPDX]] 20:19, 6 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5 talk:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5_talk:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T20:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: /* Hint in 'Mapping' section */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Renaming Part 4 ==&lt;br /&gt;
I checked out the comment below. ;-) Certainly, the multitude of hello(s) is confusing. What I did is to rename most everything.&lt;br /&gt;
&lt;br /&gt;
Whenever there's something like HelloWhateverHello, the first Hello represents the component front-end, and the second represents the view/model. By the way, each view has its own model, which I think is pretty much standard MVC architecture. On the other hand, one controller can control several views, although this example doesn't do so.&lt;br /&gt;
&lt;br /&gt;
Conversely, if you see HellosWhateverHello or HellosWhateverHellos, the first Hellos represents the adminstrative back-end, and the Hello or Hellos at the end refers to the view for editing one greeting or for listing all greetings, respectively. (Replace *Whatever* with Model, View, or Controller as appropriate.)&lt;br /&gt;
&lt;br /&gt;
So, I renamed all this to look like FrontWhateverContent, AdminWhateverEdit, AdminWhateverList, and so on. Then I had to rename directories and files as well, so that models/hello.php became models/content.php in the front-end and models/edit.php in the back-end. Likewise, views/hello/ becomes views/content/ in the front-end and views/edit in the back-end. Also, in the back-end only, models/hellos.php &amp;amp; views/hellos/ become models/list.php &amp;amp; views/list. Lastly, I changed controllers/hello.php to controllers/edit.php, to reflect the change from HellosControllerHello to AdminControllerEdit.&lt;br /&gt;
&lt;br /&gt;
Hope this clears things up a bit. It's a tedious refactoring exercise to do all this renaming, but it *is* doable. Good luck.&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Hello&amp;quot; Overloaded ==&lt;br /&gt;
&lt;br /&gt;
I'm not sure if anybody checks this, but I'm having a difficult time making my own component out of this document. &lt;br /&gt;
&lt;br /&gt;
The first three chapters of this documentation are great.  They are simple and to the point.  The fourth, this page, is very confusing.  &lt;br /&gt;
&lt;br /&gt;
First off, the word &amp;quot;hello&amp;quot; is way over loaded.  In the Creating an Admin Interface there are two models and two views:&lt;br /&gt;
Hello  and Hellos&lt;br /&gt;
&lt;br /&gt;
It's impossible to know why we need two different models.  Why cant we use one model and two views?&lt;br /&gt;
Its totally impossible to understand which one gets called when.&lt;br /&gt;
&lt;br /&gt;
I have discovered there are a lot of name conventions used here, but after reading this document over and over, it's still very difficult to know what the conventions are.  This is probably stemming from &amp;quot;hello&amp;quot; being way too overloaded.&lt;br /&gt;
&lt;br /&gt;
The method &amp;quot;get()&amp;quot; in JView is called in both views.  It is supposed to automatically know which model to use, and which method to call.  However, I don't think I followed the naming convention correctly, as it simply is not working (I get empty data with no error).&lt;br /&gt;
&lt;br /&gt;
I think I could untangle the naming conventions myself, but with &amp;quot;hello&amp;quot; so overloaded in this example, I am having no luck guessing.&lt;br /&gt;
&lt;br /&gt;
== Great up to chapter 3 ==&lt;br /&gt;
&lt;br /&gt;
The documentation was great upto chapter 3.  Got confused in 4th chapter.&lt;br /&gt;
&lt;br /&gt;
Also, this doesn't cover how to create sub menus for a component [http://www.vojtechovsky.net/joomla/component/tutorial-joomla-1.5-free-component.png See example]&lt;br /&gt;
&lt;br /&gt;
== Suggestions for improvement ==&lt;br /&gt;
&lt;br /&gt;
*This is a really long and tedious tutorial with a lot of very useful information in it. I think it would help to break it down into parts or creating separate tutorials covering this material.&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== REALLY GOOD DOCUMENTATION ==&lt;br /&gt;
&lt;br /&gt;
Apart from a small error in part 4 which I have now corrected&lt;br /&gt;
&lt;br /&gt;
did read: &lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;gt;controller=hello&amp;gt;task=edit&amp;gt;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
now reads:&lt;br /&gt;
&lt;br /&gt;
        $row =&amp;amp; $this-&amp;gt;items[$i];&lt;br /&gt;
        $checked    = JHTML::_( 'grid.id', $i, $row-&amp;gt;id );&lt;br /&gt;
        $link = JRoute::_( 'index.php?option=com_hello&amp;amp;controller=hello&amp;amp;task=edit&amp;amp;cid[]='. $row-&amp;gt;id );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Jamesconroyuk|James Conroy]] 16:29, 16 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Excellent documentation, but could use a slight extension ==&lt;br /&gt;
&lt;br /&gt;
Have been able to create components using this set of tutorials, but am missing how to use non-string based data in the administrator interface.&lt;br /&gt;
&lt;br /&gt;
The admin form only has one field (a string) and it might be useful to have either examples of, or a link to some other examples of how to view / capture other types of data such as :&lt;br /&gt;
&lt;br /&gt;
Checkboxes (boolean)&lt;br /&gt;
Dropdown menus / radio button (int or string)&lt;br /&gt;
&lt;br /&gt;
While it is easy to add the HTML form components (and even populate them with the values from the model), it isn't immediately clear how to recapture the data of these alternative types.&lt;br /&gt;
&lt;br /&gt;
There is another tutorial I have seen on this wiki that has the &amp;quot;build in a rich editor&amp;quot; function, could use a link from this page.&lt;br /&gt;
&lt;br /&gt;
[[User:craigmoore|Craig Moore]] 13:06, 09 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Really a great tutorial ... but too many hello.php's ==&lt;br /&gt;
&lt;br /&gt;
First of all, great tutorial, a very good effort to explain the basics.&lt;br /&gt;
&lt;br /&gt;
Maybe just my problem:&lt;br /&gt;
I personally prefer to edit several files at a time, what means, i have 10-20 tabs open in my editor (UltraEdit).&lt;br /&gt;
In my case that means, that my editor tab-bar looks like:&lt;br /&gt;
&lt;br /&gt;
hello.php - controller.php - hello.php - hello.php - hello.php - controller.php - hellos.php - and so on ...&lt;br /&gt;
&lt;br /&gt;
I would kiss the shoes of everyone who would:&lt;br /&gt;
&lt;br /&gt;
1.) precisely explain naming conventions for files of components (which file may, which file must be called hello.php)&lt;br /&gt;
&lt;br /&gt;
2.) resolve the hello.php-maze in this tutorial with more speaking filenames&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the authors, best regards and a hello to everyone&lt;br /&gt;
&lt;br /&gt;
Jochen&lt;br /&gt;
&lt;br /&gt;
== Good Tutorial ==&lt;br /&gt;
&lt;br /&gt;
Suggestion for improvement.&lt;br /&gt;
&lt;br /&gt;
I also found Part 4 hard to follow and lacking explanation of why various names/paths/parameters were chosen. For a beginner trying to understand Joomla! MVC conventions I found another component backend howto that gave more of the details I was looking for: [http://www.scribd.com/doc/11515210/Joomla-Component-Development-Backend]&lt;br /&gt;
&lt;br /&gt;
Hope this helps someone else.&lt;br /&gt;
-Mike&lt;br /&gt;
[[User:M3t00|M3t00]] 15:55, 10 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== RE: Renaming Part 4 ==&lt;br /&gt;
&lt;br /&gt;
I'm actually even more confused now.&lt;br /&gt;
&lt;br /&gt;
Only by reading through this discussion did it occur to me that you need to use multiple views to handle the various tasks in the controller.  That seems like an important concept that is not entirely obvious to someone trying to learn the joomla framework.  And yet now that I recognize the concept, it's not obvious what the best practices would be to implement multiple views.  I'll work on it.&lt;br /&gt;
&lt;br /&gt;
Despite that, this is still an extremely valuable tutorial -- especially considering that much of the rest of the API documentation is sparse at best.  The entire joomla documentation in general could definitely benefit from a bit of a re-org.&lt;br /&gt;
&lt;br /&gt;
EDIT:  OK. So after reading through part 4 of the tutorial again, it is clear to me about the multiple views.  So, looking back, it would have been valuable to explain that in the introduction.  Something like:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Now we will create an administrator section to create the greetings.  It uses 2 views.  The first view, called Hellos, will present a list of greetings with the ability to add new ones or remove old ones.  The second view will allow the user to edit each greeting.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
That would have helped tremendously.  In any case, I got it now.  I feel a little stupid for missing that the first time around, but maybe it was because it was late at night.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Component Hello, Site Hello, Admin Hellos, Admin Hello ==&lt;br /&gt;
&lt;br /&gt;
Chapters 1 and 2 were easy to follow. Chapter 3 contains some glitches that took me some time to understand but reading this chapter made everything really confusing. It took me a time to realise the Hello's, just my subject with only the focus clarifies already some impact. After re- and re-re reading it becomes clear to me what is meant. After re-reading the reason for using Hellos (as an Admin List) became clear and re-re- reading made the Admin single view/tmpl Hello obvious again. Why not rename these to:&lt;br /&gt;
&lt;br /&gt;
* Manage_Hello_List&lt;br /&gt;
* Manage_Hello_Item&lt;br /&gt;
&lt;br /&gt;
This would make everything much more readable, would set a clear context and increase the ease of understanding.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 12:37, 3 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Splitting up article into two articles ==&lt;br /&gt;
&lt;br /&gt;
If the writers have no objection I propose to split this chapter into two. There are multiple good reasons for doing so but the most important three are the following:&lt;br /&gt;
*This chapter is huge making reading a tedious job, overwhelming and scaring away the once that this article is intended for.&lt;br /&gt;
*This article has two logical section so braking it at '''Adding Functionality''' doesn't harm any body and helps newbies in achieving results. Being able to check a chapter and visually see the intermediate result is always the best motivation.&lt;br /&gt;
*Technically the same split at '''Adding Functionality''' is making a difference in know-how. the first part is not really new when you followed the ''site'' part examples '''Developing a Model-View-Controller Component 1, 2 and 3'''. Old wine in new bottles. The second part really goes into depth and requires good basic programming skills and a general understanding of HTML form handling.&lt;br /&gt;
If no objections I will initiate this spilt soon.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:M.A.S.H|M.A.S.H]] 07:34, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think splitting it is a good idea and should improve readability.  I look forward to seeing your improvements. [[User:Chris Davenport|Chris Davenport]] 08:51, 10 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Confusing ==&lt;br /&gt;
&lt;br /&gt;
I agree Part 4 gets confusing. I see what it is attempting to demonstrate but it is confusing to jump into a completely new example rather than use an example from the onset that could cover the details of the controls in the Admin area. &lt;br /&gt;
&lt;br /&gt;
Maybe choosing a slightly more complex example than 'Hello world!' from the beginning?&lt;br /&gt;
&lt;br /&gt;
Will be good to see this article when it's been updated!&lt;br /&gt;
&lt;br /&gt;
== Hint in 'Mapping' section ==&lt;br /&gt;
&lt;br /&gt;
I'm removing the so-called hint from the section titled 'Mapping a Joomla! MVC component from the example.'&lt;br /&gt;
&lt;br /&gt;
I've never seen the 'registered' method, and I think it's bogus.&lt;br /&gt;
&lt;br /&gt;
Please respond if I'm wrong.&lt;br /&gt;
[[User:HobbesPDX|HobbesPDX]] 20:19, 6 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface</id>
		<title>J1.5:Developing a MVC Component/Creating an Administrator Interface</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Creating_an_Administrator_Interface"/>
				<updated>2010-03-06T20:16:44Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ambox&lt;br /&gt;
| type  = notice&lt;br /&gt;
| image = notice&lt;br /&gt;
| text  = This {{thingamabob}} has been divided into three sections, two new articles are added. Especially this page needs a review&lt;br /&gt;
&amp;lt;small&amp;gt;(August 2009)&amp;lt;/small&amp;gt;}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first three tutorials, we have developed a MVC component that retrieves its data from a table in the database. Currently, there is no way to add data to the database except to do it manually using another tool. In the next articles of this tutorial, we will develop an administrator section for our component which will make it possible to manage the entries in the database.&lt;br /&gt;
&lt;br /&gt;
This article, [[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface | Part 4 - Creating an Administrator Interface]], will be an article with no new source code for our Hello component but will describe some basic details of the MVC pattern. In the frontend solution (site section) we developed the first part of our component. The frontend solution is based upon default Controllers, Views and Templates and you were &amp;quot;taken by the hand&amp;quot; and &amp;quot;left to trust&amp;quot; the default handling of the code. This is going to change in the Backend or Administration section of our Hello component - we will have to develop all of the code that manages the application flow.&lt;br /&gt;
&lt;br /&gt;
== Site / Admin ==&lt;br /&gt;
Joomla! is a content management system. The '''frontend''' is used for presenting the users with content and allows certain logged in users to manipulate the content. The '''backend''' is responsible for administering the website framework (structuring / managing / controlling / maintaining). This division between (frontend) site-content and (backend) administration is a fundamental aspect of the Joomla! architecture.&lt;br /&gt;
&lt;br /&gt;
=== Entrance points ===&lt;br /&gt;
From the XML file of our frontend example it was already obvious that there would be an administration part:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!--  Administration Menu Section --&amp;gt; &lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt; &lt;br /&gt;
  &amp;lt;!--  Administration Main File Copy Section --&amp;gt; &lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt; &lt;br /&gt;
  &amp;lt;/files&amp;gt;&lt;br /&gt;
  &amp;lt;/administration&amp;gt;&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Only the .sql files were of use and only during installation for our frontend view, the other two files have no content besides generating a blank page. Access your websites' file system at your hosting provider (or on your own server) and browse through the directories after installing the frontend com_hello component. You may have noticed that our Hello component is to be found twice:&lt;br /&gt;
 &amp;lt;root&amp;gt;/components/com_hello&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/components/com_hello&lt;br /&gt;
&lt;br /&gt;
These two sub-directories link to the previously explained site-content and administration. Administrator interactions explicitly go via the administrator sub-directory, where guest or registered users will enter the default entrance on the root:&lt;br /&gt;
 &amp;lt;root&amp;gt;/index.php&lt;br /&gt;
Administrative users will have to log in, and after logging in they will enter your site via:&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/index.php&lt;br /&gt;
&lt;br /&gt;
With the different access points it is easy to grasp that with setting up the administrator section the naming conventions have no dependency with the site section. Whilst the MVC pattern is also applicable for the administrator section this implies that identical Controls, Views and Models naming can (and sometimes must) be used as in the site section.&lt;br /&gt;
&lt;br /&gt;
== MVC pattern interaction ==&lt;br /&gt;
[[image:MVC joomla.png|frameless|right]]In [[Developing a Model-View-Controller Component - Part 1]] the figure on the right was used to explain the focus of the first three parts of this ''Developing a Model-View-Controller Component tutorial''. Now we will use this figure to explain how decisions are made on what is going to be displayed and how to manipulate this.&lt;br /&gt;
&lt;br /&gt;
=== Example roll-out ===&lt;br /&gt;
For explanation purposes an easy to grasp example will be used. A library has the main function of lending books to registered users. Simply laid out there are three tables:&lt;br /&gt;
* users&lt;br /&gt;
* books&lt;br /&gt;
* relation&lt;br /&gt;
&lt;br /&gt;
Lets keep it all very simple. The users are addressed by Id and Name. The books are identified by Id and Title and the relation contains both Ids and the date of lending.&lt;br /&gt;
&lt;br /&gt;
[[image:Library Example.png|400px|frameless|center]]&lt;br /&gt;
&lt;br /&gt;
The example is carefully chosen and will help in explaining the Joomla! architecture in more detail. The administrative side of our Hello component is not even that complex with only one table to manage. After the explanation of this chapter it should be easy to follow the tutorial in the succeeding chapters&lt;br /&gt;
&lt;br /&gt;
=== Mapping a Joomla! MVC component from the example ===&lt;br /&gt;
In this example we will assume that administrative actions (add, edit, delete) are tasks that are to be performed by the administrator. For the frontend user only the view of the Relation table is interesting (&amp;quot;when do I have to bring back the books?&amp;quot;). This example shows the entire list and ignores all privacy stuff that could be taken care of by letting registered users only see their own books (''Hint'': &amp;lt;code&amp;gt;if ($user-&amp;gt;registered) {}&amp;lt;/code&amp;gt; ).&lt;br /&gt;
&lt;br /&gt;
Just like our frontend Hello component, for this library component only the default view is being used in the frontend. It lists the relational table, left joining the other two tables to obtain a human readable list of lend books. &lt;br /&gt;
 Alice | One flew over ... | 12 aug 2009&lt;br /&gt;
 Alice | Celeb talk        | 12 aug 2009&lt;br /&gt;
 Mark  | Joomla!           | 15 aug 2009&lt;br /&gt;
&lt;br /&gt;
With respect to the administration part it is important to understand that we have one default and three dedicated views, each controlling three tasks:&lt;br /&gt;
* &amp;lt;Component name default view&amp;gt;&lt;br /&gt;
* User administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Book administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
* Relation administration&lt;br /&gt;
** Add&lt;br /&gt;
** Change&lt;br /&gt;
** Delete&lt;br /&gt;
&lt;br /&gt;
==== Controllers ====&lt;br /&gt;
The main controller of the admin section needs to differentiate between the different Adds, Changes or Deletes that are requested. This is taken care of by creating sub-controllers for each view for handling their specific tasks.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controller.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/controllers/relation.php&lt;br /&gt;
&lt;br /&gt;
The controller is an important part of the MVC pattern. Not only does it take care of the requested tasks, it is also the initiator of instantiating the model with the same name and it is responsible for setting the view and the desired form for that view. The controller really justifies its name. &lt;br /&gt;
&lt;br /&gt;
Within the controller it is good to make a difference between '''activating tasks''' (for example the edit selection from a menu) and '''resulting tasks''' (for example the result of an edit trigger is the posted data).&lt;br /&gt;
&lt;br /&gt;
Typical controller functions look like:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function &amp;lt;activating task&amp;gt;()  // &amp;lt;-- edit, add, delete &lt;br /&gt;
{&lt;br /&gt;
    JRequest::setVar( 'view', '[&amp;lt;componentname&amp;gt; | users | books | relation ]' );&lt;br /&gt;
    JRequest::setVar( 'layout', 'default'  );     // &amp;lt;-- The default form is named here but in complex &lt;br /&gt;
                                                  //     views multiple layouts might be needed.&lt;br /&gt;
    parent::display();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function &amp;lt;resulting task&amp;gt;()  // &amp;lt;-- save, remove&lt;br /&gt;
{&lt;br /&gt;
	$model = $this-&amp;gt;getModel('[&amp;lt;componentname&amp;gt; | users | books | relation ]');&lt;br /&gt;
	if(!$model-&amp;gt;action() ) {    // &amp;lt;-- action could be delete() or store()&lt;br /&gt;
		$msg = JText::_( 'Error: Could not perform action' );&lt;br /&gt;
	} else {&lt;br /&gt;
		$msg = JText::_( 'Action executed' );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;setRedirect( 'index.php?option=&amp;lt;componentname&amp;gt;', $msg );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
A controller takes care of all tasks for that dedicated controller. After completing a resulting task the module will return to the main administration entrance point for that component, the main controller with the default view. Activating tasks enforce a new view with a form to display after first defining it.&lt;br /&gt;
&lt;br /&gt;
The explicit definition of the form within a view might raise some eyebrows but our examples are too simple. For the general understanding and consistency this field should mostly be ''default''. In complex views multiple forms could be defined within one view.&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
The Controllers interact with their equally named Model counter part. In the frontend view the Model was only used to retrieve data. The backend has more controllers and thus also more model files. The backend model files not only are responsible for delivering data to the viewer but also take care of tasks initiated from the controller. A good model contains all actions required to manage a single table in the database.&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/users.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/books.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/models/relation.php&lt;br /&gt;
&lt;br /&gt;
==== Views ====&lt;br /&gt;
Separate views are of course also required. For views and subsequent forms no forced naming conventions are required (linking to views is taken care of in the controller). In the following listing the Administrative tasks are identified as a subset for the different views. This choice is totally random and maybe even non-logical but that doesn't matter for the explanation. Just for example purposes I added also a different view, a delete view, that could be used for all the deletes for all administrative tasks asking an &amp;quot;Are you sure&amp;quot; display.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/&amp;lt;componentname&amp;gt;/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/users/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/books/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/relation/view.html.php    + .../tmpl/default.php&lt;br /&gt;
 &amp;amp;nbsp;&lt;br /&gt;
 &amp;lt;root&amp;gt;/administrator/views/delete/view.html.php    + .../tmpl/default.php&lt;br /&gt;
&lt;br /&gt;
''Note'': In general it is good practice to maintain one form per view because the view.html.php still has to deliver the content. With some basic logic you can enable, disable certain content but if this logic is becoming too complex start considering splitting up the view. &lt;br /&gt;
&lt;br /&gt;
''Note'': Sharing template parts amongst the different views (for uniform layouting of headers and titles of your component) can be done using the PHP &amp;lt;code&amp;gt;include / require;&amp;lt;/code&amp;gt;. There is one slight problem ... how to make the logical reference? In my modules I have a collector bin for general to use sniplets. Because it involved the views and forms I put this general bin in the views directory. The variable $pathToGeneralView needs to be defined somewhere in the first lines of your file and you have to make sure that the logical reference path is correct (the '..'s). In the following example the files marked with a '*' use the following code:&lt;br /&gt;
&lt;br /&gt;
 ./com_compname/views/general/navigate.header.php  &amp;lt;-- sniplet code for the header&lt;br /&gt;
 ./com_compname/views/general/navigate.footer.php  &amp;lt;-- sniplet code for the footer&lt;br /&gt;
 ./com_compname/views/mngtable1/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable1/tmpl/default.php *&lt;br /&gt;
 ./com_compname/views/mngtable2/view.html.php&lt;br /&gt;
 ./com_compname/views/mngtable2/tmpl/default.php *&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = strchr(dirname(__FILE__), dirname($_SERVER['SCRIPT_NAME']));&lt;br /&gt;
$pathToGeneralView = str_replace(dirname($_SERVER['SCRIPT_NAME']),'.',$pathToGeneralView );&lt;br /&gt;
$pathToGeneralView = $pathToGeneralView . &amp;quot;/../../general/&amp;quot;;  &amp;lt;-- returning path from current position. &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Another Way to do the same thing:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$pathToGeneralView = JPATH_COMPONENT_ADMINISTRATOR.DS. &amp;quot;views&amp;quot;.DS.&amp;quot;general&amp;quot;.DS;  &amp;lt;-- will return 'path/Joomla/administrator/components/com_example/views/general/&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.header.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;Do something    &lt;br /&gt;
&amp;lt;?php require_once $pathToGeneralView . 'navigation.footer.php'; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': Giving the forms logical instead of the ''default'' naming is of course handy when having a lot of different views. Having also that much ''default'' forms could make you easily loose oversight. On the other hand the view.html.php can not be renamed and you are always forced to look at the directory name for the view name you are working in.&lt;br /&gt;
&lt;br /&gt;
=== Essential Interaction Parameters ===&lt;br /&gt;
Everything is in place:&lt;br /&gt;
* main and dedicated controllers;&lt;br /&gt;
* main and dedicated modules;&lt;br /&gt;
* different views and their forms.&lt;br /&gt;
&lt;br /&gt;
Just one big question remains: '''How to use them'''!&lt;br /&gt;
&lt;br /&gt;
Three parameters are mandatory for letting Joomla! do its job:&lt;br /&gt;
* option&lt;br /&gt;
* controller&lt;br /&gt;
* task&lt;br /&gt;
&lt;br /&gt;
These three parameters are almost self explaining ;). The ''option'' part when developing a component is easy, always assign your component name to it. For component development consider this one as a constant, of course the Joomla! engine has more options than only components.&lt;br /&gt;
&lt;br /&gt;
The ''controller'' and ''task'' parameters can be manipulated within your component anyway you want it to. &lt;br /&gt;
&lt;br /&gt;
==== How it all works together ====&lt;br /&gt;
Looking at the simplified MVC picture Joomla! the logical flow of interaction goes the following way:&lt;br /&gt;
# What is my entrance point? &lt;br /&gt;
#*The Joomla! engine discovers a logged in administrator and sets the entrance point to &amp;lt;root&amp;gt;/administrator/index.php otherwise it wil go to the &amp;lt;root&amp;gt;/index.php entrance.&lt;br /&gt;
# What option is requested? &lt;br /&gt;
#*The Joomla! engine reads the option variable and discovers that a component named &amp;lt;componentname&amp;gt; is requested. The entrance point becomes: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php&lt;br /&gt;
# Is there need to access a dedicated controller? &lt;br /&gt;
#* The Joomla! engine reads the controller variable and discovers that a dedicated controller is required: &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/controllers/&amp;lt;dedicatedcontroller&amp;gt;.php&lt;br /&gt;
# Is there a task that needs to be addressed? &lt;br /&gt;
#* The identified controller is handed the task value as parameter. &lt;br /&gt;
# The Model is derived from the controller and instantiated.&lt;br /&gt;
# The View and Form are set in the controller and initiated to become active.&lt;br /&gt;
&lt;br /&gt;
((Remark: the text states that the path is &amp;lt;root&amp;gt;/administrator/modules/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php, but I am pretty sure that this is an error. It probably should say &amp;lt;root&amp;gt;/administrator/components/com_&amp;lt;componentname&amp;gt;/&amp;lt;componentname&amp;gt;.php. Can somebody please verify this and correct it?))&lt;br /&gt;
&lt;br /&gt;
=== How to add interaction ===&lt;br /&gt;
Within HTML there are two common ways to interact with Joomla!:&lt;br /&gt;
# reference to a link&lt;br /&gt;
# form submission post / get&lt;br /&gt;
&lt;br /&gt;
==== Link reference for the Joomla! engine ====&lt;br /&gt;
Remember the '''activating tasks''' and '''resulting tasks''' mentioned earlier? Most activating tasks are initiated by a link. In case of the Library example the site section overview could be copied to the admin section. This default view will now be extended and every cell will become a link for editing the specific database element.&lt;br /&gt;
&lt;br /&gt;
Using the Library example, the template PHP code without looping control will contain the following code:&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=users&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idu );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;name&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=books&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idb );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;title&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
$link = JRoute::_( 'index.php?option=com_library&amp;amp;controller=relation&amp;amp;task=edit&amp;amp;cid='. $row-&amp;gt;idr );&lt;br /&gt;
echo &amp;quot;&amp;lt;td&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;.$link.&amp;quot;\&amp;quot;&amp;gt;$row-&amp;gt;date&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within each clickable field the three mandatory parameters to manipulate MVC can be identified. In addition there is one user parameter for handling the correct index in the controller task (cid). These parameter are separated by '&amp;amp;'. Do not use spaces in your variables this might screw-up parameter handling in certain browsers. After looping all text entries will be clickable and trigger the corresponding controller with the correct row id in the associated table.&lt;br /&gt;
&lt;br /&gt;
 [Alice} | [One flew over ...] | [12 aug 2009]&lt;br /&gt;
 [Alice] | [Celeb talk]        | [12 aug 2009]&lt;br /&gt;
 [Mark]  | [Joomla!]           | [15 aug 2009]&lt;br /&gt;
&lt;br /&gt;
==== Posting Form Data to the Joomla! Engine ====&lt;br /&gt;
After being initiated by an activating task, an input form view might be the result. The sniplet code below could be the result of clicking the first cell of the default component view that is clicked for editing ([Alice]:cid=3). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;index.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;username&amp;quot; id=&amp;quot;username&amp;quot; size=&amp;quot;32&amp;quot; maxlength=&amp;quot;250&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;name;?&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;SubmitButton&amp;quot; value=&amp;quot;Save&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;option&amp;quot; value=&amp;quot;com_library&amp;quot; /&amp;gt;                  // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;controller&amp;quot; value=&amp;quot;hello&amp;quot; /&amp;gt;                    // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;task&amp;quot; value=&amp;quot;save&amp;quot; /&amp;gt;                           // &amp;lt;-- mandatory&lt;br /&gt;
  &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;id&amp;quot; value=&amp;quot;&amp;lt;?php echo $this-&amp;gt;user-&amp;gt;id; ?&amp;gt;&amp;quot; /&amp;gt;   // &amp;lt;-- user parameter, index in database for [Alice]&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The three Joomla! mandatory parameters are placed as hidden in the form. Hidden parameters are not shown in any way but will be added to the posting data.&lt;br /&gt;
&lt;br /&gt;
''Tip'': when debugging this form, replace in the form tag &amp;lt;code&amp;gt;method=&amp;quot;post&amp;quot;&amp;lt;/code&amp;gt; temporarily with &amp;lt;code&amp;gt;method=&amp;quot;get&amp;quot;&amp;lt;/code&amp;gt;. All posted parameters will be shown in the URL of your browser. If the module is working undo this change. For one reason it looks sharper without all the parameters being shown in the URL and you avoid motivating people to manipulate the browser URL themselves. Of course one can look at the source code but using ''Post'' instead of ''Get'', but this eliminates the first 90% of the earth population. The other reason is more technical and the simple explanation is that post methods (i.e. method=&amp;quot;post&amp;quot;) can contain more (complex) data.&lt;br /&gt;
&lt;br /&gt;
''Remark'': In some developed modules you may notice that developers have also added the ''view'' parameter. This is bad programming whilst the controller(s) should take care of the ''view'' and the ''form''.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The use of the three mandatory parameters and the different access points are clarified. Let's do something with this knowledge and extend the Hello component to the administrative section in the succeeding articles of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
* jamesconroyuk&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Using_the_Database</id>
		<title>J1.5:Developing a MVC Component/Using the Database</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Using_the_Database"/>
				<updated>2010-03-06T20:07:56Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first two tutorials, we showed you how to build a simple model-view-controller component. We had one view which retrieved data from a model (which was created in the 2nd tutorial). In this tutorial, we will be working with the model. Instead of the data being hard coded in the model, the model will retrieve the data from a table in the database.&lt;br /&gt;
&lt;br /&gt;
This tutorial will demonstrate how to use the JDatabase class to retrieve data from the database.&lt;br /&gt;
&lt;br /&gt;
== Retrieving the Data ==&lt;br /&gt;
&lt;br /&gt;
Our model currently has one method: getGreeting(). This method is very simple - all it does is return the hard-coded greeting.&lt;br /&gt;
&lt;br /&gt;
To make things more interesting, we will load the greeting from a database table. We will demonstrate later how to create an SQL file and add the appropriate code to the XML manifest file so that the table and some sample data will be created when the component is installed. For now, we will simply replace our return statement with some code that will retrieve the greeting from the database and return it.&lt;br /&gt;
&lt;br /&gt;
The first step is to obtain a reference to a database object. Since Joomla! uses the database for its normal operation, a database connection already exists; therefore, it is not necessary to create your own. A reference to the existing database can be obtained using:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&amp;amp; JFactory::getDBO();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JFactory is a static class that is used to retrieve references to many of the system objects. More information about this class can be found in the API documentation [http://docs.joomla.org/JFactory JFactoryAPI].&lt;br /&gt;
&lt;br /&gt;
The method name (getDBO) stands for get DataBase Object, and is easy and important to remember.&lt;br /&gt;
&lt;br /&gt;
Now that we have obtained a reference to the database object, we can retrieve our data. We do this in two steps:&lt;br /&gt;
&lt;br /&gt;
* store our query in the database object&lt;br /&gt;
* load the result&lt;br /&gt;
&lt;br /&gt;
Our new getGreeting() method will therefore look like:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;function getGreeting()&lt;br /&gt;
{&lt;br /&gt;
   $db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
   $query = 'SELECT greeting FROM #__hello';&lt;br /&gt;
   $db-&amp;gt;setQuery( $query );&lt;br /&gt;
   $greeting = $db-&amp;gt;loadResult();&lt;br /&gt;
&lt;br /&gt;
   return $greeting;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hello is the name of the table that we will create later, and greeting is the name of the field that stores the greetings. If you are not familiar with SQL, it would be helpful to take a tutorial or a lesson to get yourself up to speed. One such tutorial can be found at [http://www.w3schools.com/sql/default.asp w3schools].&lt;br /&gt;
&lt;br /&gt;
The $db-&amp;gt;loadResult() method will execute the stored database query and return the first field of the first row of the result. See [http://api.joomla.org/Joomla-Framework/Database/JDatabase.html JDatabase API reference] for more information about other load methods in the JDatabase class.&lt;br /&gt;
&lt;br /&gt;
== Creating the Installation SQL File ==&lt;br /&gt;
&lt;br /&gt;
The Joomla! installer has built-in support for executing queries during component installation. These queries are all stored in a standard text file.&lt;br /&gt;
&lt;br /&gt;
We will have three queries in our install file: the first will drop the table in case it already exists, the second will create the table with the appropriate fields, and the third will insert the data.&lt;br /&gt;
&lt;br /&gt;
Here are our queries:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;DROP TABLE IF EXISTS `#__hello`;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `#__hello` (&lt;br /&gt;
  `id` int(11) unsigned NOT NULL auto_increment,&lt;br /&gt;
  `greeting` varchar(25) NOT NULL,&lt;br /&gt;
  PRIMARY KEY  (`id`)&lt;br /&gt;
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;&lt;br /&gt;
&lt;br /&gt;
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'), ('Bonjour, Monde!'), ('Ciao, Mondo!');&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might find the  prefix on the table names rather odd. Joomla! will replace this prefix with the prefix used by the current install. For most installs, this table will become jos_hello. This allows multiple installs of Joomla! to use the same database, and prevents collisions with other applications using the same table names (i.e. two applications might share a database, but might both require a 'users' table. This convention avoids problems.)&lt;br /&gt;
&lt;br /&gt;
We have specified two fields in our database. The first field is id, and is called the 'primary key'. The primary key of a database table is a field that is used to uniquely identify a record. This is often used to lookup rows in the database. The other field is greeting. This is the field that stores the greeting that is returned from the query that we used above.&lt;br /&gt;
&lt;br /&gt;
We will save our installation queries in a file called install.sql. (Note: In the original version of this file, install.utf.sql was used - this was incorrect. Also see [[Talk:Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database | discussion]].)&lt;br /&gt;
&lt;br /&gt;
=== Creating the Uninstall SQL File ===&lt;br /&gt;
&lt;br /&gt;
Though we might hope that people will never want to &amp;quot;uninstall&amp;quot; our component, it is important that if they do, nothing is left behind after uninstalling our component. Joomla! will look after deleting the files and directories that were created during the &amp;quot;install&amp;quot;, but we must manually include queries that will remove any tables that were added to the database. Since we have only created one table, we only need one query:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;DROP TABLE IF EXISTS `#__hello`;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will save this uninstall query in a file called uninstall.sql. (Note: In the original version of this file, uninstall.utf.sql was used - this was incorrect. Also see [[Talk:Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database | discussion]].)&lt;br /&gt;
&lt;br /&gt;
== Updating our XML File ==&lt;br /&gt;
&lt;br /&gt;
We need to change a few things in our hello.xml file. First, we need to add our two new sql files to the list of files to install. Secondly, the SQL install files have to be placed in the admin directory. Thirdly, we need to tell the installer to execute the queries in our files on install and uninstall.&lt;br /&gt;
&lt;br /&gt;
Our new file looks like this:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;install type=&amp;quot;component&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;name&amp;gt;Hello&amp;lt;/name&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The following elements are optional and free of formatting constraints --&amp;gt;&lt;br /&gt;
 &amp;lt;creationDate&amp;gt;2007-02-22&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
 &amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
 &amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
 &amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
 &amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
 &amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
 &amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
 &amp;lt;version&amp;gt;3.01&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Description of the component ...&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
 &amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
      to copy FROM in the package to install therefore files copied&lt;br /&gt;
      in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
 &amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;models/hello.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;models/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/view.html.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
 &amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;install&amp;gt;&lt;br /&gt;
  &amp;lt;sql&amp;gt;&lt;br /&gt;
    &amp;lt;file charset=&amp;quot;utf8&amp;quot; driver=&amp;quot;mysql&amp;quot;&amp;gt;install.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;/sql&amp;gt;&lt;br /&gt;
 &amp;lt;/install&amp;gt;&lt;br /&gt;
 &amp;lt;uninstall&amp;gt;&lt;br /&gt;
  &amp;lt;sql&amp;gt;&lt;br /&gt;
    &amp;lt;file charset=&amp;quot;utf8&amp;quot; driver=&amp;quot;mysql&amp;quot;&amp;gt;uninstall.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;/sql&amp;gt;&lt;br /&gt;
 &amp;lt;/uninstall&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt;&lt;br /&gt;
   &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;/files&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/administration&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice two attributes present on the &amp;lt;file&amp;gt; tags within the &amp;lt;install&amp;gt; and &amp;lt;uninstall&amp;gt; sections: charset and driver. The charset is the type of charset to use. The only valid charset is utf8. If you want to create install files for non-utf8 databases (for older version of MySQL), you should omit this attribute.&lt;br /&gt;
&lt;br /&gt;
The driver attribute specifies which database the queries were written for. Currently, this can only be mysql, but in future versions of Joomla! there may be more database drivers available.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We now have a component that takes advantage of both the Joomla! MVC framework classes and the JDatabase classes. You are now able to write MVC components that interact with the database and can use the Joomla! installer to create and populate database tables.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
The component can be downloaded at: [http://joomlacode.org/gf/download/frsrelease/8110/29435/com_hello3_01.zip com_hello3_01]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Adding_a_Model</id>
		<title>J1.5:Developing a MVC Component/Adding a Model</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Adding_a_Model"/>
				<updated>2010-03-06T20:06:46Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: continuity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{review}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first tutorial of this series, creating a simple view-controller component using the Joomla! 1.5 CMS framework was demonstrated.&lt;br /&gt;
&lt;br /&gt;
In the first tutorial, the greeting was hardcoded into the view. This doesn't follow the MVC pattern exactly because the view is intended to only display the data, and not contain it.&lt;br /&gt;
&lt;br /&gt;
In this second part of the tutorial we will demonstrate how to move this out of the view and into a model. In future tutorials we will demonstrate the power and flexibility that this design pattern provides.&lt;br /&gt;
&lt;br /&gt;
== Creating the Model ==&lt;br /&gt;
&lt;br /&gt;
The concept of model gets its name because this class is intended to represent (or 'model') some entity. In our case, our first model will represent a 'hello', or a greeting. This is in line with our design thus far, because we have one view ('hello'), which is a view of our greeting.&lt;br /&gt;
&lt;br /&gt;
The naming convention for models in the Joomla! framework is that the class name starts with the name of the component (in our case 'hello', followed by 'model', followed by the model name. Therefore, our model class is called HelloModelHello.&lt;br /&gt;
&lt;br /&gt;
At this point, we will only model one behaviour of our hello, and that is retrieving the greeting. We will thus have one method, called getGreeting(). It will simply return the string 'Hello, World!'.&lt;br /&gt;
&lt;br /&gt;
The code for the view at site/models/hello.php:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Hello Model for Hello World Component&lt;br /&gt;
 * &lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
// No direct access&lt;br /&gt;
&lt;br /&gt;
defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.model' );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Hello Model&lt;br /&gt;
 *&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 */&lt;br /&gt;
class HelloModelHello extends JModel&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
    * Gets the greeting&lt;br /&gt;
    * @return string The greeting to be displayed to the user&lt;br /&gt;
    */&lt;br /&gt;
    function getGreeting()&lt;br /&gt;
    {&lt;br /&gt;
        return 'Hello, World!';&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice a line that starts with jimport. The jimport function is used to load files from the Joomla! framework that are required for our component. This particular statement will load the file /libraries/joomla/application/component/model.php. The '.'s are used as directory separators and the last part is the name of the file to load. All files are loaded relative to the libraries directory. This particular file contains the class definition for the JModel class, which is necessary because our model extends this class.&lt;br /&gt;
&lt;br /&gt;
Now that we have created our model, we must modify our view so that it uses it to obtain the greeting.&lt;br /&gt;
&lt;br /&gt;
== Using the Model ==&lt;br /&gt;
&lt;br /&gt;
The Joomla! framework is setup in such a way that the controller will automatically load the model that has the same name as the view and will push it into the view. Since our view is called 'Hello', our 'Hello' model will automatically be loaded and pushed into the view. Therefore, we can easily retrieve a reference to our model using the JView::getModel() method. (If the model had not followed this convention, we could have passed the model name to [http://api.joomla.org/Joomla-Framework/Application/JView.html#getModel JView::getModel()])&lt;br /&gt;
&lt;br /&gt;
Our previous view code contained the lines:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$greeting = &amp;quot;Hello World!&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To take advantage of our model, we change this line to:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$model = &amp;amp;$this-&amp;gt;getModel();&lt;br /&gt;
$greeting = $model-&amp;gt;getGreeting();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The complete view now looks like:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * @package    Joomla.Tutorials&lt;br /&gt;
 * @subpackage Components&lt;br /&gt;
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2&lt;br /&gt;
 * @license    GNU/GPL&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// No direct access&lt;br /&gt;
&lt;br /&gt;
defined( '_JEXEC' ) or die( 'Restricted access' );&lt;br /&gt;
&lt;br /&gt;
jimport( 'joomla.application.component.view');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HTML View class for the HelloWorld Component&lt;br /&gt;
 *&lt;br /&gt;
 * @package    HelloWorld&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class HelloViewHello extends JView&lt;br /&gt;
{&lt;br /&gt;
    function display($tpl = null)&lt;br /&gt;
    {&lt;br /&gt;
        $model = &amp;amp;$this-&amp;gt;getModel();&lt;br /&gt;
        $greeting = $model-&amp;gt;getGreeting();&lt;br /&gt;
        $this-&amp;gt;assignRef( 'greeting',	$greeting );&lt;br /&gt;
&lt;br /&gt;
        parent::display($tpl);&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adding the File to the Package ===&lt;br /&gt;
&lt;br /&gt;
All that remains is to add an entry to the XML file so that our new model will be copied. The Joomla! framework will look for our model in the models directory, so the entry for this file will look like (it should be added to the site section):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;filename&amp;gt;models/hello.php&amp;lt;/filename&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our new hello.xml file will look like:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;install type=&amp;quot;component&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;name&amp;gt;Hello&amp;lt;/name&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The following elements are optional and free of formatting conttraints --&amp;gt;&lt;br /&gt;
 &amp;lt;creationDate&amp;gt;2007-02-22&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
 &amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
 &amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
 &amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
 &amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
 &amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
 &amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
 &amp;lt;version&amp;gt;1.01&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Description of the component ...&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
 &amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
      to copy FROM in the package to install therefore files copied&lt;br /&gt;
      in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
 &amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;models/hello.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;models/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/view.html.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
 &amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;filename&amp;gt;hello.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;/files&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/administration&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We now have a simple MVC component. Each element is very simple at this point, but provides a great deal of flexibility and power.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
The component can be downloaded at: [http://joomlacode.org/gf/download/frsrelease/8109/29434/com_hello2_01.zip com_hello2_01]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	<entry>
		<id>http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Using_the_Database</id>
		<title>J1.5:Developing a MVC Component/Using the Database</title>
		<link rel="alternate" type="text/html" href="http://docs.joomla.org/J1.5:Developing_a_MVC_Component/Using_the_Database"/>
				<updated>2010-03-06T20:04:49Z</updated>
		
		<summary type="html">&lt;p&gt;HobbesPDX: for continuity -- it's hello.xml, not install.xml&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
In the first two tutorials, we showed you how to build a simple model-view-controller component. We had one view which retrieved data from a model (which was created in the 2nd tutorial). In this tutorial, we will be working with the model. Instead of the data being hard coded in the model, the model will retrieve the data from a table in the database.&lt;br /&gt;
&lt;br /&gt;
This tutorial will demonstrate how to use the JDatabase class to retrieve data from the database.&lt;br /&gt;
&lt;br /&gt;
== Retrieving the Data ==&lt;br /&gt;
&lt;br /&gt;
Our model currently has one method: getGreeting(). This method is very simple - all it does is return the hard-coded greeting.&lt;br /&gt;
&lt;br /&gt;
To make things more interesting, we will load the greeting from a database table. We will demonstrate later how to create an SQL file and add the appropriate code to the XML manifest file so that the table and some sample data will be created when the component is installed. For now, we will simply replace our return statement with some code that will retrieve the greeting from the database and return it.&lt;br /&gt;
&lt;br /&gt;
The first step is to obtain a reference to a database object. Since Joomla! uses the database for its normal operation, a database connection already exists; therefore, it is not necessary to create your own. A reference to the existing database can be obtained using:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db =&amp;amp; JFactory::getDBO();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JFactory is a static class that is used to retrieve references to many of the system objects. More information about this class can be found in the API documentation [http://docs.joomla.org/JFactory JFactoryAPI].&lt;br /&gt;
&lt;br /&gt;
The method name (getDBO) stands for get DataBase Object, and is easy and important to remember.&lt;br /&gt;
&lt;br /&gt;
Now that we have obtained a reference to the database object, we can retrieve our data. We do this in two steps:&lt;br /&gt;
&lt;br /&gt;
* store our query in the database object&lt;br /&gt;
* load the result&lt;br /&gt;
&lt;br /&gt;
Our new getGreeting() method will therefore look like:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;function getGreeting()&lt;br /&gt;
{&lt;br /&gt;
   $db =&amp;amp; JFactory::getDBO();&lt;br /&gt;
&lt;br /&gt;
   $query = 'SELECT greeting FROM #__hello';&lt;br /&gt;
   $db-&amp;gt;setQuery( $query );&lt;br /&gt;
   $greeting = $db-&amp;gt;loadResult();&lt;br /&gt;
&lt;br /&gt;
   return $greeting;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
hello is the name of the table that we will create later, and greeting is the name of the field that stores the greetings. If you are not familiar with SQL, it would be helpful to take a tutorial or a lesson to get yourself up to speed. One such tutorial can be found at [http://www.w3schools.com/sql/default.asp w3schools].&lt;br /&gt;
&lt;br /&gt;
The $db-&amp;gt;loadResult() method will execute the stored database query and return the first field of the first row of the result. See [http://api.joomla.org/Joomla-Framework/Database/JDatabase.html JDatabase API reference] for more information about other load methods in the JDatabase class.&lt;br /&gt;
&lt;br /&gt;
== Creating the Installation SQL File ==&lt;br /&gt;
&lt;br /&gt;
The Joomla! installer has built-in support for executing queries during component installation. These queries are all stored in a standard text file.&lt;br /&gt;
&lt;br /&gt;
We will have three queries in our install file: the first will drop the table in case it already exists, the second will create the table with the appropriate fields, and the third will insert the data.&lt;br /&gt;
&lt;br /&gt;
Here are our queries:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;DROP TABLE IF EXISTS `#__hello`;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE `#__hello` (&lt;br /&gt;
  `id` int(11) unsigned NOT NULL auto_increment,&lt;br /&gt;
  `greeting` varchar(25) NOT NULL,&lt;br /&gt;
  PRIMARY KEY  (`id`)&lt;br /&gt;
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;&lt;br /&gt;
&lt;br /&gt;
INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'), ('Bonjour, Monde!'), ('Ciao, Mondo!');&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You might find the  prefix on the table names rather odd. Joomla! will replace this prefix with the prefix used by the current install. For most installs, this table will become jos_hello. This allows multiple installs of Joomla! to use the same database, and prevents collisions with other applications using the same table names (i.e. two applications might share a database, but might both require a 'users' table. This convention avoids problems.)&lt;br /&gt;
&lt;br /&gt;
We have specified two fields in our database. The first field is id, and is called the 'primary key'. The primary key of a database table is a field that is used to uniquely identify a record. This is often used to lookup rows in the database. The other field is greeting. This is the field that stores the greeting that is returned from the query that we used above.&lt;br /&gt;
&lt;br /&gt;
We will save our installation queries in a file called install.sql. (Note: In the original version of this file, install.utf.sql was used - this was incorrect. Also see [[Talk:Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database | discussion]].)&lt;br /&gt;
&lt;br /&gt;
=== Creating the Uninstall SQL File ===&lt;br /&gt;
&lt;br /&gt;
Though we might hope that people will never want to &amp;quot;uninstall&amp;quot; our component, it is important that if they do, nothing is left behind after uninstalling our component. Joomla! will look after deleting the files and directories that were created during the &amp;quot;install&amp;quot;, but we must manually include queries that will remove any tables that were added to the database. Since we have only created one table, we only need one query:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;mysql&amp;quot;&amp;gt;DROP TABLE IF EXISTS `#__hello`;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will save this uninstall query in a file called uninstall.sql. (Note: In the original version of this file, uninstall.utf.sql was used - this was incorrect. Also see [[Talk:Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database | discussion]].)&lt;br /&gt;
&lt;br /&gt;
== Updating our XML File ==&lt;br /&gt;
&lt;br /&gt;
We need to change a few things in our hello.xml file. First, we need to add our two new sql files to the list of files to install. Secondly, the SQL install files have to be placed in the admin directory. Thirdly, we need to tell the installer to execute the queries in our files on install and uninstall.&lt;br /&gt;
&lt;br /&gt;
Our new file looks like this:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;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;install type=&amp;quot;component&amp;quot; version=&amp;quot;1.5.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;name&amp;gt;Hello&amp;lt;/name&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The following elements are optional and free of formatting conttraints --&amp;gt;&lt;br /&gt;
 &amp;lt;creationDate&amp;gt;2007-02-22&amp;lt;/creationDate&amp;gt;&lt;br /&gt;
 &amp;lt;author&amp;gt;John Doe&amp;lt;/author&amp;gt;&lt;br /&gt;
 &amp;lt;authorEmail&amp;gt;john.doe@example.org&amp;lt;/authorEmail&amp;gt;&lt;br /&gt;
 &amp;lt;authorUrl&amp;gt;http://www.example.org&amp;lt;/authorUrl&amp;gt;&lt;br /&gt;
 &amp;lt;copyright&amp;gt;Copyright Info&amp;lt;/copyright&amp;gt;&lt;br /&gt;
 &amp;lt;license&amp;gt;License Info&amp;lt;/license&amp;gt;&lt;br /&gt;
 &amp;lt;!--  The version string is recorded in the components table --&amp;gt;&lt;br /&gt;
 &amp;lt;version&amp;gt;3.01&amp;lt;/version&amp;gt;&lt;br /&gt;
 &amp;lt;!-- The description is optional and defaults to the name --&amp;gt;&lt;br /&gt;
 &amp;lt;description&amp;gt;Description of the component ...&amp;lt;/description&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- Site Main File Copy Section --&amp;gt;&lt;br /&gt;
 &amp;lt;!-- Note the folder attribute: This attribute describes the folder&lt;br /&gt;
      to copy FROM in the package to install therefore files copied&lt;br /&gt;
      in this section are copied from /site/ in the package --&amp;gt;&lt;br /&gt;
 &amp;lt;files folder=&amp;quot;site&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;controller.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;models/hello.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;models/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/view.html.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/default.php&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;filename&amp;gt;views/hello/tmpl/index.html&amp;lt;/filename&amp;gt;&lt;br /&gt;
 &amp;lt;/files&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;install&amp;gt;&lt;br /&gt;
  &amp;lt;sql&amp;gt;&lt;br /&gt;
    &amp;lt;file charset=&amp;quot;utf8&amp;quot; driver=&amp;quot;mysql&amp;quot;&amp;gt;install.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;/sql&amp;gt;&lt;br /&gt;
 &amp;lt;/install&amp;gt;&lt;br /&gt;
 &amp;lt;uninstall&amp;gt;&lt;br /&gt;
  &amp;lt;sql&amp;gt;&lt;br /&gt;
    &amp;lt;file charset=&amp;quot;utf8&amp;quot; driver=&amp;quot;mysql&amp;quot;&amp;gt;uninstall.sql&amp;lt;/file&amp;gt;&lt;br /&gt;
  &amp;lt;/sql&amp;gt;&lt;br /&gt;
 &amp;lt;/uninstall&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 &amp;lt;administration&amp;gt;&lt;br /&gt;
  &amp;lt;!-- Administration Menu Section --&amp;gt;&lt;br /&gt;
  &amp;lt;menu&amp;gt;Hello World!&amp;lt;/menu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!-- Administration Main File Copy Section --&amp;gt;&lt;br /&gt;
  &amp;lt;files folder=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;filename&amp;gt;hello.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;filename&amp;gt;install.sql&amp;lt;/filename&amp;gt;&lt;br /&gt;
   &amp;lt;filename&amp;gt;uninstall.sql&amp;lt;/filename&amp;gt;&lt;br /&gt;
  &amp;lt;/files&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/administration&amp;gt;&lt;br /&gt;
&amp;lt;/install&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will notice two attributes present on the &amp;lt;file&amp;gt; tags within the &amp;lt;install&amp;gt; and &amp;lt;uninstall&amp;gt; sections: charset and driver. The charset is the type of charset to use. The only valid charset is utf8. If you want to create install files for non-utf8 databases (for older version of MySQL), you should omit this attribute.&lt;br /&gt;
&lt;br /&gt;
The driver attribute specifies which database the queries were written for. Currently, this can only be mysql, but in future versions of Joomla! there may be more database drivers available.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
We now have a component that takes advantage of both the Joomla! MVC framework classes and the JDatabase classes. You are now able to write MVC components that interact with the database and can use the Joomla! installer to create and populate database tables.&lt;br /&gt;
&lt;br /&gt;
== Articles in this Series ==&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 1]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 2 - Adding a Model]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 3 - Using the Database]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 4 - Creating an Administrator Interface]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 5 - Basic Backend Framework]]&lt;br /&gt;
&lt;br /&gt;
[[Developing a Model-View-Controller Component - Part 6 - Adding Backend Actions]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* staalanden&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
The component can be downloaded at: [http://joomlacode.org/gf/download/frsrelease/8110/29435/com_hello3_01.zip com_hello3_01]&lt;br /&gt;
&lt;br /&gt;
[[Category:Database]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>HobbesPDX</name></author>	</entry>

	</feed>