We have created a lot of different extensions. It is annoying to do a separate installation for each one. This is not reasonable for a user. Moreover, some of these extensions build on each other and it is important to make sure that everything is installed and nothing has been forgotten. Therefore, in this concluding chapter I show how different extensions are packed together into one installation package.

For impatient people: Look at the changed programme code in the Diff View[^codeberg.org/astrid/j4examplecode/compare/t41...t42] and apply these changes to your development version.

Step by step

In this section we will create an installation package.

New files


administrator/manifests/ packages/foos/script.php

Like the component, a package can be extended with an optional script. In our case, we check whether the installation requirements are met in terms of minimum versions for Joomla and PHP.

administrator/manifests/ packages/foos/script.php

// https://codeberg.org/astrid/j4examplecode/raw/branch/210867f3a4211ecff2c364f292bc4250cd75bc71/src/administrator/manifests/packages/foos/script.php

 * @package     Joomla.Site
 * @subpackage  pkg_foos
 * @copyright   Copyright (C) 2005 - 2019 Astrid Günther, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later;
 * @link        astrid-guenther.de

\defined('_JEXEC') or die;

 * Installation class to perform additional changes during install/uninstall/update
 * @since  __BUMP_VERSION__
class Pkg_FoosInstallerScript
	 * Extension script constructor.
	 * @since   __BUMP_VERSION__
	public function __construct()
		$this->minimumJoomla = '4.0';
		$this->minimumPhp    = JOOMLA_MINIMUM_PHP;
administrator/manifests/ packages/pkg_foos.xml

You already know the manifest. In the case of a package, there is little new here. In the area of the files to be copied, you specify the installation packages of the extensions that are to be installed.

administrator/manifests/ packages/pkg_foos.xml

<!-- https://codeberg.org/astrid/j4examplecode/raw/branch/t42/src/administrator/manifests/packages/pkg_foos.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<extension type="package" version="1.0" method="upgrade">
	<packager>Astrid Günther</packager>
	<copyright>(C) ##YEAR## Astrid Günther. All rights reserved.</copyright>
	<author>Astrid Günther</author>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
		<!-- The id for each extension is the element stored in the DB -->
		<file type="component" id="com_foos">com_foos.zip</file>
		<file type="module" id="mod_foo" client="site">mod_foo.zip</file>
		<file type="plugin" id="plg_webservices_foos" group="webservices">plg_webservices_foos.zip</file>
		<file type="template" id="tpl_facile" client="site">tpl_facile.zip</file>
		<server type="extension" name="Foo Updates">https://codeberg.org/astrid/j4examplecode/raw/branch/tutorial/foo_update.xml</server>
	<dlid prefix="dlid=" suffix="" />

Test your Joomla Template

  1. make a new installation. To do this, uninstall your previous installation.

  2. create a ZIP file for each extension.

How do you create an installable zip file for each extension? If you have worked through this tutorial, then you have all the files. If you don't want to create the files yourself, you can find them all in Branch 42 of the sample files repository, which is this link codeberg.org/astrid/j4examplecode/src/branch/t42. You can download the contents of this branch 42 as a zip file. However, it is not an installation zip. You have to create it yourself for each extension separately. Basically, you can copy the files for each extension into a directory and pack them together with the packing programme of your choice. The folder structure should remain the same. Only the installation XML file and a possible installation script must be copied into the root directory of the zip file, if they are not already stored there.

  1. create a ZIP that contains all ZIP files and the files of this chapter.

  2. install the ZIP created in point 3 in Joomla.

  3. make sure that all the extensions specified in the files section have been installed.