Разработка базового компонента для Joomla 4.x
Начало разработки базового компонента для Joomla 4.x

Эта статья является частью учебника "Разработка компонента MVC для Joomla 4.x". Он предназначен для последующего руководства по программированию, поэтому, если вы не читали предыдущие части руководства, вам рекомендуется сделать это.

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Ваш первый компонент для 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. Дальше будем делать его полезным.

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

Видео по теме «Начало разработки базового компонента для Joomla 4.x»

Перевод с английского:
https://docs.joomla.org/J4.x:Developing_an_MVC_Component/Developing_a_Basic_Component

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню