Требования.
Вам нужна 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.x»
- «Вступление»
- «Разработка базового модуля для CMS Joomla 4 - Часть 1»
- «Разработка базового модуля для CMS Joomla 4 - Часть 2. Добавление вспомогательного класса, использование пространства имён.»
- «Разработка базового модуля для CMS Joomla 4 - Часть 3. Настройкаː Добавление параметров с помощью полей формы»
- «Разработка базового модуля для CMS Joomla 4 - Часть 4. Использование сценария установки, обновления и удаления.»
- «Разработка базового модуля для CMS Joomla 4 - Часть 5. Добавление автоматического обновления расширения Joomla.»
Перевод с английского официальной документации Joomla 4:
https://docs.joomla.org/J4.x:Creating_a_Simple_Module
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)