Создание простого модуля для Joomla 4.x. Использование сценария установки, обновления и удаления - Часть 4

  1. Требования
  2. Файлы скриптов
  3. Структура файлов
    1. Создание файла script.php
      1. Итоговый файл script.php
    2. Дополнение файла language/en-GB/en-GB.mod_foo.sys.ini
      1. Итоговый файл language/en-GB/en-GB.mod_foo.sys.ini
    3. Дополнение файла mod_foo.xml
      1. Итоговый файл mod_foo.xml
  4. Тестирование получившегося функционала модуля
  5. Заключение


Требования.

Вам нужна Joomla 4.x для этого урока (на момент написания использована версия Joomla! 4.0.0-alpha6-dev)

Файлы скриптов.

Установка, обновление и удаление модуля могут потребовать дополнительных операций, которые не могут быть выполнены с помощью основных операций, описанных в основном XML-файле. Joomla предлагает новый подход к решению этой проблемы. Он заключается в использовании файла PHP-скрипта, содержащего класс, использующий пять методов:

  • предварительный, который выполняется перед установкой и обновлением;
  • установка;
  • обновление;
  • удаление;
  • завершающий, который выполняется после установки и обновления.

Давайте посмотрим, как их использовать в Joomla 4. Для этого мы используем вспомогательный файл.

Структура файлов.

Мы создадим/изменим следующие файлы:

  • script.php
    • Это файл, который мы используем здесь в качестве примера. Мы должны его создать.
  • language/en-GB/en-GB.mod_foo.sys.ini
    • В этот файл мы добавим текст.
  • mod_foo.xml
    • Мы создадим новый файл script.php. Он должен быть установлен во время установки/обновления модуля. Для этого мы должны указать его в этом файле.

Создание файла script.php

Написание сценария расширения состоит в объявлении класса, имя которого - mod_ModuleNameInstallerScript, с помощью этих 5 методов, описанных выше. Дополнительную информацию смотрите в комментариях в файле. В этих комментариях объясняется каждый метод, когда он вызывается.

В этом примере используется текст только для того, чтобы показать, когда какой метод будет выполнен. Кроме того, показано, как проверить минимальные требования. Конечно, вы можете сделать гораздо больше. Например, вы можете удалить файлы, которые больше не нужны в новой версии вашего модуля. Это можно увидеть в коде файла. Еще одна идея для этого файла - создать образец содержимого, чтобы показать сообщение об успешном завершении с текущим номером установленной версии, или вы можете перенаправить после успешной установки на страницу с настройками модуля.

Итоговый файл script.php

Полный текст файла script.php:

<?php
/**
 * @package    [PACKAGE_NAME]
 *
 * @author     [AUTHOR] <[AUTHOR_EMAIL]>
 * @copyright  [COPYRIGHT]
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 * @link       [AUTHOR_URL]
 */

// No direct access to this file
defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;

/**
 * Script file of Foo module
 */
class mod_fooInstallerScript {

    /**
     * Extension script constructor.
     *
     * @return  void
     */
    public function __construct() {
        $this->minimumJoomla = '4.0';
        $this->minimumPhp = JOOMLA_MINIMUM_PHP;
    }

    /**
     * Method to install the extension
     *
     * @param   InstallerAdapter  $parent  The class calling this method
     *
     * @return  boolean  True on success
     */
    function install($parent) {
        echo Text::_('MOD_FOO_INSTALLERSCRIPT_INSTALL');

        return true;
    }

    /**
     * Method to uninstall the extension
     *
     * @param   InstallerAdapter  $parent  The class calling this method
     *
     * @return  boolean  True on success
     */
    function uninstall($parent) {
        echo Text::_('MOD_FOO_INSTALLERSCRIPT_UNINSTALL');

        return true;
    }

    /**
     * Method to update the extension
     *
     * @param   InstallerAdapter  $parent  The class calling this method
     *
     * @return  boolean  True on success
     */
    function update($parent) {
        echo Text::_('MOD_FOO_INSTALLERSCRIPT_UPDATE');

        return true;
    }

    /**
     * Function called before extension installation/update/removal procedure commences
     *
     * @param   string            $type    The type of change (install, update or discover_install, not uninstall)
     * @param   InstallerAdapter  $parent  The class calling this method
     *
     * @return  boolean  True on success
     */
    function preflight($type, $parent) {
        // Check for the minimum PHP version before continuing
        if (!empty($this->minimumPhp) && version_compare(PHP_VERSION, $this->minimumPhp, '<')) {
            Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_PHP', $this->minimumPhp), Log::WARNING, 'jerror');

            return false;
        }

        // Check for the minimum Joomla version before continuing
        if (!empty($this->minimumJoomla) && version_compare(JVERSION, $this->minimumJoomla, '<')) {
            Log::add(Text::sprintf('JLIB_INSTALLER_MINIMUM_JOOMLA', $this->minimumJoomla), Log::WARNING, 'jerror');

            return false;
        }
        
        echo Text::_('MOD_FOO_INSTALLERSCRIPT_PREFLIGHT');
        echo $this->minimumJoomla . ' ' . $this->minimumPhp;

        return true;
    }

    /**
     * Function called after extension installation/update/removal procedure commences
     *
     * @param   string            $type    The type of change (install, update or discover_install, not uninstall)
     * @param   InstallerAdapter  $parent  The class calling this method
     *
     * @return  boolean  True on success
     */
    function postflight($type, $parent) {
        echo Text::_('MOD_FOO_INSTALLERSCRIPT_POSTFLIGHT');

        return true;
    }
}

Дополнение файла language/en-GB/en-GB.mod_foo.sys.ini

Здесь не так много нужно объяснять. Запишите значения текстовых констант для перевода в этот файл.

Итоговый файл language/en-GB/en-GB.mod_foo.sys.ini

Текст получившегося файла language/en-GB/en-GB.mod_foo.sys.ini с переводом языковых констант:

MOD_FOO="[PROJECT_NAME]"
MOD_FOO_XML_DESCRIPTION="Foo Module"
MOD_FOO_INSTALLERSCRIPT_PREFLIGHT="<p>Anything here happens before the installation/update/uninstallation of the module</p>"
MOD_FOO_INSTALLERSCRIPT_UPDATE="<p>The module has been updated</p>"
MOD_FOO_INSTALLERSCRIPT_UNINSTALL="<p>The module has been uninstalled</p>"
MOD_FOO_INSTALLERSCRIPT_INSTALL="<p>The module has been installed</p>"
MOD_FOO_INSTALLERSCRIPT_POSTFLIGHT="<p>Anything here happens after the installation/update/uninstallation of the module</p>"

Дополнение файла mod_foo.xml

Нужно добавить строку, чтобы скрипт автоматически вызывался в Joomla при установке/обновлении модуля.

<scriptfile>script.php</scriptfile>

Итоговый файл mod_foo.xml

Итоговый файл mod_foo.xml выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="4.0" client="site" method="upgrade">
    <name>MOD_FOO</name>
    <creationDate>[DATE]</creationDate>
    <author>[AUTHOR]</author>
    <authorEmail>[AUTHOR_EMAIL]</authorEmail>
    <authorUrl>[AUTHOR_URL]</authorUrl>
    <copyright>[COPYRIGHT]</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <version>1.0</version>
    <description>MOD_FOO_XML_DESCRIPTION</description>
    <namespace>Joomla\Module\Foo</namespace>
    <scriptfile>script.php</scriptfile>
    <files>
        <filename module="mod_foo">mod_foo.php</filename>
        <folder>tmpl</folder>
        <folder>Helper</folder>
        <folder>language</folder>
        <filename>mod_foo.xml</filename>
    </files>
    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                    name="domain"
                    type="url"
                    label="MOD_FOO_FIELD_URL_LABEL"
                    filter="url"
                />
            </fieldset>
            <fieldset name="advanced">
                <field
                    name="layout"
                    type="modulelayout"
                    label="JFIELD_ALT_LAYOUT_LABEL"
                    class="custom-select"
                />
                <field
                    name="moduleclass_sfx"
                    type="textarea"
                    label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
                    rows="3"
                />
                <field
                    name="cache"
                    type="list"
                    label="COM_MODULES_FIELD_CACHING_LABEL"
                    default="0"
                >
                    <option value="1">JGLOBAL_USE_GLOBAL</option>
                    <option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
                </field>
                <field
                    name="cache_time"
                    type="number"
                    label="COM_MODULES_FIELD_CACHE_TIME_LABEL"
                    default="0"
                />
                <field
                    name="cachemode"
                    type="hidden"
                    default="itemid"
                >
                    <option value="itemid"></option>
                </field>
            </fieldset>
        </fields>
    </config>
</extension>

Тестирование получившегося функционала модуля Joomla 4.

Теперь вы можете заархивировать все файлы и установить их с помощью менеджера расширений Joomla. Сразу после установки вы увидите следующую информацию, показанную на картинке ниже. Это вы так вписали в сценарий.

Тестирование получившегося функционала модуля Joomla 4

Заключение.

Как вы можете видеть, Joomla 4 предлагает вам многое, чтобы сделать ваше расширение простым в использовании с самого начала, даже с момента его установки.

Вы можете найти исходные файлы здесьː

Примеры файлов для этого руководства можно найти здесьː


Вы читаете статью из небольшого цикла:
«Создание простого модуля для Joomla 4.x»

  1. «Вступление»
  2. «Разработка базового модуля для CMS Joomla 4 - Часть 1»
    1. «Тестирование и Отладка первой части написанного модуля для Joomla 4»
  3. «Разработка базового модуля для CMS Joomla 4 - Часть 2. Добавление вспомогательного класса, использование пространства имён.»
    1. «Тестирование и Отладка второй части написанного модуля для Joomla 4»
  4. «Разработка базового модуля для CMS Joomla 4 - Часть 3. Настройкаː Добавление параметров с помощью полей формы»
    1. «Тестирование и Отладка третьей части написанного модуля для Joomla 4»
  5. «Разработка базового модуля для CMS Joomla 4 - Часть 4. Использование сценария установки, обновления и удаления.»
  6. «Разработка базового модуля для CMS Joomla 4 - Часть 5. Добавление автоматического обновления расширения Joomla.»

Перевод с английского официальной документации Joomla 4:
https://docs.joomla.org/J4.x:Creating_a_Simple_Module

Заберите ссылку на статью к себе, чтобы потом легко её найти ;)

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )

Войдите чтобы комментировать