Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Архив, пакет и сервер обновлений

При разработке файлы лежали прямо на сайте. Чтобы расширение мог поставить кто угодно, его собирают в архив 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: «Система → Установка → Расширения → Загрузить файл пакета». Если расширение работает там так же, как на сайте разработки, манифест перечисляет все нужные файлы. Забытая папка проявится именно здесь.

Новая версия

  1. Поднимите номер в теге version манифеста: 1.1.0.
  2. Добавьте файл обновления базы, если менялись таблицы.
  3. Соберите новый архив.

Благодаря 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, окажется на сайтах пользователей. Собирайте архив из чистой копии или скриптом, который берёт только нужные файлы, и просматривайте содержимое перед публикацией.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.