Требования к работе по дальнейшему написанию модуля для CMS Joomla 4
Вам нужна Joomla 4.x для написания модуля (на момент написания и тестирования использована версия Joomla 4.0.0-alpha6-dev).
Пространства имен
С PHP 5.3 насали использоваться пространства имен (namespaces). В других языках программирования, которые используют пространства имён в течение длительного времени, показали что введение этой абстракции для создания структуры, помогают с ясностью написания и восприятия кода.
Пространства имен - это отдельные области, в которых могут существовать определенные логические вещи (в нашем случае классы, интерфейсы, функции и константы). Эти области обеспечивают инкапсуляцию кода и предотвращают конфликты имен.
Давайте посмотрим, как их использовать в Joomla 4. Для этого мы используем вспомогательный файл Helper/FooHelper.php
.
Структура файлов
Мы создадим/изменим следующие файлы, созданные в предыдущей статье:
Helper/FooHelper.php
Это файл, который мы используем здесь в качестве примера. Мы должны его создать.
mod_foo.php
В этом файле мы загрузим пространство имен.
tmpl/default.php
В этом файле мы продемонстрируем, как могут отображаться данные помощника.
mod_foo.xml
Создание Helper/FooHelper.php
Наш новый вспомогательный класс должен принадлежать пространству имен. Это делается с помощью следующего кода. Важно, чтобы эта строка находилась в начале файла.
namespace Joomla\Module\Foo\Site\Helper;
Затем мы создадим простой класс с простым методом. Конечно, вы можете сделать всё гораздо сложнее. Взгляните на основные методы в исходных кодах Joomla. Есть много примеров. Они показывают вам как их используют разработчики Joomla 4 и какие у вас есть варианты.
Написание кода Helper/FooHelper.php
Полный код файла FooHelper.php
выглядит следующим образом:
<?php
/**
* @package Joomla.Site
* @subpackage mod_foo
*
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Module\Foo\Site\Helper;
// Нет прямого доступа к этому файлу
defined('_JEXEC') or die;
/**
* Помощник для mod_foo
*
* @since 4.0
*/
class FooHelper
{
/**
* Получить тест foo
*
* @param Registry $params Параметры модуля
* @param CMSApplication $app Приложение
*
* @return array
*/
public static function getText()
{
return 'FooHelpertest';
}
}
Редактирование mod_foo.php
Наш новый вспомогательный класс импортируется в нашу текущую область в начале файла.
use Joomla\Module\Foo\Site\Helper\FooHelper;
В итоге используйте вспомогательный файл для проверки, правильно ли он загруженː
$test = FooHelper::getText($params, $app);
Дополнение кода mod_foo.php
Полный код файла mod_foo.php
выглядит следующим образом:
<?php
/**
* @package [ИМЯ_ПАКЕТА]
*
* @author [АВТОР] <[ЭЛЕКТРОННАЯ ПОЧТА АВТОРА]>
* @copyright [ПРАВАЯКОПИЯ]
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @link [САЙТ_АВТОРА]
*/
// Нет прямого доступа к этому файлу
defined('_JEXEC') or die;
use Joomla\CMS\Helper\ModuleHelper;
use Joomla\Module\Foo\Site\Helper\FooHelper;
$test = FooHelper::getText();
require ModuleHelper::getLayoutPath('mod_foo', $params->get('layout', 'default'));
Редактирование tmpl/default.php
В этом файле вы вносите лишь небольшое изменение, чтобы продемонстрировать во внешнем интерфейсе, что ваш вспомогательный файл работает правильно. Вы добавляете только значение переменной в конце текущего вывода.
echo '[PROJECT_NAME]' . $test;
Дополнение кода tmpl/default.php
Полный код файла tmpl/default.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;
echo '[PROJECT_NAME]' . $test;
Редактирование mod_foo.xml
Сначала вам нужно добавить строку, чтобы пространство имен автоматически устанавливалось в Joomla 4. После этого изменения вам необходимо переустановить свой модуль. Простого изменения уже установленного модуля недостаточно. Если вы занимаетесь локальной разработкой, вы также можете удалить файлы libraries/autoload_psr4.php
и он будет автоматически воссоздан заново. После вставки и установки пространство имен станет известно загрузчику JPATH_LIBRARIES . '/autoload_psr4.php'
.
<namespace>Joomla\Module\Foo</namespace>
Joomla 4 должна скопировать ваш вспомогательный файл при установке модуля. Поэтому Joomla должна знать, где взять вспомогательный файл. Для этого вам нужно добавить следующую строку в свой XML-файл.
<folder>Helper</folder>
Дополнение кода 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>
<files>
<filename module="mod_foo">mod_foo.php</filename>
<folder>tmpl</folder>
<folder>Helper</folder>
<folder>language</folder>
<filename>mod_foo.xml</filename>
</files>
</extension>
Вы читаете статью из небольшого цикла:
«Создание простого модуля для 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
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)