J3.x:Creating a simple module/Adding Auto Update
From Joomla! Documentation
Articles in this Series
This is a multiple article series on how to create a module for Joomla! Version . You can navigate the articles in this series by using the navigation drop down menu.
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 (Articles in this series). There are 2 videos accompanying this tutorial which you can view at Basic Joomla Module Development video 1 and Basic Joomla Module Development video 2.
This section of the tutorial will help you create an update server so that your module can utilize the Joomla one-click-upgrade system.
Introduction & Pre-reading
The first thing to do is to read the Managing Component Upgrades with Joomla 2.5 - Part 1 tutorial to give an idea of how the upgrade process works in Joomla. Whilst written for 2.5 the process hasn't changed for Joomla 3.x. Also read Deploying an update server - this is what we'll be implementing in this tutorial.
Remember that sql update file we mentioned in the Using the database section? That will be used to update our database still. Whilst a new zipped version of our module will be used to update all the php files. To keep this simple for now we will update the files and sql database without any checks for Joomla version and the version of the module that is currently installed (it is recommended these are used in a production module).
Updating our module
The only way to update our existing module is to add in a update server into the xml file.
<server type="extension" name="Helloworld" priority="1">http://www.example.com/helloworld_update.xml</server>
Joomla! will now search http://www.example.com/helloworld_update.xml for updates with a frequency set in the extension manager options.
Creating an update
So now that Joomla is searching for updates to our extension - lets create one to test out our process.
Create a copy of the module as it is now. Then lets update the version number to 1.0.1, and also we'll add something into our Update SQL file - in this case an extra German Language file.
INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hallo Welt', 'de-DE');
Note we can also edit any of our php files - all the existing php files will be overridden by the ones in the update file (Note: This is the reason why core hacks of any extension are discouraged - they will be lost on the extension update).
Now we must create the xml file at http://www.example.com/helloworld_update.xml to let Joomla know an update is available.
<description>This is mod_helloworld 1.0.1</description>
<downloadurl type="full" format="zip">http://www.example.com/mod_helloworld_101.zip</downloadurl>
<targetplatform name="joomla" version="3.6"/>
where http://www.example.com/mod_helloworld_101.zip is the zip of our newly created update. If you now log into the backend of Joomla you should now see in the control panel that an automatic update is available (if not you may need to purge your cache in the update section of the extension manager). Simply click update and you'll find your module has been updated to version 1.0.1.
Note: Note that the update tag in this case is specific for Joomla Version 3.6 and the update will not be recognized by an earlier or later version of Joomla. See the section on Deploying an Update Server for details on specifying the update and importantly the targetplatform tags.
Note that in our files we have linked to the extensions updates xml file. And from that xml file we have a location for the zip of the module. This means that if someone were to track this backwards they could find the physical source of your modules zip file (and make it available/use it after a subscription has expired etc.). For this reason generally commercial modules do not contain automatic updates (although they often will inform you of updates in some alternative way).
Updating modules in Joomla is really easy for both users and the extension developers to perform and should be expected as standard with any module since Joomla! 3.1.