Розробка базової компоненти.
(*Ця стаття є частиною посібника “Розробка MVC-компоненти для Joomla 4.x”. Вона є продовженням посібника з програмування. Тому, якщо ви не читали попередні частини, ми рекомендуємо вам це зробити.
Оригінал за посиланням: https://docs.joomla.org/J4.x:Developing_an_MVC_Component/Developing_a_Basic_Component)
Ваша перша компонента
У цій частині ми розглянемо, як створити і встановити базовий компонент Joomla, який ми винахідливо назвемо компонентою “Hello World”.
Для початку ви повинні створити каталог для компоненти Hello World, за допомогою вашого улюбленого файлового менеджера. Ця директорія може бути в будь-якому місці вашої файлової системи, якщо вона знаходиться поза директорією встановлення Joomla. Для цього прикладу ми назвемо каталог com_helloworld (префікс com означає “компонента”, а helloworld - це назва нашої компоненти). Це чудовий спосіб керувати кількома проектами на ходу. Технічно ми можемо назвати цю папку як завгодно, але завжди краще використовувати продумані імена.
Далі, всередині цієї директорії, нам потрібно створити деякі файли. Оскільки ця компонента матиме частину front-end (видиму частину для відвідувачів сайту), так і back-end (адміністративна частина сайту), нам знадобляться дві підпапки. Створіть підпапку з назвою “site” і підпапку з назвою “admin”. Знову ж таки, ми можемо назвати їх як завгодно, оскільки у файлі маніфесту, який ми створюємо, ми вкажемо Joomla, де знаходяться файли і куди вони потрапляють під час інсталяції у Joomla. Використовуючи ваш улюблений файловий менеджер, створіть наступні файли:
- helloworld.xml - XML-файл маніфесту, який вказує Joomla інструкцію, як встановити нашу компоненту.
- admin/services/provider.php - вказує Joomla, як ініціалізувати компоненту.
- admin/src/Controller/DisplayController.php - MVC-контролер для початкової сторінки “Hello World”.
- admin/src/View/Hello/HtmlView.php - MVC-вигляд для початкової сторінки “Hello World”.
- admin/tmpl/hello/default.php - HTML/PHP шаблон для сторінки “Hello World”.
Опис файлів
helloworld.xml
Це файл маніфесту, який описує компоненту і її конфігурацію для Joomla. Він використовується під час встановлення, щоб скопіювати файли компоненти в потрібні каталоги, запустити встановлення бази даних, налаштувати простір імен
PHP нашої компоненти, і так далі.
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" method="upgrade">
<!-- атрибут version для тегу розширення більше не використовується -->
<name>Hello World</name>
<!-- Наступні елементи є необов'язковими і не мають обмежень щодо форматування -->
<creationDate>December 2020</creationDate>
<!-- Вигаданий Автор, не соромтеся замінювати будь-де, де побачите-->
<author>John Smith</author>
<authorUrl>https://smith.ca</authorUrl>
<copyright>John Smith</copyright>
<license>GPL v3</license>
<!-- Номер версії компоненти записується в таблицю компонентів-->
<version>0.0.1</version>
<!-- Опис не є обов'язковим і за замовчуванням дорівнює назві-->
<description>
A hello world component!
</description>
<!-- Це простір імен PHP, у якому організовано код розширення. Він повинен мати такий формат:
Vendor\Component\ComponentName
"Vendor" може бути назвою вашої компанії або ваше власне ім`я
Секція "ComponentName" ПОВИННА збігатися з назвою, що використовується
для вашої компоненти в інших місцях. Незалежно від імені цього XML-файлу, простір імен повинен збігатися (ігноруючи CamelCase).
-->
<namespace path="src/">JohnSmith\Component\HelloWorld</namespace>
<administration>
<!-- Посилання, яке з'явиться в меню "Компонентів" адмінпанелі -->
<menu link="index.php?option=com_helloworld">Hello World</menu>
<!-- Список файлів і папок для копіювання. Зверніть увагу на атрибут "folder".
Це назва каталогу у вашому пакунку компонентів для копіювання -->
<files folder="admin/">
<folder>services</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>
</administration>
</extension>
admin/services/provider.php Це спеціальний файл, який вказує Joomla як ініціалізувати компоненту - які сервіси їй потрібні, і як їх слід надавати.
<?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) 2020 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 Це об’єкт вигляду для нашої першої сторінки. Завданням об’єкта вигляду є робота з налаштування шаблону вигляду - вибір макета, отримання JavaScript, генерація панелей інструментів, тощо. Щоб просто завантажити нашу сторінку “hello world”, ми делегуємо роботу з ініціалізації вигляду Joomla.
<?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) 2020 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 Цей файл містить шаблон сторінки “hello”. Він використовується для відображення сторінки з використанням налаштувань, виконаних об’єктом вигляду.
Коли для відображення не вказується певний макет, Joomla завантажує шаблон з файлу default.php, ось чому ми використовуємо саме цю назву файлу.
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2020 John Smith. All rights reserved.
* @license GNU General Public License version 3; see LICENSE
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<h2>Hello world!</h2>
Встановлення Компоненти.
Використовуючи ваш улюблений файловий менеджер, створіть .zip-файл каталогу com_helloworld - включіть до нього сам каталог і переконайтеся, що структура каталогу збережена.
Тепер нам потрібно встановити компоненту. Дотримуйтесь цього процесу:
- За допомогою веб-браузера перейдіть до панелі адміністратора вашого сайту Joomla. Адреса буде мати вигляд <joomla>/administrator/. Наприклад:
http://localhost/joomla/administrator/
- В панелі, зліва, натисніть на пункт меню “Система”.
- В блоці “Встановлення” натисніть “Розширення”
- На вкладці “Завантажити файл пакета” знайдіть і виберіть щойно створений файл .zip.
Система повинна автоматично провести встановлення компонента, після чого буде сповіщення про успіх, або навпаки.
Тестування компоненти
Після того, як компоненту буде встановлено, натисніть на розділ “Компоненти”, в меню зліва, в адмін-панелі. Тепер ви повинні побачити нове посилання під цим розділом з назвою “Hello World”. Це посилання вказано у файлі маніфесту компонента. Якщо ви натиснете на нього, ви побачите сторінку “Hello World”.
Вітаємо вас! Ви створили свою першу компоненту Joomla. Тепер давайте почнемо робити її корисною.