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

  1. Требования
  2. Пространства имен
    1. Структура файлов
    2. Создание Helper/FooHelper.php
      1. Написание кода Helper/FooHelper.php
    3. Редактирование mod_foo.php
      1. Дополнение кода mod_foo.php
    4. Редактирование tmpl/default.php
      1. Дополнение кода tmpl/default.php
    5. Редактирование mod_foo.xml
      1. Дополнение кода mod_foo.xml


Требования к работе по дальнейшему написанию модуля для 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
    • Мы создадим новый каталог с новым файлом. Инструкции из этого файла должны использоваться во время установки нашего модуля в CMS Joomla 4. Для этого мы должны указать их в этом файле.

Создание 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»

  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

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

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

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

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