Предыдущая статья: Введение в разработку компонента MVC для Joomla 4.x

Ваш первый компонент для Joomla 4.x

В этой статье мы расскажем о том, как создать и установить базовый компонент Joomla 4, который мы изобретательно назовем компонентом "Hello World".

Для начала необходимо сначала нужно создать каталог (папку) для компонента "Hello World" у себя на локальном компьютере. Этот каталог может находиться в любом месте вашей файловой системы. Для этого примера мы назовем каталог com_helloworld, потому что именно так выглядит каталог компонентов, когда он находится внутри Joomla. (Префикс com означает "компонент".)

Далее, внутри этого каталога нам нужно создать несколько файлов. Создайте следующие файлы в нём. При создании файлов добавьте исходный код для каждого файла, который можно найти ниже в разделе Содержимое файлов компонента для Joomla 4.x.

  1. helloworld.xml
    • Файл XML-манифеста, который сообщает Joomla 4, как установить наш компонент.
  2. admin/services/provider.php
    • Поясняет Joomla 4, как инициализировать компонент
  3. admin/src/Controller/DisplayController.php
    • Контроллер MVC для страницы "Hello World", с которой мы начнем.
  4. admin/src/View/Hello/HtmlView.php
    • Представление (вид) MVC для страницы "Hello World", с которой мы начнем.
  5. admin/tmpl/hello/default.php
    • Шаблон HTML/PHP для страницы "Hello World"

Содержимое файлов компонента для Joomla 4.x

helloworld.xml

Это файл манифеста, который описывает компонент и его конфигурацию для Joomla 4. Он используется во время установки компонента в систему CMS Joomla для копирования файлов компонента в правильные места, запуска установки базы данных, настройки пространства имен PHP компонента и так далее.

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" method="upgrade">
<!-- атрибут 'version' для тега расширения больше не используется -->

    <name>Hello World</name>
    <!-- Следующие элементы являются необязательными и не содержат ограничений на форматирование -->
    <creationDate>May 2021</creationDate>
    <!-- Фиктивный автор, не стесняйтесь заменять его в любом месте, где вы его видите -->
    <author>John Smith</author>
    <authorUrl>https://mb4.ru</authorUrl>
    <copyright>Пётр Васечкин</copyright>
    <license>GPL v3</license>
    <!-- Строка 'version' записывается в таблицу компонентов -->
    <version>0.0.1</version>
    <!-- Описание является необязательным и по умолчанию используется имя сомпонента -->
    <description>
        A hello world component!
    </description>

    <!-- Это пространство имен PHP, в котором организован
    код расширения. Он должен следовать этому формату:
    
    Vendor\Component\ComponentName

    "Vendor" может быть названией компании или вашим собственным именем
    
    Раздел "ComponentName" ДОЛЖЕН соответствовать имени, используемому 
    везде для вашего компонента. Каким бы ни было имя этого XML-файла, 
    пространство имен должно совпадать (заглавные/прописные буквы не учитываются). 
    -->
    <namespace path="src/">JohnSmith\Component\HelloWorld</namespace>
            
    <administration>
        <!-- Ссылка, которая появится в меню админки Joomla "Components" -->
        <menu link="index.php?option=com_helloworld">Hello World</menu>
        <!-- Список файлов и папок для копирования.
             Обратите внимание на атрибут "folder".
             Это имя папки в пакете компонентов для копирования в CMS Joomla 4. -->
        <files folder="admin/">
            <folder>services</folder>
            <folder>src</folder>
            <folder>tmpl</folder>
        </files>
    </administration>

</extension>

admin/services/provider.php

Это специальный файл, который сообщает Joomla 4, как инициализировать компонент - какие услуги ему требуются и как они должны предоставляться.

<?php

defined('_JEXEC') or die;

use Joomla\CMS\Dispatcher\ComponentDispatcherFactoryInterface;
use Joomla\CMS\Extension\ComponentInterface;
use Joomla\CMS\Extension\MVCComponent;
use Joomla\CMS\Extension\Service\Provider\ComponentDispatcherFactory;
use Joomla\CMS\Extension\Service\Provider\MVCFactory;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;

return new class implements ServiceProviderInterface {
    
    public function register(Container $container): void {
        $container->registerServiceProvider(new MVCFactory('\\JohnSmith\\Component\\HelloWorld'));
        $container->registerServiceProvider(new ComponentDispatcherFactory('\\JohnSmith\\Component\\HelloWorld'));
        $container->set(
            ComponentInterface::class,
            function (Container $container) {
                $component = new MVCComponent($container->get(ComponentDispatcherFactoryInterface::class));
                $component->setMVCFactory($container->get(MVCFactoryInterface::class));

                return $component;
            }
        );
    }
};

admin/src/Controller/DisplayController.php

Контроллер MVC для нашего первого представления "hello". По мере усложнения нашего компонента контроллер страницы будет обрабатывать выбор моделей, отправку форм и так далее. Здесь он просто устанавливает свое представление по умолчанию, а остальное оставляет своему родителю.

<?php

namespace JohnSmith\Component\HelloWorld\Administrator\Controller;

defined('_JEXEC') or die;

use Joomla\CMS\MVC\Controller\BaseController;

/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2021 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

/**
 * Контроллер по умолчанию компонента HelloWorld
 *
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 */
class DisplayController extends BaseController {
    /**
     * Представление по умолчанию для метода отображения.
     *
     * @var string
     */
    protected $default_view = 'hello';
    
    public function display($cachable = false, $urlparams = array()) {
        return parent::display($cachable, $urlparams);
    }
    
}

admin/src/View/Hello/HtmlView.php

Это объект представления (вида) MVC для нашей первой страницы. Задача объекта представления заключается в выполнении работы по настройке шаблона представления - выборе макета, извлечении Javascript, создании панелей инструментов и т.д.. Чтобы просто загрузить нашу страницу "hello world", мы делегируем работу по инициализации представления Joomla 4.

<?php

namespace JohnSmith\Component\HelloWorld\Administrator\View\Hello;

defined('_JEXEC') or die;

use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2021 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

/**
 * Основной вид в админке "Hello World" 
 */
class HtmlView extends BaseHtmlView {
    
    /**
     * Отображение основного вида "Hello World" 
     *
     * @param   string  $tpl  Имя файла шаблона для анализа; автоматический поиск путей к шаблону.
     * @return  void
     */
    function display($tpl = null) {
        parent::display($tpl);
    }


}

admin/tmpl/hello/default.php

Этот файл содержит шаблон для страницы. Он используется для визуализации страницы с использованием настроек, выполняемых объектом представления.

Если для представления не требуется конкретный макет, Joomla 4 загрузит шаблон в default.php файл, вот почему мы используем это имя файла.

<?php

/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2021 John Smith. All rights reserved.
 * @license     GNU General Public License version 3; see LICENSE
 */

 // Нет прямого доступа к этому файлу
defined('_JEXEC') or die('Всем кыш! =D');
?>
<h2>Hello world!</h2>

Установка компонента в CMS Joomla 4.x

Создайте .zip - файл каталога com_helloworld, включив сам каталог и убедитесь, что структура каталогов сохранена.

  1. Используя свой веб-браузер, перейдите в панель администратора Joomla 4 вашего сайт. Адрес будет <домен>/administrator/. Например: https://mb4.ru/administrator/
  2. В левом меню админки Joomla 4 нажмите на ссылку "System" (Система).
  3. Там в поле "Install" (Установка) кликните по ссылке "Extensions" (Расширения).
  4. На вкладке "Upload Package File" (Загрузить файл пакета) найдите и выберите только что созданный zip-файл с вашего компьютера.

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

Тестирование компонента CMS Joomla 4.x

После успешной установки компонента нажмите на раздел "Components" (Компоненты) меню слева в панели администратора. Теперь вы должны увидеть новую ссылку в этом разделе с надписью "Hello World". Это ссылка, подробно описанная в файле манифеста компонента. Если вы нажмете на нее, вы увидите страницу "Hello World!".

Поздравляю! Вы создали свой первый компонент Joomla 4. Дальше будем делать его полезным.

» продолжение тут «