Архив, пакет и сервер обновлений
При разработке файлы лежали прямо на сайте. Чтобы расширение мог поставить кто угодно, его собирают в архив ZIP с манифестом в корне. Несколько расширений объединяют в пакет, а о новых версиях сайты узнают через сервер обновлений.
Архив модуля
Соберите в отдельной рабочей папке копию файлов модуля. Файлы из media/mod_hello сайта кладут в подпапку media:
mod_hello/
├── mod_hello.xml
├── language/
├── media/
│ ├── joomla.asset.json
│ ├── css/style.css
│ └── js/hello.js
├── services/provider.php
├── src/
└── tmpl/Это соответствует манифесту: раздел files перечисляет папки рядом с ним, а раздел media с атрибутом folder="media" — содержимое подпапки media.
cd mod_hello
zip -r ../mod_hello-1.0.0.zip .Команда создаёт архив, в корне которого лежит манифест. Плагин упаковывают так же.
Архив компонента
У компонента части раскладывают по папкам, названным в атрибутах folder манифеста:
com_hello/
├── hello.xml манифест — в корне архива
├── script.php
├── administrator/ → administrator/components/com_hello
│ ├── access.xml
│ ├── config.xml
│ ├── forms/
│ ├── services/
│ ├── sql/
│ ├── src/
│ └── tmpl/
├── api/ → api/components/com_hello
│ └── src/
└── site/ → components/com_hello
├── src/
└── tmpl/Проверка
Установите архив на чистый сайт Joomla: «Система → Установка → Расширения → Загрузить файл пакета». Если расширение работает там так же, как на сайте разработки, манифест перечисляет все нужные файлы. Забытая папка проявится именно здесь.
Новая версия
- Поднимите номер в теге
versionманифеста:1.1.0. - Добавьте файл обновления базы, если менялись таблицы.
- Соберите новый архив.
Благодаря method="upgrade" архив ставится поверх старой версии, настройки и данные сохраняются.
Пакет
Пакет — архив, внутри которого лежат архивы расширений и свой манифест:
pkg_hello/
├── pkg_hello.xml
└── packages/
├── com_hello.zip
├── mod_hello.zip
└── plg_content_hello.zip<?xml version="1.0" encoding="UTF-8"?>
<!-- pkg_hello/pkg_hello.xml -->
<extension type="package" method="upgrade">
<name>pkg_hello</name>
<packagename>hello</packagename>
<version>1.1.0</version>
<description>Блог Hello: компонент, модуль и плагин</description>
<files folder="packages">
<file type="component" id="com_hello">com_hello.zip</file>
<file type="module" id="mod_hello" client="site">mod_hello.zip</file>
<file type="plugin" id="hello" group="content">plg_content_hello.zip</file>
</files>
</extension>Упакуйте папку pkg_hello в ZIP и установите: Joomla поставит все три расширения одним действием, а при удалении пакета удалит их вместе.
Сервер обновлений
Чтобы сайты узнавали о новых версиях, в манифесте указывают адрес файла со списком обновлений:
<!-- mod_hello.xml -->
<updateservers>
<server type="extension" name="Hello Updates">https://example.com/updates/mod_hello.xml</server>
</updateservers>По этому адресу вы размещаете файл XML:
<?xml version="1.0" encoding="UTF-8"?>
<updates>
<update>
<name>Hello</name>
<element>mod_hello</element>
<type>module</type>
<client>site</client>
<version>1.1.0</version>
<downloads>
<downloadurl type="full" format="zip">https://example.com/downloads/mod_hello-1.1.0.zip</downloadurl>
</downloads>
<targetplatform name="joomla" version="[45]\.[0-9]+" />
<php_minimum>8.1</php_minimum>
</update>
</updates>Joomla периодически читает этот файл. Если версия в нём новее установленной, расширение появится в разделе «Система → Обновление → Расширения», и администратор обновит его одной кнопкой. targetplatform — регулярное выражение для версий Joomla, которым подходит обновление: здесь 4 и 5.
Частая ошибка
В архив попадает лишнее: папки .git и node_modules, черновики, файлы с ключами. Всё, что лежит в папках из раздела files, окажется на сайтах пользователей. Собирайте архив из чистой копии или скриптом, который берёт только нужные файлы, и просматривайте содержимое перед публикацией.