<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Skyhigh</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Skyhigh"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Skyhigh"/>
	<updated>2026-05-28T00:39:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=297371</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=297371"/>
		<updated>2016-04-26T07:55:52Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Developing a component frontend update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Let&#039;s start with the Initial version|class=expand success}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
[[Category:Joomla! 3.x]]&lt;br /&gt;
[[Category:Beginner Development]]&lt;br /&gt;
[[Category:Tutorials in a Series]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Component Development]]&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen&amp;diff=297261</id>
		<title>J3.x:Developing a component frontend update function/Import with summary screen</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen&amp;diff=297261"/>
		<updated>2016-04-25T17:50:03Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Import with summary screen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 24 Import with summary screen ==&lt;br /&gt;
&lt;br /&gt;
=== 24.1 Description ===&lt;br /&gt;
&lt;br /&gt;
The previous step of this tutorial describes an import process that updates the database without feedback to the user about which records have been updated. In some cases you might want to have more control on this process, ranging from just displaying a summary of the updated records to an explicit acknowledgment for each intended change.&lt;br /&gt;
&lt;br /&gt;
This step describes the simple case of displaying a page listing the changed records after the update. It is just an example for adding user validation to import functions.&lt;br /&gt;
&lt;br /&gt;
=== 24.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 24.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
A button is added for selecting checked import.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.3 admin/views/helloimport ====&lt;br /&gt;
&lt;br /&gt;
The button displays a separate view page for handling the import. The page contains a button to select the import file to upload. Execute the import by clicking the&#039;&#039; &#039;Upload&#039; &#039;&#039;button, or cancel by clicking&#039;&#039; &#039;Go Back&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 24.2.4 admin/views/helloimport/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
This layout contains the form with those buttons. The&#039;&#039; &#039;Upload&#039; &#039;&#039;button submits the form and posts the import data to the server.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.5 admin/views/helloimport/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The view starts the layout template of the previous section, and also catches the posted data after clicking the&#039;&#039; &#039;Upload&#039; &#039;&#039;button.&lt;br /&gt;
&lt;br /&gt;
When posted data is received, it is imported into the database using the &#039;&#039;import_csv()&#039;&#039; and &#039;&#039;import_xls()&#039;&#039; methods, just like the controller did in the previous step 23.2.4 of this tutorial. In this step, however, these functions also create a table with the imported data which is then displayed in the current view.&lt;br /&gt;
&lt;br /&gt;
=== 24.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-24.zip Download Joomla-Hello-Front-End v1-24]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/5a38bc67c0ee7f0c14fdd159699f8bd7965bf43d View Joomla-Hello-Front-End v1-24]&lt;br /&gt;
&lt;br /&gt;
=== 24.4 Testing the features of this step ===&lt;br /&gt;
* Perform the same test as in the previous section 23.4 of this tutorial.&lt;br /&gt;
* Verify that the table lists the changes from the uploaded import file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|Prev: csv and xlsx import|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=296566</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=296566"/>
		<updated>2016-04-23T20:37:07Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Let&#039;s start with the Initial version|class=expand success}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 3.x]]&lt;br /&gt;
[[Category:Beginner Development]]&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Tutorials in a Series]]&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296250</id>
		<title>Chunk:Developing a component frontend update function - Contents</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296250"/>
		<updated>2016-04-22T18:11:43Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Articles in this Series - Contents&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot; style=&amp;quot;float:right; background:#fff;margin:0 0 1.0em 1.0em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel radius mw-collapsible&amp;quot; style=&amp;quot;width:100%;background:#fff;font-size:.8em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Articles in this Series&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel mw-collapsible-content&amp;quot; style=&amp;quot;border:none; background:#fff; min-width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function|Introduction]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Initial_version|Initial version]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry|Simple frontend data entry]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page|Record item editing page]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Record_list_view_page|Record list view page]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions|Rethink frontend permissions]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|First try at csv export]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Improved export function]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Excel xlsx export]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|csv and xlsx import]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen|Import with summary screen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{-}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=296249</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=296249"/>
		<updated>2016-04-22T18:08:33Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Developing a component frontend update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot;&amp;gt;{{Basic button|/J3.x:Developing_a_component_frontend_update_function/Initial_version|Let&#039;s start with the Initial version|class=expand success}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Joomla! 3.x]]&lt;br /&gt;
[[Category:Beginner Development]]&lt;br /&gt;
[[Category:Component Development]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:Tutorials in a Series]]&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Improved_export_function&amp;diff=296248</id>
		<title>J3.x:Developing a component frontend update function/Improved export function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Improved_export_function&amp;diff=296248"/>
		<updated>2016-04-22T17:37:23Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Improved export function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 21 Improved csv export ==&lt;br /&gt;
&lt;br /&gt;
=== 21.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As explained in the previous chapters, Joomla usually displays data in html format. However, it does support other formats as well, including the &#039;raw&#039; format meaning that in that case Joomla does not perform any layout operations at all for the data.&lt;br /&gt;
&lt;br /&gt;
That is exactly the way to go for downloading an export file as generally we have to assume that such file just contains &#039;binary&#039; data.&lt;br /&gt;
&lt;br /&gt;
=== 21.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 21.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/button/index.html&lt;br /&gt;
&lt;br /&gt;
Again, have been updated to reflect version info. A new directory admin/button is created in this chapter, and therefore an additional&#039;&#039; admin/button/index.html &#039;&#039;placeholder file as well. &#039;&#039;helloworld.xml&#039;&#039; is updated accordingly.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.2 admin/button/rawformat.php ====&lt;br /&gt;
&lt;br /&gt;
In Joomla processing of a page begins with starting the concerning controller. To indicate that processing should yield raw data rather than an html page, the controller must receive the&#039;&#039; &#039;format=raw&#039; &#039;&#039;input parameter. These parameter is typically provided by adding an hidden input tag to the form that starts the controller. Like:&lt;br /&gt;
 &amp;lt;form action=&amp;quot;index.php?option=com_helloworld&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
The HelloWorld database items are handled from the HelloWorld admin page with form:&lt;br /&gt;
 admin/components/com_helloworld/views/helloworlds/tmpl/default.php&lt;br /&gt;
or its frontend counterpart. The available functions like create new item, delete an item or update an item are offered to the user as buttons above this form. Our export button is here as well.&lt;br /&gt;
&lt;br /&gt;
Pushing a button typically navigates to another web form, like the edit form to update a particular item. These forms are in html format, so including the &#039;format=raw&#039; input tag permanently to the above form definition file tmpl/default.php would cause a conflict for these functions.&lt;br /&gt;
&lt;br /&gt;
So only pushing our export button should submit the &#039;format=raw&#039; tag. As this tag is not a standard part of the form, the button function will add the tag on the fly as post variable. Joomla has no standard button function that allows this, so we define an additional button called&#039;&#039; &#039;RawFormat&#039;.&#039;&#039; It is defined in &#039;&#039;admin/button/rawformat.php&#039;&#039; and basically just clones the Joomla &#039;Standard&#039; button replacing the reference to the &#039;Joomla.submitbutton&#039; javascript by a reference to the &#039;RawFormatSubmitbutton&#039; javascript. This javascript submits (posts) the form data to the server, and this will schedule the controller.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.3 admin/views/helloworlds/submitbutton.js ====&lt;br /&gt;
&lt;br /&gt;
This javascript injects the tag &amp;lt;tt&amp;gt;&#039;&amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;amp;gt;&#039;&amp;lt;/tt&amp;gt; in the form. Thereafter it submits the form using the&#039;&#039; &#039;Joomla.submitform(task)&#039; &#039;&#039;call, just like the Joomla &#039;Standard&#039; button would do. The input tag is reset to html format after this call for future form submissions.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.4 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This php file prepares the display of the HelloWorld management page. It is adapted to include the above javascript 21.2.3 and display our new &#039;RawFormat&#039; export button in stead of the previous one.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.5 admin/controllers/helloexport.raw.php ====&lt;br /&gt;
&lt;br /&gt;
This is almost the same file as the previous &#039;admin/controllers/helloexport.php&#039; except that its name has been changed in view of Joomla rules. Joomla expects a controller for raw format to have a filename &amp;amp;lt;controller&amp;amp;gt;.raw.php, although the class name is still &amp;amp;lt;component&amp;amp;gt;Controller&amp;amp;lt;controller&amp;amp;gt;, so &#039;HelloWorldControllerHelloExport&#039; in this case.&lt;br /&gt;
&lt;br /&gt;
The big difference with the previous controller version is that the application does not need to be forcibly closed as Joomla now understands from the &#039;format=raw&#039; tag that the controller yields a raw format layout and embedding in html is not required anymore.&lt;br /&gt;
&lt;br /&gt;
The final statements&lt;br /&gt;
 $app-&amp;gt;sendHeaders();&lt;br /&gt;
 $app-&amp;gt;close();&lt;br /&gt;
therefore have been removed as calling these functions will now be performed by Joomla in the standard way when the controller finishes the &#039;exportcsv&#039; function.&lt;br /&gt;
&lt;br /&gt;
=== 21.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-21.zip Download Joomla-Hello-Front-End v1-21]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/ef3fa05c04b68320f90658f264fba16bdf386777 View Joomla-Hello-Front-End v1-21]&lt;br /&gt;
&lt;br /&gt;
=== 21.4 Testing the features of this step ===&lt;br /&gt;
* Perform the same test as in the previous section 20.4 , and verify that the export works as it did before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|Prev: First try at csv export|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Next: Excel xlsx export|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export&amp;diff=296247</id>
		<title>J3.x:Developing a component frontend update function/First try at csv export</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export&amp;diff=296247"/>
		<updated>2016-04-22T17:34:18Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: First try at csv export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 20 First try at csv file export ==&lt;br /&gt;
&lt;br /&gt;
=== 20.1 Description ===&lt;br /&gt;
&lt;br /&gt;
A browser in general is used for interactively retrieving and updating specific data. In many cases it is useful to import or export bulk data for offline processing. This chapter of the tutorial present a first example of exporting data in csv format.&lt;br /&gt;
&lt;br /&gt;
Joomla is tuned for user interaction by means of a browser, so primarily uses html format. An exported data file, however, can be in any format, and typically can not be assumed to be html. This step in the tutorial therefore takes a rather blunt approach in inhibiting Joomla to embed the exported data in html. This is just a shortcut for this chapter, and a more sound approach is presented in the next one.&lt;br /&gt;
&lt;br /&gt;
Just like in the previous steps of this tutorial, the functionality has been implemented both in the backend and the frontend, with (almost) equal code. The next chapter therefore only describes the backend files, but the description is equally valid for the frontend files.&lt;br /&gt;
&lt;br /&gt;
=== 20.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 20.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info only.&lt;br /&gt;
&lt;br /&gt;
==== 20.2.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This step extends the item list page with a button to start the export of the selected records (items) as a csv file for download. The &#039;view&#039; method is therefore extended with the code to create that button.&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; method only enables functions for which the user has permission. This is checked with the &#039;canDo→get()&#039; methods. The export button is enabled if the user has edit permission (&#039;core-edit&#039;).&lt;br /&gt;
&lt;br /&gt;
==== 20.2.3 admin/models/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The model has been extended with a method to retrieve a selected set of record items in one go in stead of fetching one at a time. Each records is stored in an array where each element contains one field. The record arrays in turn are collected in another array, so we have in fact a two dimensional array:&#039;&#039; $content.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first row of&#039;&#039; $content &#039;&#039;contains the names of the fields. For simplicity of this example, only the fields id, uid, greeting and category are exported.&lt;br /&gt;
&lt;br /&gt;
For large amounts of data a two dimensional array can become inefficient, both in memory usage and performance, and a more elaborate implementation may be needed. That however is not a Joomla specific issue, and for this tutorial we just keep it at this.&lt;br /&gt;
&lt;br /&gt;
==== 20.2.4 admin/controllers/helloexport.php ====&lt;br /&gt;
&lt;br /&gt;
This is the tricky part. The normal data processing of Joomla consist of retrieving data, preparing it for display and then rendering the data in the proper format. These steps are typically implemented in files like&#039;&#039; controllers/helloworld.php,&#039;&#039; a &#039;view method&#039; in&#039;&#039; helloworld/view.html.php &#039;&#039;and a layout template in&#039;&#039; helloworld/tmpl/default.php.&#039;&#039; In case of an export there is no display, so the last two steps are omitted.&lt;br /&gt;
&lt;br /&gt;
So all the work of compiling data into an export file can be performed in the controller. To be fair, also preparing data for a specific export file layout constitutes an amount of formatting, so arguably that part of the processing could be deferred to a separate &#039;view&#039; method. This might even be architecturally sounder and easier to implement. For this tutorial however we take the brute force approach of doing all the work in a controller.&lt;br /&gt;
&lt;br /&gt;
As data collection for an export is a different task than collection for display, a separate controller&#039;&#039; &#039;helloexport.php&#039; &#039;&#039;is defined in the&#039;&#039; &#039;controllers&#039; &#039;&#039;directory. It performs a couple of steps: first it retrieves the data for the export from the view parameters (&#039;&#039;$pks&#039;&#039;) and database (&#039;&#039;$content&#039;&#039; array of records). Then with the&#039;&#039; &#039;foreach&#039; &#039;&#039;loop it converts &#039;&#039;$content&#039;&#039; to lines for the csv file, and exports those lines with the &#039;print&#039; statement.&lt;br /&gt;
&lt;br /&gt;
Next, the controller transforms the&#039;&#039; &#039;print&#039; &#039;&#039;data into a downloadable file by specifying a content type header. The concerning code starts with the comment&#039;&#039; &#039;// write the header ...&#039; .&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For more background information see for example [http://stackoverflow.com/questions/19781389/joomla-force-file-download-csv-export stackoverflow: joomla force file download csv export] .&lt;br /&gt;
&lt;br /&gt;
Although the data export is now complete, there is still one issue to tackle. Joomla by default expects all output to refer to a section of a web page, so embeds output with html for the other web page sections, like title, standard menus etc. Without further action this extra html code will be written to the downloaded export file when the&#039;&#039; &#039;exportcsv&#039; &#039;&#039;function finishes and returns to Joomla. For this tutorial we prevent this by bluntly forcing the application to close, thereby inhibiting further processing of the output data by Joomla. This is the code after comment&#039;&#039; &#039;// Close the application ...&#039; .&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This approach works well but is rather clumsy from an architectural point of view. Then next step in this tutorial will offer a cleaner approach.&lt;br /&gt;
&lt;br /&gt;
=== 20.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-20.zip Download Joomla-Hello-Front-End v1-20]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/4011ff3dc73ab756cd83f9b6176f682af6978d04 View Joomla-Hello-Front-End v1-20]&lt;br /&gt;
&lt;br /&gt;
=== 20.4 Testing the features of this step ===&lt;br /&gt;
* Open the overview list page of all message items. You can do so either using the backend by login in as administrator, or using the frontend by logging in as user with sufficient permissions to perform the export.&lt;br /&gt;
* Select the message items that you want to export.&lt;br /&gt;
* Perform the export and download the selected items by clicking &#039;&#039;&#039;Export csv&#039;&#039;&#039;.&lt;br /&gt;
* Inspect the downloaded file. It will contain the fields id, uid, greeting and category of the selected items.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions|Prev: Rethink frontend permissions|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Next: Improved export function|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296246</id>
		<title>J3.x:Developing a component frontend update function/Excel xlsx export</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296246"/>
		<updated>2016-04-22T17:32:12Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Excel xlsx export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 21 Improved csv export ==&lt;br /&gt;
&lt;br /&gt;
=== 21.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As explained in the previous chapters, Joomla usually displays data in html format. However, it does support other formats as well, including the &#039;raw&#039; format meaning that in that case Joomla does not perform any layout operations at all for the data.&lt;br /&gt;
&lt;br /&gt;
That is exactly the way to go for downloading an export file as generally we have to assume that such file just contains &#039;binary&#039; data.&lt;br /&gt;
&lt;br /&gt;
=== 21.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 21.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/button/index.html&lt;br /&gt;
&lt;br /&gt;
Again, have been updated to reflect version info. A new directory admin/button is created in this chapter, and therefore an additional&#039;&#039; admin/button/index.html &#039;&#039;placeholder file as well. &#039;&#039;helloworld.xml&#039;&#039; is updated accordingly.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.2 admin/button/rawformat.php ====&lt;br /&gt;
&lt;br /&gt;
In Joomla processing of a page begins with starting the concerning controller. To indicate that processing should yield raw data rather than an html page, the controller must receive the&#039;&#039; &#039;format=raw&#039; &#039;&#039;input parameter. These parameter is typically provided by adding an hidden input tag to the form that starts the controller. Like:&lt;br /&gt;
 &amp;lt;form action=&amp;quot;index.php?option=com_helloworld&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
The HelloWorld database items are handled from the HelloWorld admin page with form:&lt;br /&gt;
 admin/components/com_helloworld/views/helloworlds/tmpl/default.php&lt;br /&gt;
or its frontend counterpart. The available functions like create new item, delete an item or update an item are offered to the user as buttons above this form. Our export button is here as well.&lt;br /&gt;
&lt;br /&gt;
Pushing a button typically navigates to another web form, like the edit form to update a particular item. These forms are in html format, so including the &#039;format=raw&#039; input tag permanently to the above form definition file tmpl/default.php would cause a conflict for these functions.&lt;br /&gt;
&lt;br /&gt;
So only pushing our export button should submit the &#039;format=raw&#039; tag. As this tag is not a standard part of the form, the button function will add the tag on the fly as post variable. Joomla has no standard button function that allows this, so we define an additional button called&#039;&#039; &#039;RawFormat&#039;.&#039;&#039; It is defined in &#039;&#039;admin/button/rawformat.php&#039;&#039; and basically just clones the Joomla &#039;Standard&#039; button replacing the reference to the &#039;Joomla.submitbutton&#039; javascript by a reference to the &#039;RawFormatSubmitbutton&#039; javascript. This javascript submits (posts) the form data to the server, and this will schedule the controller.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.3 admin/views/helloworlds/submitbutton.js ====&lt;br /&gt;
&lt;br /&gt;
This javascript injects the tag &amp;lt;tt&amp;gt;&#039;&amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;amp;gt;&#039;&amp;lt;/tt&amp;gt; in the form. Thereafter it submits the form using the&#039;&#039; &#039;Joomla.submitform(task)&#039; &#039;&#039;call, just like the Joomla &#039;Standard&#039; button would do. The input tag is reset to html format after this call for future form submissions.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.4 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This php file prepares the display of the HelloWorld management page. It is adapted to include the above javascript 21.2.3 and display our new &#039;RawFormat&#039; export button in stead of the previous one.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.5 admin/controllers/helloexport.raw.php ====&lt;br /&gt;
&lt;br /&gt;
This is almost the same file as the previous &#039;admin/controllers/helloexport.php&#039; except that its name has been changed in view of Joomla rules. Joomla expects a controller for raw format to have a filename &amp;amp;lt;controller&amp;amp;gt;.raw.php, although the class name is still &amp;amp;lt;component&amp;amp;gt;Controller&amp;amp;lt;controller&amp;amp;gt;, so &#039;HelloWorldControllerHelloExport&#039; in this case.&lt;br /&gt;
&lt;br /&gt;
The big difference with the previous controller version is that the application does not need to be forcibly closed as Joomla now understands from the &#039;format=raw&#039; tag that the controller yields a raw format layout and embedding in html is not required anymore.&lt;br /&gt;
&lt;br /&gt;
The final statements&lt;br /&gt;
 $app-&amp;gt;sendHeaders();&lt;br /&gt;
 $app-&amp;gt;close();&lt;br /&gt;
therefore have been removed as calling these functions will now be performed by Joomla in the standard way when the controller finishes the &#039;exportcsv&#039; function.&lt;br /&gt;
&lt;br /&gt;
=== 21.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-21.zip Download Joomla-Hello-Front-End v1-21]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/ef3fa05c04b68320f90658f264fba16bdf386777 View Joomla-Hello-Front-End v1-21]&lt;br /&gt;
&lt;br /&gt;
=== 21.4 Testing the features of this step ===&lt;br /&gt;
* Perform the same test as in the previous section 20.4 , and verify that the export works as it did before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|Prev: First try at csv export|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Next: Excel xlsx export|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen&amp;diff=296245</id>
		<title>J3.x:Developing a component frontend update function/Import with summary screen</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen&amp;diff=296245"/>
		<updated>2016-04-22T17:23:43Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Import with summary screen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 24 Import with summary screen ==&lt;br /&gt;
&lt;br /&gt;
=== 24.1 Description ===&lt;br /&gt;
&lt;br /&gt;
The previous step of this tutorial describes an import process that updates the database without feedback to the user about which records have been updated. In some cases you might want to have more control on this process, ranging from just displaying a summary of the updated records to an explicit acknowledgment for each intended change.&lt;br /&gt;
&lt;br /&gt;
This step describes the simple case of displaying a page listing the changed records after the update. It is just an example for adding user validation to import functions.&lt;br /&gt;
&lt;br /&gt;
=== 24.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 24.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
A button is added for selecting checked import.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.3 admin/views/helloimport ====&lt;br /&gt;
&lt;br /&gt;
The button displays a separate view page for handling the import. The page contains a button to select the import file to upload. Execute the import by clicking the&#039;&#039; &#039;Upload&#039; &#039;&#039;button, or cancel by clicking&#039;&#039; &#039;Go Back&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== 24.2.4 admin/views/helloimport/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
This layout contains the form with those buttons. The&#039;&#039; &#039;Upload&#039; &#039;&#039;button submits the form and posts the import data to the server.&lt;br /&gt;
&lt;br /&gt;
==== 24.2.5 admin/views/helloimport/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The view starts the layout template of the previous section, and also catches the posted data after clicking the&#039;&#039; &#039;Upload&#039; &#039;&#039;button.&lt;br /&gt;
&lt;br /&gt;
When posted data is received, it is imported into the database using the &#039;&#039;import_csv()&#039;&#039; and &#039;&#039;import_xls()&#039;&#039; methods, just like the controller did in the previous step 23.2.4 of this tutorial. In this step, however, these functions also create a table with the imported data which is then displayed in the current view.&lt;br /&gt;
&lt;br /&gt;
=== 24.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-24.zip Download Joomla-Hello-Front-End v1-24]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/053e1de5a7567b889ee8a2f0d2327e6f21c70e89 View Joomla-Hello-Front-End v1-24]&lt;br /&gt;
&lt;br /&gt;
=== 24.4 Testing the features of this step ===&lt;br /&gt;
* Perform the same test as in the previous section 23.4 of this tutorial.&lt;br /&gt;
* Verify that the table lists the changes from the uploaded import file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|Prev: csv and xlsx import|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import&amp;diff=296244</id>
		<title>J3.x:Developing a component frontend update function/csv and xlsx import</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import&amp;diff=296244"/>
		<updated>2016-04-22T17:20:12Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: csv and xlsx import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 23 csv and xlsx import ==&lt;br /&gt;
&lt;br /&gt;
=== 23.1 Description ===&lt;br /&gt;
&lt;br /&gt;
If your Joomla application requires updates with a substantial amount of data, it may be more convenient to have the user collect the data offline and upload it in a file than to require the data to be entered interactively. Fortunately, it is quite easy to upload files using html and php facilities, but it does require carefully designed code to avoid upload problems or security issues. See for instance [http://www.w3schools.com/php/php_file_upload.asp w3schools.com] or [http://php.net/manual/en/features.file-upload.post-method.php php.net] .&lt;br /&gt;
&lt;br /&gt;
File upload is based on an html form that includes an &#039;&#039;&amp;amp;lt;input type=”file”&amp;amp;gt;&#039;&#039; tag. This &#039;&#039;&amp;amp;lt;input&amp;amp;gt;&#039;&#039; tag is displayed as a button, which pops up a file selection dialog when clicked. The data from the file will be posted to the server when the form is submitted, much like data that a user has entered by filling in an &#039;&#039;&amp;amp;lt;input type=&amp;quot;text&amp;quot;&amp;amp;gt;&#039;&#039; text field.&lt;br /&gt;
&lt;br /&gt;
The upload functionality is implemented by means of the following classes:&lt;br /&gt;
* first, an upload button is defined that is attached to a form with the &#039;&#039;&amp;amp;lt;input type=”file”&amp;amp;gt;&#039;&#039; tag. When this button is clicked, a file selection dialog is displayed and the user can submit the file for upload.The button is defined in&#039;&#039; &#039;admin/button/importfile.php&#039; .&#039;&#039;&lt;br /&gt;
* The uploaded file is received as post data by controller&#039;&#039; &#039;admin/controllers/helloimport.php&#039; .&#039;&#039;&lt;br /&gt;
* The data is stored in the database by model class&#039;&#039; &#039;admin/models/helloimport.php&#039; .&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 23.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 23.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info.&lt;br /&gt;
&lt;br /&gt;
==== 23.2.2 admin/button/importfile.php ====&lt;br /&gt;
&lt;br /&gt;
This file defines a button class of type&#039;&#039; &#039;importFile&#039; &#039;&#039;which inserts a form with the &#039;&#039;&amp;amp;lt;input type=”file”&amp;amp;gt;&#039;&#039; button in the view presented to the user.&lt;br /&gt;
&lt;br /&gt;
==== 23.2.3 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This view is updated to include the above button.&lt;br /&gt;
&lt;br /&gt;
==== 23.2.4 admin/controllers/helloimport.php ====&lt;br /&gt;
&lt;br /&gt;
This controller receives the uploaded data. It has two main entrypoints: &#039;&#039;importcsv()&#039;&#039; for processing an uploaded csv file, and &#039;&#039;importxls()&#039;&#039; for an uploaded Excel file. The Excel data is read using the &#039;&#039;PHPexcel&#039;&#039; package, as described in the export chapters 22 of this tutorial.&lt;br /&gt;
&lt;br /&gt;
==== 23.2.5 admin/models/helloimport.php ====&lt;br /&gt;
&lt;br /&gt;
The database is updated with this model class. For simplicity of this tutorial, only the fields&#039;&#039; &#039;id&#039;, &#039;uid&#039; &#039;&#039;and&#039;&#039; &#039;greeting&#039; &#039;&#039;are imported.&lt;br /&gt;
&lt;br /&gt;
=== 23.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-23.zip Download Joomla-Hello-Front-End v1-23]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/c84f0dc262a3fec2cc3455972ba510f61a4fc2a9 View Joomla-Hello-Front-End v1-23]&lt;br /&gt;
&lt;br /&gt;
=== 23.4 Testing the features of this step ===&lt;br /&gt;
* Create a csv or Excel file to import. You can use a previously exported file and adapt that, or you can create a new file from scratch.&lt;br /&gt;
* Log in either the backend or the frontend as a user with upload permission.&lt;br /&gt;
* Upload the file by clicking&#039;&#039; &#039;Import csv&#039; &#039;&#039;for a csv import file, or&#039;&#039; &#039;Import xls&#039; &#039;&#039;for an Excel file.&lt;br /&gt;
* Check the import by inspecting the item list overview page, and/or the item edit page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Prev: Excel xlsx export|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen|Next: Import with summary screen|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296233</id>
		<title>J3.x:Developing a component frontend update function/Excel xlsx export</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296233"/>
		<updated>2016-04-21T20:15:54Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Excel xlsx export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 22 Excel export using PHPExcel ==&lt;br /&gt;
&lt;br /&gt;
=== 22.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As an example of a more elaborate export feature the HelloWorld version of the previous step has been enhanced with an option to download the data from the database as an xlsx Excel file. For the conversion the PHPExcel packages is used. The current [https://github.com/PHPOffice/PHPExcel PHPExcel] version can be [https://github.com/PHPOffice/PHPExcel/archive/1.8.zip downloaded here] .&lt;br /&gt;
&lt;br /&gt;
=== 22.2 Install PHPExcel ===&lt;br /&gt;
&lt;br /&gt;
The installation of PHPExcel is quite straightforward as explained in the [https://github.com/PHPOffice/PHPExcel/wiki PHPExcel wiki] .The download for the current version 1.8.1 consists of a zip archive, which contains a directory tree &#039;PHPExcel-1-8-1&#039; that looks like:&lt;br /&gt;
 Classes/&lt;br /&gt;
   PHPExcel/&lt;br /&gt;
     ...&lt;br /&gt;
   PHPExcel.php&lt;br /&gt;
 Documentation/&lt;br /&gt;
 Examples/&lt;br /&gt;
 ...&lt;br /&gt;
We only need the Classes directory. Copy that directory to a suitable location in the web branch on your web server, for instance to the &#039;lib&#039; directory in that branch. So if the root of your server web branch $_SERVER[&#039;DOCUMENT_ROOT&#039;] is /var/www/html, then the Classes directory should be copied to /var/www/html/lib/Classes, making it look like:&lt;br /&gt;
 /var/www/html/&lt;br /&gt;
   administrator/&lt;br /&gt;
   ...&lt;br /&gt;
   components/&lt;br /&gt;
   ...&lt;br /&gt;
   lib/&lt;br /&gt;
     Classes/&lt;br /&gt;
       PHPExcel/&lt;br /&gt;
         ...&lt;br /&gt;
       PHPExcel.php&lt;br /&gt;
   libraries/&lt;br /&gt;
   ...&lt;br /&gt;
Obviously this list just shows a few directories that should be familiar to you after studying the Joomla tutorials.&lt;br /&gt;
&lt;br /&gt;
=== 22.3 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 22.3.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info.&lt;br /&gt;
&lt;br /&gt;
==== 22.3.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This view has been extended to show an additional button on the &#039;HelloWorld&#039; administrator page. This button is to start the Excel export for the selected records (items). It works in the same way as the button for the csv export like explained in the previous section of this tutorial.&lt;br /&gt;
&lt;br /&gt;
==== 22.3.3 admin/controllers/helloexport.raw.php ====&lt;br /&gt;
&lt;br /&gt;
Pushing the button results in a call to the &#039;exportxls()&#039; function of this controller. It operates similarly to the exportcsv() function. The first steps are the same, up to and including retrieving the records from the database into the $content array.&lt;br /&gt;
&lt;br /&gt;
The remainder of the function embeds the data in an Excel layout, just like the data in the previous example was embedded in a csv layout. This is described in the PHPExcel documentation, and this tutorial is loosely based on the example 01simple-download-xlsx.php in the PHPExpress &#039;Examples&#039; directory.&lt;br /&gt;
&lt;br /&gt;
Finally note that an include statement is added to the start of this controller:&lt;br /&gt;
 require_once $_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/lib/Classes/PHPExcel.php&#039;;&lt;br /&gt;
This statement loads the PHPExcel base class from PHPExcel.php , and assumes that you indeed installed PHPExcel in the lib/Classes directory on your webserver.&lt;br /&gt;
&lt;br /&gt;
=== 22.4 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-22.zip Download Joomla-Hello-Front-End v1-22]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/08aab1a17111e4529f142b086ebc6265f68af680 View Joomla-Hello-Front-End v1-22]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Prev: Improved export function|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|Next: csv and xlsx import|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296092</id>
		<title>J3.x:Developing a component frontend update function/Excel xlsx export</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export&amp;diff=296092"/>
		<updated>2016-04-20T22:14:49Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Excel xlsx export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 22 Excel export using PHPExcel ==&lt;br /&gt;
&lt;br /&gt;
=== 22.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As an example of a more elaborate export feature the HelloWorld version of the previous step has been enhanced with an option to download the data from the database as an xlsx Excel file. For the conversion the PHPExcel packages is used. The current [https://github.com/PHPOffice/PHPExcel PHPExcel] version can be [https://github.com/PHPOffice/PHPExcel/archive/1.8.zip downloaded here] .&lt;br /&gt;
&lt;br /&gt;
=== 22.2 Install PHPExcel ===&lt;br /&gt;
&lt;br /&gt;
The installation of PHPExcel is quite straightforward as explained in the [https://github.com/PHPOffice/PHPExcel/wiki PHPExcel wiki] .The download for the current version 1.8.1 consists of a zip archive, which contains a directory tree &#039;PHPExcel-1-8-1&#039; that looks like:&lt;br /&gt;
 Classes/&lt;br /&gt;
   PHPExcel/&lt;br /&gt;
     ...&lt;br /&gt;
   PHPExcel.php&lt;br /&gt;
   Documentation/&lt;br /&gt;
 Examples/&lt;br /&gt;
 ...&lt;br /&gt;
We only need the Classes directory. Copy that directory to a suitable location in the web branch on your web server, for instance to the &#039;lib&#039; directory in that branch. So if the root of your server web branch $_SERVER[&#039;DOCUMENT_ROOT&#039;] is /var/www/html, then the Classes directory should be copied to /var/www/html/lib/Classes, making it look like:&lt;br /&gt;
 /var/www/html/&lt;br /&gt;
   administrator/&lt;br /&gt;
   ...&lt;br /&gt;
   components/&lt;br /&gt;
   ...&lt;br /&gt;
   lib/&lt;br /&gt;
     Classes/&lt;br /&gt;
     PHPExcel/&lt;br /&gt;
       ...&lt;br /&gt;
     PHPExcel.php&lt;br /&gt;
     libraries/&lt;br /&gt;
   ...&lt;br /&gt;
Obviously this list just shows a few directories that should be familiar to you after studying the Joomla tutorials.&lt;br /&gt;
&lt;br /&gt;
=== 22.3 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 22.3.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info.&lt;br /&gt;
&lt;br /&gt;
==== 22.3.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This view has been extended to show an additional button on the &#039;HelloWorld&#039; administrator page. This button is to start the Excel export for the selected records (items). It works in the same way as the button for the csv export like explained in the previous section of this tutorial.&lt;br /&gt;
&lt;br /&gt;
==== 22.3.3 admin/controllers/helloexport.raw.php ====&lt;br /&gt;
&lt;br /&gt;
Pushing the button results in a call to the &#039;exportxls()&#039; function of this controller. It operates similarly to the exportcsv() function. The first steps are the same, up to and including retrieving the records from the database into the $content array.&lt;br /&gt;
&lt;br /&gt;
The remainder of the function embeds the data in an Excel layout, just like the data in the previous example was embedded in a csv layout. This is described in the PHPExcel documentation, and this tutorial is loosely based on the example 01simple-download-xlsx.php in the PHPExpress &#039;Examples&#039; directory.&lt;br /&gt;
&lt;br /&gt;
Finally note that an include statement is added to the start of this controller:&lt;br /&gt;
 require_once $_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/lib/Classes/PHPExcel.php&#039;;&lt;br /&gt;
This statement loads the PHPExcel base class from PHPExcel.php , and assumes that you indeed installed PHPExcel in the lib/Classes directory on your webserver.&lt;br /&gt;
&lt;br /&gt;
=== 22.4 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-22.zip Download Joomla-Hello-Front-End v1-22]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/08aab1a17111e4529f142b086ebc6265f68af680 View Joomla-Hello-Front-End v1-22]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Prev: Improved export function|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|Next: csv and xlsx import|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Improved_export_function&amp;diff=296091</id>
		<title>J3.x:Developing a component frontend update function/Improved export function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Improved_export_function&amp;diff=296091"/>
		<updated>2016-04-20T22:13:28Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Improved export function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 21 Improved csv export ==&lt;br /&gt;
&lt;br /&gt;
=== 21.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As explained in the previous chapters, Joomla usually displays data in html format. However, it does support other formats as well, including the &#039;raw&#039; format meaning that in that case Joomla does not perform any layout operations at all for the data.&lt;br /&gt;
&lt;br /&gt;
That is exactly the way to go for downloading an export file as generally we have to assume that such file just contains &#039;binary&#039; data.&lt;br /&gt;
&lt;br /&gt;
=== 21.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 21.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/button/index.html&lt;br /&gt;
&lt;br /&gt;
Again, have been updated to reflect version info. A new directory admin/button is created in this chapter, and therefore an additional&#039;&#039; admin/button/index.html &#039;&#039;placeholder file as well. &#039;&#039;helloworld.xml&#039;&#039; is updated accordingly.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.2 admin/button/rawformat.php ====&lt;br /&gt;
&lt;br /&gt;
In Joomla processing of a page begins with starting the concerning controller. To indicate that processing should yield raw data rather than an html page, the controller must receive the&#039;&#039; &#039;format=raw&#039; &#039;&#039;input parameter. These parameter is typically provided by adding an hidden input tag to the form that starts the controller. Like:&lt;br /&gt;
 &amp;lt;form action=&amp;quot;index.php?option=com_helloworld&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;adminForm&amp;quot;&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
The HelloWorld database items are handled from the HelloWorld admin page with form:&lt;br /&gt;
 admin/components/com_helloworld/views/helloworlds/tmpl/default.php&lt;br /&gt;
or its frontend counterpart. The available functions like create new item, delete an item or update an item are offered to the user as buttons above this form. Our export button is here as well.&lt;br /&gt;
&lt;br /&gt;
Pushing a button typically navigates to another web form, like the edit form to update a particular item. These forms are in html format, so including the &#039;format=raw&#039; input tag permanently to the above form definition file tmpl/default.php would cause a conflict for these functions.&lt;br /&gt;
&lt;br /&gt;
So only pushing our export button should submit the &#039;format=raw&#039; tag. As this tag is not a standard part of the form, the button function will add the tag on the fly as post variable. Joomla has no standard button function that allows this, so we define an additional button called&#039;&#039; &#039;RawFormat&#039;&#039;&#039;. It is defined in &#039;&#039;admin/button/rawformat.php&#039;&#039;, and basically just clones the Joomla &#039;Standard&#039; button replacing the reference to the &#039;Joomla.submitbutton&#039; javascript by a reference to the &#039;RawFormatSubmitbutton&#039; javascript. This javascript submits (posts) the form data to the server, and this will schedule the controller.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.3 admin/views/helloworlds/submitbutton.js ====&lt;br /&gt;
&lt;br /&gt;
This javascript injects the tag &amp;lt;tt&amp;gt;&#039;&amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;format&amp;quot; value=&amp;quot;raw&amp;quot;/&amp;amp;gt;&#039;&amp;lt;/tt&amp;gt; in the form. Thereafter it submits the form using the&#039;&#039; &#039;Joomla.submitform(task)&#039; &#039;&#039;call, just like the Joomla &#039;Standard&#039; button would do. The input tag is reset to html format after this call for future form submissions.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.4 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This php file prepares the display of the HelloWorld management page. It is adapted to include the above javascript 21.2.3 and display our new &#039;RawFormat&#039; export button in stead of the previous one.&lt;br /&gt;
&lt;br /&gt;
==== 21.2.5 admin/controllers/helloexport.raw.php ====&lt;br /&gt;
&lt;br /&gt;
This is almost the same file as the previous &#039;admin/controllers/helloexport.php&#039; except that its name has been changed in view of Joomla rules. Joomla expects a controller for raw format to have a filename &amp;amp;lt;controller&amp;amp;gt;.raw.php, although the class name is still &amp;amp;lt;component&amp;amp;gt;Controller&amp;amp;lt;controller&amp;amp;gt;, so &#039;HelloWorldControllerHelloExport&#039; in this case.&lt;br /&gt;
&lt;br /&gt;
The big difference with the previous controller version is that the application does not need to be forcibly closed as Joomla now understands from the &#039;format=raw&#039; tag that the controller yields a raw format layout and embedding in html is not required anymore.&lt;br /&gt;
&lt;br /&gt;
The final statements&lt;br /&gt;
 $app-&amp;gt;sendHeaders();&lt;br /&gt;
 $app-&amp;gt;close();&lt;br /&gt;
therefore have been removed as calling these functions will now be performed by Joomla in the standard way when the controller finishes the &#039;exportcsv&#039; function.&lt;br /&gt;
&lt;br /&gt;
=== 21.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-21.zip Download Joomla-Hello-Front-End v1-21]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/ef3fa05c04b68320f90658f264fba16bdf386777 View Joomla-Hello-Front-End v1-21]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|Prev: First try at csv export|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Next: Excel xlsx export|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export&amp;diff=296090</id>
		<title>J3.x:Developing a component frontend update function/First try at csv export</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export&amp;diff=296090"/>
		<updated>2016-04-20T22:11:47Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: First try at csv export&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 20 First try at csv file export ==&lt;br /&gt;
&lt;br /&gt;
=== 20.1 Description ===&lt;br /&gt;
&lt;br /&gt;
A browser in general is used for interactively retrieving and updating specific data. In many cases it is useful to import or export bulk data for offline processing. This chapter of the tutorial present a first example of exporting data in csv format.&lt;br /&gt;
&lt;br /&gt;
Joomla is tuned for user interaction by means of a browser, so primarily uses html format. An exported data file, however, can be in any format, and typically can not be assumed to be html. This step in the tutorial therefore takes a rather blunt approach in inhibiting Joomla to embed the exported data in html. This is just a shortcut for this chapter, and a more sound approach is presented in the next one.&lt;br /&gt;
&lt;br /&gt;
Just like in the previous steps of this tutorial, the functionality has been implemented both in the backend and the frontend, with (almost) equal code. The next chapter therefore only describes the backend files, but the description is equally valid for the frontend files.&lt;br /&gt;
&lt;br /&gt;
=== 20.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 20.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info only.&lt;br /&gt;
&lt;br /&gt;
==== 20.2.2 admin/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
This step extends the item list page with a button to start the export of the selected records (items) as a csv file for download. The &#039;view&#039; method is therefore extended with the code to create that button.&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; method only enables functions for which the user has permission. This is checked with the &#039;canDo→get()&#039; methods. The export button is enabled if the user has edit permission (&#039;core-edit&#039;).&lt;br /&gt;
&lt;br /&gt;
==== 20.2.3 admin/models/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The model has been extended with a method to retrieve a selected set of record items in one go in stead of fetching one at a time. Each records is stored in an array where each element contains one field. The record arrays in turn are collected in another array, so we have in fact a two dimensional array:&#039;&#039; $content.&#039;&#039; The first row of&#039;&#039; $content &#039;&#039;contains the names of the fields.&lt;br /&gt;
&lt;br /&gt;
For large amounts of data a two dimensional array can become inefficient, both in memory usage and performance, and a more elaborate implementation may be needed. That however is not a Joomla specific issue, and for this tutorial we just keep it at this.&lt;br /&gt;
&lt;br /&gt;
==== 20.2.4 admin/controllers/helloexport.php ====&lt;br /&gt;
&lt;br /&gt;
This is the tricky part. The normal data processing of Joomla consist of retrieving data, preparing it for display and then rendering the data in the proper format. These steps are typically implemented in files like&#039;&#039; controllers/helloworld.php,&#039;&#039; a &#039;view method&#039; in&#039;&#039; helloworld/view.html.php &#039;&#039;and a layout template in&#039;&#039; helloworld/tmpl/default.php.&#039;&#039; In case of an export there is no display, so the last two steps are omitted.&lt;br /&gt;
&lt;br /&gt;
So all the work of compiling data into an export file can be performed in the controller. To be fair, also preparing data for a specific export file layout constitutes an amount of formatting, so arguably that part of the processing could be deferred to a separate &#039;view&#039; method. This might even be architecturally sounder and easier to implement. For this tutorial however we take the brute force approach of doing all the work in a controller.&lt;br /&gt;
&lt;br /&gt;
As data collection for an export is a different task than collection for display, a separate controller&#039;&#039; &#039;helloexport.php&#039; &#039;&#039;is defined in the&#039;&#039; &#039;controllers&#039; &#039;&#039;directory. It performs a couple of steps: first it retrieves the data for the export from the view parameters (&#039;&#039;$pks&#039;&#039;) and database (&#039;&#039;$content&#039;&#039; array of records). Then with the&#039;&#039; &#039;foreach&#039; &#039;&#039;loop it converts &#039;&#039;$content&#039;&#039; to lines for the csv file, and exports those lines with the &#039;print&#039; statement.&lt;br /&gt;
&lt;br /&gt;
Next, the controller transforms the&#039;&#039; &#039;print&#039; &#039;&#039;data into a downloadable file by specifying a content type header. The concerning code starts with the comment&#039;&#039; &#039;// write the header ...&#039; .&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For more background information see for example [http://stackoverflow.com/questions/19781389/joomla-force-file-download-csv-export stackoverflow: joomla force file download csv export] .&lt;br /&gt;
&lt;br /&gt;
Although the data export is now complete, there is still one issue to tackle. Joomla by default expects all output to refer to a section of a web page, so embeds output with html for the other web page sections, like title, standard menus etc. Without further action this extra html code will be written to the downloaded export file when the&#039;&#039; &#039;exportcsv&#039; &#039;&#039;function finishes and returns to Joomla. For this tutorial we prevent this by bluntly forcing the application to close, thereby inhibiting further processing of the output data by Joomla. This is the code after comment&#039;&#039; &#039;// Close the application ...&#039; .&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This approach works well but is rather clumsy from an architectural point of view. Then next step in this tutorial will offer a cleaner approach.&lt;br /&gt;
&lt;br /&gt;
=== 20.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-20.zip Download Joomla-Hello-Front-End v1-20]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/4011ff3dc73ab756cd83f9b6176f682af6978d04 View Joomla-Hello-Front-End v1-20]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions|Prev: Rethink frontend permissions|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Next: Improved export function|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions&amp;diff=296037</id>
		<title>J3.x:Developing a component frontend update function/Rethink frontend permissions</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions&amp;diff=296037"/>
		<updated>2016-04-20T19:30:17Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Rethink frontend permissions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 19 Access rights and permissions ==&lt;br /&gt;
&lt;br /&gt;
=== 19.1 Description ===&lt;br /&gt;
&lt;br /&gt;
The purpose of the back-end pages is typically to perform administrative actions. Permitted users therefore should be administrators of some kind, and the required access rights and permissions are more or less clear.&lt;br /&gt;
&lt;br /&gt;
The purpose of &#039;cloning&#039; and reusing the &#039;administration&#039; pages of a component in the front-end can be very different for the various implementations. So presumably each implementation requires rethinking about a suitable strategy for access rights and permissions. This step suggests two particular use cases, and might not be suitable at all in other situations. The implementation part of support for permissions might well be less difficult than developing a proper strategy for it.&lt;br /&gt;
&lt;br /&gt;
The subject of this tutorial is user access to private data items. This implies that the data often is not intended to be publicly visible to the outside world. This is different from for instance data like articles or blogs, where access rights do need to be granted for modification, but there is no permission required to view that data. So the &#039;standard&#039; Joomla permissions like for &#039;&#039;edit&#039;&#039;, &#039;&#039;delete&#039;&#039;, &#039;&#039;create&#039;&#039; etc are not sufficient, and an additional permission for &#039;&#039;view&#039;&#039; is needed.&lt;br /&gt;
&lt;br /&gt;
==== 19.1.1 Use case: prohibit access to the complete component ====&lt;br /&gt;
&lt;br /&gt;
The most solid restriction is to prohibit any any access to the component at all for users without permissions. As a consequence unpermitted users can not open the private pages in the first place, regardless of whether there was actually data on those pages or not. This is the strategy that for example is also implemented for the back-end admin pages: the outside world can not even see the admin pages &#039;&#039;without&#039;&#039; data, let alone &#039;&#039;with&#039;&#039; data.&lt;br /&gt;
&lt;br /&gt;
The protection for this is implemented in the base controller for the component. This is the place where all execution of component code start and very easy to implement. The unpermitted user is then stopped right at the beginning.&lt;br /&gt;
&lt;br /&gt;
So if your implementation requires functions comparable to administrative actions by users, while you do not want the concerning users to actually access the administrative back-end, then this implementation might be a good approach for you. It is a kind of admin framework for only this component and running in the front-end, so to speak.&lt;br /&gt;
&lt;br /&gt;
==== 19.1.2 Use case: limit view to none but specifically assigned record item ====&lt;br /&gt;
&lt;br /&gt;
A more relaxed way of restrictions on visibility of private data is the scenario where existence of data is visible, but its actual content is hidden. So for our case of user greeting data, the outside world might be allowed to see a list of sequence numbers for the existing greetmessages, without being able to actually &#039;open&#039; the greet item and view its content. For greeting messages this is not really a good example of course, but when the record items contain for instance address info, then the public might be able to view a list of nicknames, but not the actual names, addresses, phone numbers etc.&lt;br /&gt;
&lt;br /&gt;
Another flavor of this scenario is that by default no record items are visible, also not in the overview list, except for the ones that are specifically tagged by the user or admin to be publicly visible. This only concerns the visiblity, not the&#039;&#039; &#039;edit&#039; &#039;&#039;permissions etc. You could think of the case that all greeting messages are invisible, except for the ones from the webmaster and the support desk. (Maybe this is not a very good example ...).&lt;br /&gt;
&lt;br /&gt;
These kind of permission checks are not performed in the base controller, but about at the same place in the code where also the checks for the classic permissions like&#039;&#039; &#039;edit&#039;, &#039;delete&#039; &#039;&#039;etc are implemented.&lt;br /&gt;
&lt;br /&gt;
Both use cases are shown in this step of the tutorial. And that is probably not a real-world scenario because one would presumably make a choice for one of the cases and skip the other.&lt;br /&gt;
&lt;br /&gt;
=== 19.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 19.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
have been updated to reflect new version info.&lt;br /&gt;
&lt;br /&gt;
New messages have been added to the language files.&lt;br /&gt;
* admin/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
* site/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
&lt;br /&gt;
==== 19.2.2 site/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
As already explained in the introduction, the first use case only requires one change in the base controller. The user is checked for permission to access the component at all. Without access the buck stops here.&lt;br /&gt;
&lt;br /&gt;
==== 19.2.3 site/views/helloworld/view.html.php, site/views/helloworld/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The second use case is implemented by allowing the public user to view the usual overview list of greeting items, but deny &#039;&#039;view&#039;&#039; access to the message content. The&#039;&#039; &#039;helloworld&#039; &#039;&#039;view therefore is extended accordingly while the&#039;&#039; &#039;helloworlds&#039; &#039;&#039;view has not changed.&lt;br /&gt;
&lt;br /&gt;
Note that the admin can still assign public view permission to individual greeting item records as usual.&lt;br /&gt;
&lt;br /&gt;
==== 19.2.4 admin/access.xml ====&lt;br /&gt;
&lt;br /&gt;
The existence of new access rights&#039;&#039; &#039;helloworld.access&#039; &#039;&#039;and&#039;&#039; &#039;helloworld.view&#039; &#039;&#039;is defined in this xml file. The corresponding permission can now be set in the component admin pages, either at component level or at record item level.&lt;br /&gt;
&lt;br /&gt;
==== 19.2.5 script.php ====&lt;br /&gt;
&lt;br /&gt;
The most complicated change actually is the install script. Because of the non-standard scenarios the use case may require, or at least prefer, certain permissions already being setup by default at installation time. The &#039;&#039;postflight&#039;&#039; function of the installation script &#039;&#039;script.php&#039;&#039; is the place to do so.&lt;br /&gt;
&lt;br /&gt;
As an example, the implementation in this tutorial first searches for identification of the unregistered, outside world,&#039;&#039; &#039;Public&#039; &#039;&#039;user. In then searches for the permission setting for the current component, and adds&#039;&#039; &#039;helloworld.access&#039; &#039;&#039;rights to the unregistered user by default, so that the outside world at least can access the component and display the overview list of all greeting messages. Note that the admin can of course revoke this setting again in the global permissions page of the component.&lt;br /&gt;
&lt;br /&gt;
The functionality is implemented by directly accessing the database. This is not very complicated so as such not an issue, but it might be against the (official or intended) Joomla architecture not to use standard Joomla functions for this. As of yet, however, I have not been able to find out what the &#039;official&#039; approach is supposed to be, and if such functions indeed do exist.&lt;br /&gt;
&lt;br /&gt;
=== 19.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-19.zip Download Joomla-Hello-Front-End v1-19]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/3c25fa17790cfbea57516341a27deba5233db73d View Joomla-Hello-Front-End v1-19]&lt;br /&gt;
&lt;br /&gt;
=== 19.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ...&lt;br /&gt;
* This step is primarily about permissions, so test different permission setting both for &#039;Public&#039;, the outside world. And for &#039;Registered&#039; users with a login account.&lt;br /&gt;
* Test the differences between &#039;&#039;helloworld.access&#039;&#039; and &#039;&#039;helloworld.view&#039;&#039; permissions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Record_list_view_page|Prev: Record list view page|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|Next: First try at csv export|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Record_list_view_page&amp;diff=296036</id>
		<title>J3.x:Developing a component frontend update function/Record list view page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Record_list_view_page&amp;diff=296036"/>
		<updated>2016-04-20T19:28:09Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Record list view page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 18 Frontend item list view like in the backend ==&lt;br /&gt;
&lt;br /&gt;
=== 18.1 Description ===&lt;br /&gt;
&lt;br /&gt;
Where the previous step of this tutorial &#039;cloned&#039; the edit page from the back-end to the front-end, in this step also the list view page will be &#039;cloned&#039; so that both component administration pages now run in the front-end with (almost) equal functionality, including toolbars, searching and ordering etc.&lt;br /&gt;
&lt;br /&gt;
=== 18.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 18.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
Again, these files have been updated to reflect version info only.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.2 site/views/helloworlds/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
Also for the list view the differences are limited.&lt;br /&gt;
* Like in the previous step the &#039;&#039;display()&#039;&#039; function starts and ends by a call to respectively &#039;&#039;includeAdminEnv()&#039;&#039; and &#039;&#039;setDocument()&#039;&#039; that have been adapted to make required back-end functions available to the front-end as well.&lt;br /&gt;
* The back-end list overview page featured a sidebar to switch between item management and category management. For this tutorial it is assumed to be of little relevance to the front-end, so has been left out.&lt;br /&gt;
* For similar reason the &#039;&#039;preferences/options&#039;&#039; button in the right upper corner of the toolbar of the back-end pages has been left out as well.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.3 site/views/helloworlds/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
The layout template is adapted for the lacking side bar. Because of that the &#039;&#039;&amp;amp;lt;div ... span10&amp;amp;gt;&#039;&#039; is also superfluous.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.4 site/views/helloworld/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The changes in the &#039;&#039;edit&#039;&#039; view page in this step are even smaller than in the previous step as we can now remove the changes of the previous step for working around the lack of the list view page, that is now reintroduced again.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.5 site/views/helloworld/tmpl/edit.php, site/views/helloworld/tmpl/edit.xml ====&lt;br /&gt;
&lt;br /&gt;
These template layout files are equal to the versions of the previous step.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.6 site/models/helloworld.php and .../helloworlds.php ====&lt;br /&gt;
&lt;br /&gt;
The front-end model files for the list view and the edit page are equal to the back-end ones, except for a reference to a javascript file that is now in a front-end directory.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.7 site/models/forms/*, site/models/rules/*, site/models/forms/helloworld.xml ====&lt;br /&gt;
&lt;br /&gt;
The front-end files in these model directories are also equal to the back-end versions, with the exception of &#039;&#039;site/models/forms/helloworld.xml&#039;&#039; . As noted already in the previous step of the tutorial, the back-end &#039;&#039;edit&#039;&#039; page contains three section, the latter two for global configuration settings and permission settings. As these presumably are less relevant to the front-end &#039;&#039;edit&#039;&#039; page, they are left out.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.8 site/table/* ====&lt;br /&gt;
&lt;br /&gt;
Table access is the same in front-end and back-end, so the files in this directory are just a &#039;clone&#039;.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.9 site/controllers/helloworld.php and .../helloworlds.php ====&lt;br /&gt;
&lt;br /&gt;
The front-end controller file &#039;&#039;helloworlds.php&#039;&#039; is equal to the back-end one. &#039;&#039;helloworld.php&#039;&#039; differs slightly as explained in the previous tutorial step, but the change is even less then previously as we do not have to work-around the missing list view page.&lt;br /&gt;
&lt;br /&gt;
==== 18.2.10 site/controller.php, site/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The base controller are equal to the previous step.&lt;br /&gt;
&lt;br /&gt;
=== 18.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-18.zip Download Joomla-Hello-Front-End v1-18]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/956e17d2c3a8a5a487093a2155305b8ba1a4cc65 View Joomla-Hello-Front-End v1-18]&lt;br /&gt;
&lt;br /&gt;
=== 18.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ... &lt;br /&gt;
* Like in the previous step, check that also the front-end overview list looks like, and functions like the back-end counterpart.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page|Prev: Record item editing page|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions|Next: Rethink frontend permissions|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296035</id>
		<title>J3.x:Developing a component frontend update function/Simple frontend data entry</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296035"/>
		<updated>2016-04-20T19:25:13Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Simple frontend data entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 16 Add data entry ==&lt;br /&gt;
&lt;br /&gt;
=== 16.1 Description ===&lt;br /&gt;
&lt;br /&gt;
Up to this step the HelloWorld component only enables the administrator to add or change items in the database. This step adds functionality to also allow a user to change data.&lt;br /&gt;
&lt;br /&gt;
Typically this is relevant when the data is related or owned by the user. Therefore an owner field is added to the table storing the greeting messages. The use case for this scenario is enabling users to update their own greetings.&lt;br /&gt;
&lt;br /&gt;
=== 16.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 16.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
have been updated to reflect new version info.&lt;br /&gt;
&lt;br /&gt;
New messages have been added to the language files mainly because of the addition of the new&#039;&#039; &#039;uid&#039; &#039;&#039;field to the database table.&lt;br /&gt;
* admin/models/fields/helloworld.php&lt;br /&gt;
* site/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
&lt;br /&gt;
==== 16.2.2 site/views/helloworld/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
The user must have a way to enter data. The html way of doing so is to develop a form, so this view is extended with such. Also, an new field&#039;&#039; &#039;uid&#039; &#039;&#039;is added to the view to reflect the user/owner identification.&lt;br /&gt;
&lt;br /&gt;
The variable data in the form is largely derived from the object &#039;&#039;$this-&amp;gt;item&#039;&#039; which holds the current database record. The primary key for that record is &#039;&#039;$this-&amp;gt;item-&amp;gt;id&#039;&#039; and usually is indicated by the variable &#039;&#039;$id&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After data entry the user hits the enter key or the submit button which results in posting the form data (including the entered user data) to the server. The form&#039;&#039; &#039;action&#039; &#039;&#039;tag is set up to redisplay the present page after a submit, and therefore the view &#039;&#039;site/views/helloworld/view.html.php&#039;&#039; is called again and acts on the posted data.&lt;br /&gt;
&lt;br /&gt;
The form data could also be submitted to the server with the &#039;get&#039; in stead of the &#039;post&#039; method, but that will result in displaying the transferred data in the URL bar of the browser. That can be handy in some cases, for instance when the user wishes to copy the URL for later use. The &#039;post&#039; method sends the data invisible to the user which is often a more appropriate approach for private data.&lt;br /&gt;
&lt;br /&gt;
And finally, the form contains an additional tag JHtml::_(&#039;form.token&#039;). This tag is generated by Joomla as a kind of checksum with enables the application to detect possible hacking of the form. That is a risk related to sending data to the server. Previous steps of HelloWorld only displayed data without receiving anything so use of this token was not needed. See for instance [https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms Joomla Doc: How to add CSRF anti-spoofing to forms] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.3 site/views/helloworld/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The code in this file transfers data from the server for display in the defined view of section 16.2.2 . The difference with the previous version of HelloWorld is that the display can now result from two cases.&lt;br /&gt;
&lt;br /&gt;
In the first place the&#039;&#039; &#039;view&#039; &#039;&#039;will be displayed when the user browses to this page for the first time. In that case the&#039;&#039; &#039;view&#039; &#039;&#039;method has to retrieve the data from the database.&lt;br /&gt;
&lt;br /&gt;
The second case for displaying the&#039;&#039; &#039;view&#039; &#039;&#039;is when the user has posted and submitted the form data after entering some values. This is detected by the&#039;&#039; &#039;view&#039; &#039;&#039;method by inspecting the&#039;&#039; &#039;post&#039; &#039;&#039;property of the form which now contains the user data at hand. The database will be updated with the posted data.&lt;br /&gt;
&lt;br /&gt;
Joomla keeps&#039;&#039; &#039;post&#039; &#039;&#039;data in the &#039;&#039;JFactory::getApplication()-&amp;gt;input-&amp;gt;post&#039;&#039; object. The variable &#039;&#039;$postmsg&#039;&#039; will retrieve the value of the greeting entered by the user, or will be null when no data has been posted like on the initial display of this page. Similarly, &#039;&#039;$getid&#039;&#039; will get the value of the item record &#039;&#039;id&#039;&#039; after a &#039;get&#039; data command when the user specified&#039;&#039; &#039;id&#039; &#039;&#039;in the URL, for instance with url &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039; to select item record 3.&lt;br /&gt;
&lt;br /&gt;
When&#039;&#039; &#039;postmsg&#039; &#039;&#039;holds a value after a post, the view first checks if the current record item was owned by the current user. If this is not the case then the record will not be updated. This can also occur if the user is not logged in.&lt;br /&gt;
&lt;br /&gt;
If the record is owned by the user, then the view calls the &#039;model&#039; object to update the record in the database with &#039;&#039;$model-&amp;gt;updateThisItem($postmsg)&#039;&#039; . Finally, the view will show a message indicating whether the update succeeded.&lt;br /&gt;
&lt;br /&gt;
The model object caches some relevant data, including the current record, in a central&#039;&#039; &#039;state&#039; &#039;&#039;object so that not every class involved in accessing and displaying the database record item needs to keep track of that data. The view retrieves and stores that data from and to the cache with &#039;&#039;$state-&amp;gt;get()&#039;&#039; and &#039;&#039;$state→set().&#039;&#039; Also the view&#039;s own&#039;&#039; &#039;get()&#039; &#039;&#039;method is a shortcut for retrieving data from the model&#039;s cache.&lt;br /&gt;
&lt;br /&gt;
As the model might process information for several other classes than this view, data specifically for this view will have a name prefixed by a unique identifier &#039;&#039;$context&#039;&#039; . We need to take care that we use the same prefix in all relevant class files.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.4 site/models/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The model class is extended with the method&#039;&#039; &#039;updateThisItem&#039; &#039;&#039;to write the submitted user data to the database. Note that also the model class internally uses the&#039;&#039; &#039;State&#039; &#039;&#039;cache object to store and retrieve common data.&lt;br /&gt;
&lt;br /&gt;
As an example some &#039;intelligence&#039; has been designed to select the record item to be presented. The model takes the following steps:&lt;br /&gt;
* If the item is specified by the in the url like with &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039;, then this&#039;&#039; &#039;id&#039; &#039;&#039;is used as primary key.&lt;br /&gt;
* If the id is not specified in the url, and the user is logged in, then the model searches for the first record item owned by this user, if that exists&lt;br /&gt;
* In other cases, record item with&#039;&#039; &#039;id=1&#039; &#039;&#039;is retrieved.&lt;br /&gt;
* The item will be&#039;&#039; &#039;null&#039; &#039;&#039;if nothing is found.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.5 site/views/helloworld/tmpl/default.xml ====&lt;br /&gt;
&lt;br /&gt;
This file contains a definition for the administrator menu management. When creating a new menu entry, a list of options is shown for selecting a menu type. The list now will show an &#039;HelloWorld&#039; option to create a menu item which opens the data entry form.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.6 admin/models/fields/helloworld.php, admin/models/forms/filter_helloworlds.xml, admin/models/forms/helloworld.xml ====&lt;br /&gt;
&lt;br /&gt;
These files have been updated to support the additional&#039;&#039; &#039;uid&#039; &#039;&#039;field. Note that in &#039;&#039;admin/models/forms/helloworld.xml&#039;&#039; this field is defined as type&#039;&#039; &#039;user&#039; &#039;&#039;so that in the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin edit page it is shown as an item with a pop-up that presents all defined users.&lt;br /&gt;
&lt;br /&gt;
In the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin list page the&#039;&#039; &#039;uid&#039; &#039;&#039;field in the filter menu is just shown as a number, as specified in &#039;&#039;admin/models/forms/filter_helloworlds.xml&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
See [https://docs.joomla.org/Standard_form_field_types Joomla Doc: Standard form field types] for more information.&lt;br /&gt;
&lt;br /&gt;
=== 16.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-16.zip Download Joomla-Hello-Front-End v1-16]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/37ba5d8b61008b05b58770ddecc2a7c196525541 View Joomla-Hello-Front-End v1-16]&lt;br /&gt;
&lt;br /&gt;
=== 16.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ...&lt;br /&gt;
* Create one or more (test) users with permissions to edit HelloWorld greet messages.&lt;br /&gt;
* Check that these users can change items in the front-end when logged in. Check that Public users and not logged-in users can not change items.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Prev: Let&#039;s start with the Initial version|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page|Next: Record item editing page|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page&amp;diff=296034</id>
		<title>J3.x:Developing a component frontend update function/Record item editing page</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page&amp;diff=296034"/>
		<updated>2016-04-20T19:21:55Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Record item editing page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 17 Frontend data entry like in the backend ==&lt;br /&gt;
&lt;br /&gt;
=== 17.1 Description ===&lt;br /&gt;
&lt;br /&gt;
As noted earlier, the administrative backend of Joomla shows that it features by default already quite some functionality for access to data in the database. This includes standard list and edit views for selecting, publishing, adding, deleting and updating records, including toolbars and options for searching, filtering, ordering and pagination.&lt;br /&gt;
&lt;br /&gt;
The previous step in this tutorial showed how to build a view for the user to update database items more or less from scratch. It would be nice of course if we could just use all the standard Joomla backend features in the frontend as well for our own components for end users. Reusing existing functionality generally is better than reinventing the wheel.&lt;br /&gt;
&lt;br /&gt;
This step shows how to &#039;clone&#039; a backend item editing page for use in the frontend by end users.&lt;br /&gt;
&lt;br /&gt;
==== 17.1.1 Standard architecture ====&lt;br /&gt;
&lt;br /&gt;
For the backend Joomla uses a standard architecture for list views and editing pages. As a result admin pages for all components look similar. Pages to a large extend are defined by means of xml files and this reduces the need for coding to a minimum. The architecture however still offers a lot of options and interfaces to adapt the pages to specific needs. &lt;br /&gt;
&lt;br /&gt;
This is a powerful proposition, but of course requires a solid understanding of all those options. That will take some time but easily pays back because of better development results. As this architecture is used for the backend, a good level of understanding is required anyway.&lt;br /&gt;
&lt;br /&gt;
==== 17.1.2 Clone the backend to the frontend ====&lt;br /&gt;
&lt;br /&gt;
Joomla adheres to the MVC (model-view-controller) architecture, so the functionality of a feature like the edit page is implemented in the &#039;&#039;models&#039;&#039;, &#039;&#039;views&#039;&#039; and &#039;&#039;controllers&#039;&#039; directories of the admin and site trees, respectively. As we intend to clone the backend functions to the frontend we start by copying the admin/models, admin/views and admin/controllers directory tree to their site/* counterparts.&lt;br /&gt;
&lt;br /&gt;
As this step of the tutorial is concerned only with the edit page and not yet with the list view, we only copy the &#039;helloworld&#039; (singular) files and not the &#039;helloworlds&#039; (plural) ones. Adding the latter will be addressed in a next tutorial step.&lt;br /&gt;
&lt;br /&gt;
Some modifications are still needed, and the differences between the backend files and their frontend counterparts are covered in the next sections.&lt;br /&gt;
&lt;br /&gt;
=== 17.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 17.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
have been updated to reflect new version info.&lt;br /&gt;
&lt;br /&gt;
New messages have been added to the language files.&lt;br /&gt;
* admin/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
* site/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
&lt;br /&gt;
The administrative backend has not been changed for this step.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.2 site/views/helloworld/tmpl/edit.php ====&lt;br /&gt;
&lt;br /&gt;
The Joomla architecture expects edit tasks by default to be performed by a layout template called &#039;&#039;edit&#039;&#039;, so our layout file is &#039;&#039;site/views/helloworld/tmpl/edit.php&#039;&#039; in stead of &#039;&#039;.../tmpl/default.php&#039;&#039; . This php file is generic in that it does not contain references to particular texts, labels or fields, but it calls the MVC model to provide the definitions for these. The layout code then generates a page for display according to these definitions.&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;edit.php&#039;&#039; file therefore can be used without modification for both back- and front-end, and even in other components as well.&lt;br /&gt;
&lt;br /&gt;
Note that the architecture for these pages originates from usage in the backend, and in some places this is explicitly visible in the code. For instance, the architecture expects the form name and id to be&#039;&#039; &#039;adminForm&#039; &#039;&#039;even when we use the layout template in the frontend.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.3 site/views/helloworld/tmpl/edit.xml ====&lt;br /&gt;
&lt;br /&gt;
This file contains a definition for the administrator menu management, just like the &#039;&#039;.../tmpl/default.xml&#039;&#039; in the previous step 16.2.5 . This feature has no counterpart for the backend HelloWorld pages, so there is no &#039;&#039;admin/views/helloworld/tmpl/edit.xml&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
==== 17.2.4 site/views/helloworld/view.html.php, views/helloworld/submitbutton.js ====&lt;br /&gt;
&lt;br /&gt;
For the larger part the admin backend code can be reused. Changes are:&lt;br /&gt;
* Usually the edit page is accessed by first selecting a record item from the overview list page. This step of the tutorial only implements the edit page and lacks the list page. The &#039;&#039;display&#039;&#039; function therefore starts with retrieving the item &#039;&#039;id&#039;&#039; from the url like in &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039; . The id parameter is stored in the State cache so that the model functions can access it.&lt;br /&gt;
* &#039;&#039;setLayout(&#039;edit&#039;)&#039;&#039; specifies that the &#039;&#039;tmpl/edit.php&#039;&#039; layout template should be called to display the page, in stead of the &#039;&#039;tmpl/default.php&#039;&#039; template.&lt;br /&gt;
* Next, the function &#039;&#039;includeAdminEnv()&#039;&#039; is called. This function takes care that the required backend functions are also available to the present view class that runs in the frontend. By default, the admin language files and helper functions like &#039;&#039;JtoolBarHelper&#039;&#039; etc. are only available from the backend code.&lt;br /&gt;
* Joomla support Access Permissions to make sure that data is only available for users with the proper access rights. Permissions can be set at global Joomla level, at component level but also at record level. The latter is arranged by the &#039;&#039;asset_id&#039;&#039; field of the data records.For demonstration purposes the record level access is relaxed a little: normally a user can not access a record if its permission has not been setup properly and &#039;&#039;asset_id&#039;&#039; has been filled accordingly. We allow users to retrieve an uninitialized record item, and the &#039;&#039;asset_id&#039;&#039; field will be properly set on the fly if the record is modified and rewritten to the database. This procedure makes it easier to import new records.&lt;br /&gt;
* For demonstration purposes the edit page now also displays the current user id, and the record item id, although these parameters in general are only used internally.The code for this actually belongs in the &#039;&#039;tmpl/edit.php&#039;&#039; but as it is only for demonstration the code is compiled in the view in order to keep the standard &#039;&#039;edit.php&#039;&#039; unchanged.&lt;br /&gt;
* The setDocument() function is updated to refer to the frontend settings in stead of the backend.&lt;br /&gt;
* Some css styles for the toolbar are by default available in the backend but lack in the frontend. These styles have been cloned to &#039;&#039;media/css/helloworld.css&#039;&#039; to support the frontend toolbar.&lt;br /&gt;
* The backend javascript code &#039;&#039;views/helloworld/submitbutton.js&#039;&#039; that is called by the submit buttons can be reused without modifications.&lt;br /&gt;
&lt;br /&gt;
Although the above seems quite a story, the changes are all quite small and to a great extent the backend &#039;&#039;edit&#039;&#039; page works in the frontend as well, including the toolbar. The page display format now follows the frontend style, so may use different fonts, sizes and colors etc, but the functionality and general layout is equal for back- and front-end.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.5 site/models/forms/helloworld.xml ====&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;edit&#039;&#039; page definition file &#039;&#039;site/models/forms/helloworld.xml&#039;&#039; is just a clone of the backend file. Note that the &#039;&#039;edit&#039;&#039; page displays both the record item fields, but also includes a section to edit global HelloWorld component parameters and a section with permission specifications. This shows that a straightforward clone of backend features is possible, although in a real life application the latter two sections are presumably removed from the frontend &#039;&#039;edit&#039;&#039; page.&lt;br /&gt;
&lt;br /&gt;
This is a matter of adapting this &#039;&#039;helloworld.xml&#039;&#039; file, and will be discussed in a next step of this tutorial.&lt;br /&gt;
&lt;br /&gt;
Although not strictly required, &#039;&#039;helloworld.xml&#039;&#039; is changed in one place: the user id field&#039;&#039; &#039;uid&#039;.&#039;&#039; In the admin backend this field shows a popup window with an extensive overview of all user accounts; probably too extensive for normal use in the frontend. So the field is replaced by a dropdown list showing only the user names without additional options. The dropdown is based on a straightforward sql query on the &#039;&#039;&amp;lt;nowiki&amp;gt;#__users&amp;lt;/nowiki&amp;gt;&#039;&#039; table to generate the list. You can try out the difference by just using a copy of &#039;&#039;admin/models/forms/helloworld.xml&#039;&#039; in stead of this modified version.&lt;br /&gt;
&lt;br /&gt;
See [https://docs.joomla.org/Standard_form_field_types Joomla Doc: Standard form field types] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.6 site/models/helloworld.php, site/models/forms/helloworld.js ====&lt;br /&gt;
&lt;br /&gt;
As both data and views are (almost) the same in both front- and backend, also the model is (almost) equal. Only the reference to the javascript file &#039;&#039;site/models/forms/helloworld.js&#039;&#039; is adapted to the frontend. The javascript file itself is an unchanged copy. Its purpose is validation of the syntax of the greeting entered by the user.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.7 site/controllers/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
That leaves us with the controller. This class is based on &#039;&#039;JControllerForm&#039;&#039;, and the &#039;&#039;HelloWorld&#039;&#039; super class needs almost no additional functionality, neither for the backend or the frontend. The view changes follow:&lt;br /&gt;
* &#039;&#039;JControllerForm&#039;&#039; expects a combination of a list view page for selecting a record item, and an edit page for changing the item. For this tutorial step we have no list view page, so we indicate in the constructor to immediately open the edit page view&#039;&#039; &#039;helloworld&#039; &#039;&#039;in stead of the list page (which would have been&#039;&#039; &#039;helloworlds&#039; &#039;&#039;as exptected by &#039;&#039;JcontrollerForm&#039;&#039; by default).&lt;br /&gt;
* In &#039;&#039;allowEdit()&#039;&#039; we add a relaxed permission check for when &#039;&#039;asset_id&#039;&#039; is still uninitialized. See 17.2.4.&lt;br /&gt;
* an override of the function &#039;&#039;allowAdd()&#039;&#039; is not required for this tutorial. Not in the backend either, for that matter.&lt;br /&gt;
&lt;br /&gt;
==== 17.2.8 site/controller.php, site/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The back-end base controller include some additional calls in view of the layout of the admin pages which are not required in the front-end.&lt;br /&gt;
&lt;br /&gt;
The back-end controller also checks whether the user has sufficient administrative access rights. Permissions are a topic of its own, and is addressed in the separate next step 19.&lt;br /&gt;
&lt;br /&gt;
=== 17.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-17.zip Download Joomla-Hello-Front-End v1-17]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/a7c470d93789a914da0285cd220222f7e420fe11 View Joomla-Hello-Front-End v1-17]&lt;br /&gt;
&lt;br /&gt;
=== 17.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ...&lt;br /&gt;
* Test that everybody can open the edit page with e.g. &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039; .&lt;br /&gt;
* Check that only logged-in users have&#039;&#039; &#039;edit&#039; &#039;&#039;etc buttons on their toolbar.&lt;br /&gt;
* Check that only logged-in users (with proper permissions) can update the page.&lt;br /&gt;
* View some other message items with other id&#039;s. Create and delete some items.&lt;br /&gt;
* Verify that this &#039;front-end&#039; page has the same functionality as the back-end page. Apart from some minor differences.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry|Prev: Simple frontend data entry|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Record_list_view_page|Next: Record list view page|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296033</id>
		<title>Chunk:Developing a component frontend update function - Contents</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296033"/>
		<updated>2016-04-20T19:11:43Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Developing a component frontend update function - Contents&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot; style=&amp;quot;float:right; background:#fff;margin:0 0 1.0em 1.0em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel radius mw-collapsible&amp;quot; style=&amp;quot;width:100%;background:#fff;font-size:.8em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Articles in this Series&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel mw-collapsible-content&amp;quot; style=&amp;quot;border:none; background:#fff; min-width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function|Introduction]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Initial_version|Initial version]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry|Simple frontend data entry]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Record_item_editing_page|Record item editing page]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Record_list_view_page|Record list view page]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Rethink_frontend_permissions|Rethink frontend permissions]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/First_try_at_csv_export|First try at csv export]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Improved_export_function|Improved export function]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Excel_xlsx_export|Excel xlsx export]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/csv_and_xlsx_import|csv and xlsx import]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Import_with_summary_screen|Import with summary screen]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{-}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Tutorials in a Series]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296008</id>
		<title>Chunk:Developing a component frontend update function - Contents</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=296008"/>
		<updated>2016-04-20T16:53:14Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot; style=&amp;quot;float:right; background:#fff;margin:0 0 1.0em 1.0em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel radius mw-collapsible&amp;quot; style=&amp;quot;width:100%;background:#fff;font-size:.8em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Articles in this Series&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel mw-collapsible-content&amp;quot; style=&amp;quot;border:none; background:#fff; min-width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function|Introduction]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Initial_version|Initial version]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry|Simple frontend data entry]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{-}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Tutorials in a Series]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=296007</id>
		<title>J3.x:Developing a component frontend update function/Initial version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=296007"/>
		<updated>2016-04-20T16:51:15Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function|Prev: Introduction|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry|Next: Simple frontend data entry|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296006</id>
		<title>J3.x:Developing a component frontend update function/Simple frontend data entry</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296006"/>
		<updated>2016-04-20T16:46:09Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Simple frontend data entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 16 Add data entry ==&lt;br /&gt;
&lt;br /&gt;
=== 16.1 Description ===&lt;br /&gt;
&lt;br /&gt;
Up to this step the HelloWorld component only enables the administrator to add or change items in the database. This step adds functionality to also allow a user to change data.&lt;br /&gt;
&lt;br /&gt;
Typically this is relevant when the data is related or owned by the user. Therefore an owner field is added to the table storing the greeting messages. The use case for this scenario is enabling users to update their own greetings.&lt;br /&gt;
&lt;br /&gt;
=== 16.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 16.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
have been updated to reflect new version info.&lt;br /&gt;
&lt;br /&gt;
New messages have been added to the language files mainly because of the addition of the new&#039;&#039; &#039;uid&#039; &#039;&#039;field to the database table.&lt;br /&gt;
* admin/models/fields/helloworld.php&lt;br /&gt;
* site/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
&lt;br /&gt;
==== 16.2.2 site/views/helloworld/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
The user must have a way to enter data. The html way of doing so is to develop a form, so this view is extended with such. Also, an new field&#039;&#039; &#039;uid&#039; &#039;&#039;is added to the view to reflect the user/owner identification.&lt;br /&gt;
&lt;br /&gt;
The variable data in the form is largely derived from the object &#039;&#039;$this-&amp;gt;item&#039;&#039; which holds the current database record. The primary key for that record is &#039;&#039;$this-&amp;gt;item-&amp;gt;id&#039;&#039; and usually is indicated by the variable &#039;&#039;$id&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After data entry the user hits the enter key or the submit button which results in posting the form data (including the entered user data) to the server. The form&#039;&#039; &#039;action&#039; &#039;&#039;tag is set up to redisplay the present page after a submit, and therefore the view &#039;&#039;site/views/helloworld/view.html.php&#039;&#039; is called again and acts on the posted data.&lt;br /&gt;
&lt;br /&gt;
The form data could also be submitted to the server with the &#039;get&#039; in stead of the &#039;post&#039; method, but that will result in displaying the transferred data in the URL bar of the browser. That can be handy in some cases, for instance when the user wishes to copy the URL for later use. The &#039;post&#039; method sends the data invisible to the user which is often a more appropriate approach for private data.&lt;br /&gt;
&lt;br /&gt;
And finally, the form contains an additional tag JHtml::_(&#039;form.token&#039;). This tag is generated by Joomla as a kind of checksum with enables the application to detect possible hacking of the form. That is a risk related to sending data to the server. Previous steps of HelloWorld only displayed data without receiving anything so use of this token was not needed. See for instance [https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms Joomla Doc: How to add CSRF anti-spoofing to forms] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.3 site/views/helloworld/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The code in this file transfers data from the server for display in the defined view of section 16.2.2 . The difference with the previous version of HelloWorld is that the display can now result from two cases.&lt;br /&gt;
&lt;br /&gt;
In the first place the&#039;&#039; &#039;view&#039; &#039;&#039;will be displayed when the user browses to this page for the first time. In that case the&#039;&#039; &#039;view&#039; &#039;&#039;method has to retrieve the data from the database.&lt;br /&gt;
&lt;br /&gt;
The second case for displaying the&#039;&#039; &#039;view&#039; &#039;&#039;is when the user has posted and submitted the form data after entering some values. This is detected by the&#039;&#039; &#039;view&#039; &#039;&#039;method by inspecting the&#039;&#039; &#039;post&#039; &#039;&#039;property of the form which now contains the user data at hand. The database will be updated with the posted data.&lt;br /&gt;
&lt;br /&gt;
Joomla keeps&#039;&#039; &#039;post&#039; &#039;&#039;data in the &#039;&#039;JFactory::getApplication()-&amp;gt;input-&amp;gt;post&#039;&#039; object. The variable &#039;&#039;$postmsg&#039;&#039; will retrieve the value of the greeting entered by the user, or will be null when no data has been posted like on the initial display of this page. Similarly, &#039;&#039;$getid&#039;&#039; will get the value of the item record &#039;&#039;id&#039;&#039; after a &#039;get&#039; data command when the user specified&#039;&#039; &#039;id&#039; &#039;&#039;in the URL, for instance with url &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039; to select item record 3.&lt;br /&gt;
&lt;br /&gt;
When&#039;&#039; &#039;postmsg&#039; &#039;&#039;holds a value after a post, the view first checks if the current record item was owned by the current user. If this is not the case then the record will not be updated. This can also occur if the user is not logged in.&lt;br /&gt;
&lt;br /&gt;
If the record is owned by the user, then the view calls the &#039;model&#039; object to update the record in the database with &#039;&#039;$model-&amp;gt;updateThisItem($postmsg)&#039;&#039; . Finally, the view will show a message indicating whether the update succeeded.&lt;br /&gt;
&lt;br /&gt;
The model object caches some relevant data, including the current record, in a central&#039;&#039; &#039;state&#039; &#039;&#039;object so that not every class involved in accessing and displaying the database record item needs to keep track of that data. The view retrieves and stores that data from and to the cache with &#039;&#039;$state-&amp;gt;get()&#039;&#039; and &#039;&#039;$state→set().&#039;&#039; Also the view&#039;s own&#039;&#039; &#039;get()&#039; &#039;&#039;method is a shortcut for retrieving data from the model&#039;s cache.&lt;br /&gt;
&lt;br /&gt;
As the model might process information for several other classes than this view, data specifically for this view will have a name prefixed by a unique identifier &#039;&#039;$context&#039;&#039; . We need to take care that we use the same prefix in all relevant class files.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.4 site/models/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The model class is extended with the method&#039;&#039; &#039;updateThisItem&#039; &#039;&#039;to write the submitted user data to the database. Note that also the model class internally uses the&#039;&#039; &#039;State&#039; &#039;&#039;cache object to store and retrieve common data.&lt;br /&gt;
&lt;br /&gt;
As an example some &#039;intelligence&#039; has been designed to select the record item to be presented. The model takes the following steps:&lt;br /&gt;
* If the item is specified by the in the url like with &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039;, then this&#039;&#039; &#039;id&#039; &#039;&#039;is used as primary key.&lt;br /&gt;
* If the id is not specified in the url, and the user is logged in, then the model searches for the first record item owned by this user, if that exists&lt;br /&gt;
* In other cases, record item with&#039;&#039; &#039;id=1&#039; &#039;&#039;is retrieved.&lt;br /&gt;
* The item will be&#039;&#039; &#039;null&#039; &#039;&#039;if nothing is found.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.5 site/views/helloworld/tmpl/default.xml ====&lt;br /&gt;
&lt;br /&gt;
This file contains a definition for the administrator menu management. When creating a new menu entry, a list of options is shown for selecting a menu type. The list now will show an &#039;HelloWorld&#039; option to create a menu item which opens the data entry form.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.6 admin/models/fields/helloworld.php, admin/models/forms/filter_helloworlds.xml, admin/models/forms/helloworld.xml ====&lt;br /&gt;
&lt;br /&gt;
These files have been updated to support the additional&#039;&#039; &#039;uid&#039; &#039;&#039;field. Note that in &#039;&#039;admin/models/forms/helloworld.xml&#039;&#039; this field is defined as type&#039;&#039; &#039;user&#039; &#039;&#039;so that in the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin edit page it is shown as an item with a pop-up that presents all defined users.&lt;br /&gt;
&lt;br /&gt;
In the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin list page the&#039;&#039; &#039;uid&#039; &#039;&#039;field in the filter menu is just shown as a number, as specified in &#039;&#039;admin/models/forms/filter_helloworlds.xml&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
See [https://docs.joomla.org/Standard_form_field_types Joomla Doc: Standard form field types] for more information.&lt;br /&gt;
&lt;br /&gt;
=== 16.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-16.zip Download Joomla-Hello-Front-End v1-16]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/37ba5d8b61008b05b58770ddecc2a7c196525541 View Joomla-Hello-Front-End v1-16]&lt;br /&gt;
&lt;br /&gt;
=== 16.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ...&lt;br /&gt;
* Create one or more (test) users with permissions to edit HelloWorld greet messages.&lt;br /&gt;
* Check that these users can change items in the front-end when logged in. Check that Public users and not logged-in users can not change items.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Prev: Let&#039;s start with the Initial version|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Next: Let&#039;s start with the Initial version|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296005</id>
		<title>J3.x:Developing a component frontend update function/Simple frontend data entry</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Simple_frontend_data_entry&amp;diff=296005"/>
		<updated>2016-04-20T16:39:50Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Simple frontend data entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 16 Add data entry ==&lt;br /&gt;
&lt;br /&gt;
=== 16.1 Description ===&lt;br /&gt;
&lt;br /&gt;
Up to this step the HelloWorld component only enables the administrator to add or change items in the database. This step adds functionality to also allow a user to change data.&lt;br /&gt;
&lt;br /&gt;
Typically this is relevant when the data is related or owned by the user. Therefore an owner field is added to the table storing the greeting messages. The use case for this scenario is enabling users to update their own greetings.&lt;br /&gt;
&lt;br /&gt;
=== 16.2 The changes ===&lt;br /&gt;
&lt;br /&gt;
==== 16.2.1 Files: ====&lt;br /&gt;
* README.md&lt;br /&gt;
* helloworld.xml&lt;br /&gt;
* admin/sql/updates/mysql/*&lt;br /&gt;
&lt;br /&gt;
have been updated to reflect new version info.&lt;br /&gt;
&lt;br /&gt;
New messages have been added to the language files mainly because of the addition of the new&#039;&#039; &#039;uid&#039; &#039;&#039;field to the database table.&lt;br /&gt;
* admin/models/fields/helloworld.php&lt;br /&gt;
* site/language/en-GB/en-GB.com_helloworld.ini&lt;br /&gt;
&lt;br /&gt;
==== 16.2.2 site/views/helloworld/tmpl/default.php ====&lt;br /&gt;
&lt;br /&gt;
The user must have a way to enter data. The html way of doing so is to develop a form, so this view is extended with such. Also, an new field&#039;&#039; &#039;uid&#039; &#039;&#039;is added to the view to reflect the user/owner identification.&lt;br /&gt;
&lt;br /&gt;
The variable data in the form is largely derived from the object &#039;&#039;$this-&amp;gt;item&#039;&#039; which holds the current database record. The primary key for that record is &#039;&#039;$this-&amp;gt;item-&amp;gt;id&#039;&#039; and usually is indicated by the variable &#039;&#039;$id&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
After data entry the user hits the enter key or the submit button which results in posting the form data (including the entered user data) to the server. The form&#039;&#039; &#039;action&#039; &#039;&#039;tag is set up to redisplay the present page after a submit, and therefore the view &#039;&#039;site/views/helloworld/view.html.php&#039;&#039; is called again and acts on the posted data.&lt;br /&gt;
&lt;br /&gt;
The form data could also be submitted to the server with the &#039;get&#039; in stead of the &#039;post&#039; method, but that will result in displaying the transferred data in the URL bar of the browser. That can be handy in some cases, for instance when the user wishes to copy the URL for later use. The &#039;post&#039; method sends the data invisible to the user which is often a more appropriate approach for private data.&lt;br /&gt;
&lt;br /&gt;
And finally, the form contains an additional tag JHtml::_(&#039;form.token&#039;). This tag is generated by Joomla as a kind of checksum with enables the application to detect possible hacking of the form. That is a risk related to sending data to the server. Previous steps of HelloWorld only displayed data without receiving anything so use of this token was not needed. See for instance [https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms Joomla Doc: How to add CSRF anti-spoofing to forms] for more information.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.3 site/views/helloworld/view.html.php ====&lt;br /&gt;
&lt;br /&gt;
The code in this file transfers data from the server for display in the defined view of section 16.2.2 . The difference with the previous version of HelloWorld is that the display can now result from two cases.&lt;br /&gt;
&lt;br /&gt;
In the first place the&#039;&#039; &#039;view&#039; &#039;&#039;will be displayed when the user browses to this page for the first time. In that case the&#039;&#039; &#039;view&#039; &#039;&#039;method has to retrieve the data from the database.&lt;br /&gt;
&lt;br /&gt;
The second case for displaying the&#039;&#039; &#039;view&#039; &#039;&#039;is when the user has posted and submitted the form data after entering some values. This is detected by the&#039;&#039; &#039;view&#039; &#039;&#039;method by inspecting the&#039;&#039; &#039;post&#039; &#039;&#039;property of the form which now contains the user data at hand. The database will be updated with the posted data.&lt;br /&gt;
&lt;br /&gt;
Joomla keeps&#039;&#039; &#039;post&#039; &#039;&#039;data in the &#039;&#039;JFactory::getApplication()-&amp;gt;input-&amp;gt;post&#039;&#039; object. The variable &#039;&#039;$postmsg&#039;&#039; will retrieve the value of the greeting entered by the user, or will be null when no data has been posted like on the initial display of this page. Similarly, &#039;&#039;$getid&#039;&#039; will get the value of the item record &#039;&#039;id&#039;&#039; after a &#039;get&#039; data command when the user specified&#039;&#039; &#039;id&#039; &#039;&#039;in the URL, for instance with url &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039; to select item record 3.&lt;br /&gt;
&lt;br /&gt;
When&#039;&#039; &#039;postmsg&#039; &#039;&#039;holds a value after a post, the view first checks if the current record item was owned by the current user. If this is not the case then the record will not be updated. This can also occur if the user is not logged in.&lt;br /&gt;
&lt;br /&gt;
If the record is owned by the user, then the view calls the &#039;model&#039; object to update the record in the database with &#039;&#039;$model-&amp;gt;updateThisItem($postmsg)&#039;&#039; . Finally, the view will show a message indicating whether the update succeeded.&lt;br /&gt;
&lt;br /&gt;
The model object caches some relevant data, including the current record, in a central&#039;&#039; &#039;state&#039; &#039;&#039;object so that not every class involved in accessing and displaying the database record item needs to keep track of that data. The view retrieves and stores that data from and to the cache with &#039;&#039;$state-&amp;gt;get()&#039;&#039; and &#039;&#039;$state→set().&#039;&#039; Also the view&#039;s own&#039;&#039; &#039;get()&#039; &#039;&#039;method is a shortcut for retrieving data from the model&#039;s cache.&lt;br /&gt;
&lt;br /&gt;
As the model might process information for several other classes than this view, data specifically for this view will have a name prefixed by a unique identifier &#039;&#039;$context&#039;&#039; . We need to take care that we use the same prefix in all relevant class files.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.4 site/models/helloworld.php ====&lt;br /&gt;
&lt;br /&gt;
The model class is extended with the method&#039;&#039; &#039;updateThisItem&#039; &#039;&#039;to write the submitted user data to the database. Note that also the model class internally uses the&#039;&#039; &#039;State&#039; &#039;&#039;cache object to store and retrieve common data.&lt;br /&gt;
&lt;br /&gt;
As an example some &#039;intelligence&#039; has been designed to select the record item to be presented. The model takes the following steps:&lt;br /&gt;
* If the item is specified by the in the url like with &#039;&#039;localhost/index.php?option=com_helloworld&amp;amp;id=3&#039;&#039;, then this&#039;&#039; &#039;id&#039; &#039;&#039;is used as primary key.&lt;br /&gt;
* If the id is not specified in the url, and the user is logged in, then the model searches for the first record item owned by this user, if that exists&lt;br /&gt;
* In other cases, record item with&#039;&#039; &#039;id=1&#039; &#039;&#039;is retrieved.&lt;br /&gt;
* The item will be&#039;&#039; &#039;null&#039; &#039;&#039;if nothing is found.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.5 site/views/helloworld/tmpl/default.xml ====&lt;br /&gt;
&lt;br /&gt;
This file contains a definition for the administrator menu management. When creating a new menu entry, a list of options is shown for selecting a menu type. The list now will show an &#039;HelloWorld&#039; option to create a menu item which opens the data entry form.&lt;br /&gt;
&lt;br /&gt;
==== 16.2.6 admin/models/fields/helloworld.php, admin/models/forms/filter_helloworlds.xml, admin/models/forms/helloworld.xml ====&lt;br /&gt;
&lt;br /&gt;
These files have been updated to support the additional&#039;&#039; &#039;uid&#039; &#039;&#039;field. Note that in &#039;&#039;admin/models/forms/helloworld.xml&#039;&#039; this field is defined as type&#039;&#039; &#039;user&#039; &#039;&#039;so that in the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin edit page it is shown as an item with a pop-up that presents all defined users.&lt;br /&gt;
&lt;br /&gt;
In the&#039;&#039; &#039;HelloWorld&#039; &#039;&#039;admin list page the&#039;&#039; &#039;uid&#039; &#039;&#039;field in the filter menu is just shown as a number, as specified in &#039;&#039;admin/models/forms/filter_helloworlds.xml&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
See [https://docs.joomla.org/Standard_form_field_types Joomla Doc: Standard form field types] for more information.&lt;br /&gt;
&lt;br /&gt;
=== 16.3 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-16.zip Download Joomla-Hello-Front-End v1-16]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/37ba5d8b61008b05b58770ddecc2a7c196525541 View Joomla-Hello-Front-End v1-16]&lt;br /&gt;
&lt;br /&gt;
=== 16.4 Testing the features of this step ===&lt;br /&gt;
* Prepare users and permissions, and test like previous step. And ...&lt;br /&gt;
* Create one or more (test) users with permissions to edit HelloWorld greet messages.&lt;br /&gt;
* Check that these users can change items in the front-end when logged in. Check that Public users and not logged-in users can not change items.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|/J3.x:Developing_a_component_frontend_update_function/Initial_version|Prev: Let&#039;s start with the Initial version|class=expand success}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-6 columns&amp;quot;&amp;gt;{{Basic button|/J3.x:Developing_a_component_frontend_update_function/Initial_version|Next: Let&#039;s start with the Initial version|class=expand}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295938</id>
		<title>J3.x:Developing a component frontend update function/Initial version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295938"/>
		<updated>2016-04-20T16:14:41Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295937</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295937"/>
		<updated>2016-04-20T16:13:19Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Let&#039;s start with the Initial version|class=expand success}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=295936</id>
		<title>Chunk:Developing a component frontend update function - Contents</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=295936"/>
		<updated>2016-04-20T16:12:24Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Articles in this Series&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot; style=&amp;quot;float:right; background:#fff;margin:0 0 1.0em 1.0em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel radius mw-collapsible&amp;quot; style=&amp;quot;width:100%;background:#fff;font-size:.8em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Articles in this Series&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel mw-collapsible-content&amp;quot; style=&amp;quot;border:none; background:#fff; min-width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function|Introduction]]&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Initial_version|Initial version]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{-}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Tutorials in a Series]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295776</id>
		<title>J3.x:Developing a component frontend update function/Initial version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295776"/>
		<updated>2016-04-20T10:42:58Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295775</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295775"/>
		<updated>2016-04-20T10:31:44Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Developing a component frontend update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Joomla version|version=3.x|comment=Tutorial}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Top portal heading|color=white-bkgd|icon=file-code-o|icon-color=#5091cd|size=5x|text-color=#333|title=Developing a component frontend update function}}&lt;br /&gt;
{{-}}&lt;br /&gt;
{{Chunk:Developing a component frontend update function - Contents}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This is a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
Begin with the Introduction, and navigate the articles in this series by using the navigation button at the bottom or the box to the right (the &#039;&#039;Articles in this series&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;large-4 columns&amp;quot;&amp;gt;{{Basic button|J3.x:Developing_a_component_frontend_update_function/Initial_version|Let&#039;s start with the Initial version|class=expand success}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=295774</id>
		<title>Chunk:Developing a component frontend update function - Contents</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=Chunk:Developing_a_component_frontend_update_function_-_Contents&amp;diff=295774"/>
		<updated>2016-04-20T10:15:50Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Articles in this Series - Contents&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;large-4 columns&amp;quot; style=&amp;quot;float:right; background:#fff;margin:0 0 1.0em 1.0em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel radius mw-collapsible&amp;quot; style=&amp;quot;width:100%;background:#fff;font-size:.8em&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Articles in this Series&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;large-12 columns panel mw-collapsible-content&amp;quot; style=&amp;quot;border:none; background:#fff; min-width:100%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# [[J3.x:Developing_a_component_frontend_update_function/Initial_version|Initial version]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{-}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Tutorials in a Series]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295773</id>
		<title>J3.x:Developing a component frontend update function/Initial version</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function/Initial_version&amp;diff=295773"/>
		<updated>2016-04-20T09:39:44Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
This page is part of a multiple-article series of tutorials on how to develop a [[S:MyLanguage/Component|Component]] for frontend editing of private data by users. The tutorial also describes how to upload and download data.&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_an_component_frontend_update_function&amp;diff=295226</id>
		<title>J3.x:Developing an component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_an_component_frontend_update_function&amp;diff=295226"/>
		<updated>2016-04-17T12:31:17Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Skyhigh moved page J3.x:Developing an component frontend update function to J3.x:Developing a component frontend update function: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[J3.x:Developing a component frontend update function]]&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295225</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295225"/>
		<updated>2016-04-17T12:31:17Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Skyhigh moved page J3.x:Developing an component frontend update function to J3.x:Developing a component frontend update function: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295224</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295224"/>
		<updated>2016-04-17T12:27:35Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Replaced content with &amp;quot;I recently started using Joomla for my club website. If you want to get in touch with me, post on my &amp;#039;&amp;#039;&amp;#039;talk page&amp;#039;&amp;#039;&amp;#039;.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295222</id>
		<title>J3.x:Developing a component frontend update function</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J3.x:Developing_a_component_frontend_update_function&amp;diff=295222"/>
		<updated>2016-04-17T12:24:59Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Developing an component frontend update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla in the first place is a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Documentation and source files for this tutorial ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/wiki Joomla-Hello-Frontend wiki] &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.3 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295191</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295191"/>
		<updated>2016-04-16T15:00:38Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: Frontend record update function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
== Frontend record update function ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla is primarily a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this Joomla site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295113</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295113"/>
		<updated>2016-04-15T21:50:04Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
== Page Test ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla is primarily a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this Joomla site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295112</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295112"/>
		<updated>2016-04-15T21:32:15Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla is primarily a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this Joomla site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Sky-High/Joomla3-Edit-and-Export/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295111</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295111"/>
		<updated>2016-04-15T21:30:33Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
== 1 Introduction ==&lt;br /&gt;
&lt;br /&gt;
Joomla is primarily a Content Management System for a website with articles, blogs, forums etc. This serves well for providing or sharing public information.&lt;br /&gt;
&lt;br /&gt;
When the site is targeting at a rather distinct group of users like clients or members, it is often useful to enable users to login to the system to store and retrieve personal data from the database. A typical example might be an address book.&lt;br /&gt;
&lt;br /&gt;
The backend of Joomla features quite some functionality to search and edit database records for administrative purposes. There are also many extensions with such functionality, so Joomla is clearly capable of doing a decent job in this respect.&lt;br /&gt;
&lt;br /&gt;
This tutorial aims to provide a guideline for creating a frontend component yourself for users to access and enter private data on the server of your website, in case the available extensions do not satisfy your needs. The tutorial starts more or less where the HelloWorld introductory tutorial of the Joomla Documentation site ends.&lt;br /&gt;
&lt;br /&gt;
=== 1.1 Starting point ===&lt;br /&gt;
&lt;br /&gt;
This guide continues from the tutorial &#039;Developing an MVC Component&#039; (aka the &#039;Hello World&#039; tutorial) from this Joomla site: [https://docs.joomla.org/J3.x:Developing_an_MVC_Component J3.x:Developing an MVC Component] .&lt;br /&gt;
&lt;br /&gt;
The starting point for the source files is: [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip github.com/scionescire/Joomla-3.2-HelloWorld-Component-step-15] . &lt;br /&gt;
&lt;br /&gt;
=== 1.2 Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
For this tutorial it is assumed that you have a recent Joomla 3.x version properly setup at a server, including a suitable version of PHP and a database. Further it is assumed that you have access to the server, both to the files and the database.&lt;br /&gt;
&lt;br /&gt;
For my exercises I use Joomla 3.5 on a local Fedora 23 system with PHP 5.6.19, MariaDB v 10.0.0.23 and phpAdmin v4.5.5. So this tutorial will refer to &#039;localhost&#039; as URL for the website, and /var/www/html as root folder for the Joomla website.&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes that you have a good understanding of the HelloWorld tutorial. As the starting point for that source is step 15, the present tutorial also starts with sequence number 15 to align with the preceding one.&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Disclaimer ===&lt;br /&gt;
&lt;br /&gt;
I am quite new to Joomla and found it hard to find the proper development information. In this guideline I wrote down my findings as help for others looking for the same information. I am not an expert in Joomla, so can certainly not state that the guideline is free from errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15 Preparation ==&lt;br /&gt;
# This package from [https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-15-adding-an-install-uninstall-update-script-file.zip scionescire] has been adapted slightly. This adapted version can be downloaded from the link [https://github.com/Sky-High/Joomla3-Edit-and-Export/archive/v1-15.zip here] . The modifications were mainly corrections for some minor layout issues with the sidebar, ordering and pagination with the HelloWorld component admin page.&lt;br /&gt;
# Install the component in Joomla:&lt;br /&gt;
#* Login to Joomla as administrator.&lt;br /&gt;
#* Select Extensions → Manage, and then the Upload Package File tab.&lt;br /&gt;
#* Click the &#039;Browse&#039; button and select the downloaded zip file from step 1.&lt;br /&gt;
#* Click Upload &amp;amp; Install.&lt;br /&gt;
#* Check that the component installed properly.&lt;br /&gt;
&lt;br /&gt;
Step 15 of the original Hello World tutorial is now up and running as first step in this tutorial.&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Source files for this step ===&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/archive/v1-15.zip Download Joomla-Hello-Front-End v1-15]&lt;br /&gt;
* [https://github.com/Hy-Fly/Joomla-Hello-Front-End/commit/f06c1637382162e9c73600e6882847688526c70b View Joomla-Hello-Front-End v1-15]&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Testing the features of this step ===&lt;br /&gt;
* Enhance the database data by adding categories and publishing the database items:&lt;br /&gt;
** Open the HelloWorld administration page by selecting menu Components → Hello World!&lt;br /&gt;
** Select the Category sub menu, and enter a few categories.&lt;br /&gt;
** Select the &#039;Options&#039; button and go to the &#039;Hello World!&#039; global configuration menu. Click the radio button for &#039;Show&#039; categories.&lt;br /&gt;
** Click the &#039;Save &amp;amp; Close&#039; and return to the HelloWorld manager page&lt;br /&gt;
** You can add additional items if you like, assign categories and publish all items.&lt;br /&gt;
* Check that the items can now be displayed by using URL &#039;localhost/index.php?option=com_helloworld&amp;amp;id=1&#039; , &#039;...&amp;amp;id=2&#039;, etc.&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295109</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295109"/>
		<updated>2016-04-15T20:30:10Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
{{Version/tutor|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295108</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295108"/>
		<updated>2016-04-15T20:29:36Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}  {{JVer|3.5}}  {{Version/tutor|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295107</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295107"/>
		<updated>2016-04-15T20:28:56Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}   {{JVer|3.4}}  {{JVer|3.5}}  {{Version/tutor|3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295106</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295106"/>
		<updated>2016-04-15T20:28:08Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}   {{JVer/tutor|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295105</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295105"/>
		<updated>2016-04-15T20:25:21Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}   {{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295104</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295104"/>
		<updated>2016-04-15T20:24:59Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}&lt;br /&gt;
{{JVer|3.4}}  {{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295103</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295103"/>
		<updated>2016-04-15T20:24:01Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295102</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295102"/>
		<updated>2016-04-15T20:22:42Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295101</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295101"/>
		<updated>2016-04-15T20:20:51Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer/multi|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295100</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295100"/>
		<updated>2016-04-15T20:19:55Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{version|3.4,3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295093</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295093"/>
		<updated>2016-04-15T20:18:08Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295092</id>
		<title>User:Skyhigh</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Skyhigh&amp;diff=295092"/>
		<updated>2016-04-15T20:17:48Z</updated>

		<summary type="html">&lt;p&gt;Skyhigh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JVer|3.5}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I recently started using Joomla for my club website.&lt;br /&gt;
If you want to get in touch with me, post on my &#039;&#039;&#039;[[User_talk:{{PAGENAME}}|talk page]]&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
==My testing subpages==&lt;br /&gt;
Test pages&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;splist/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skyhigh</name></author>
	</entry>
</feed>