003 Добавление представления фронтенда в компонент Joomla 4
- Добавление в компонент Joomla 4 представления во фронтенд
- Содержимое файлов компонента для Joomla 4.x
- Обновление расширения Joomla 4
- Тестирование новой страницы
Добавление в компонент Joomla 4 представления во фронтенд
Хотя наш компонент для Joomla 4 разделен на части "бэкенд" (для админки) и "фронтенд" (для сайта), процесс добавления представления очень похож в обоих случаях. Как и в базовом представлении, которое мы сделали в предыдущей статье, нам потребуется контроллер, представление и шаблон.
Для начала давайте сначала создадим новые файлы для страницы сайта. Как и прежде, исходный код каждого файла можно найти в разделе «Содержимое файлов компонента для Joomla 4.x» ниже.
- Новый файл:
site/src/Controller/DisplayController.php- Контроллер MVC по умолчанию для фронтенда (сайта)
- Новый файл:
site/src/View/Hello/HtmlView.php- Объект представления MVC для новой страницы "Hello"
- Новый файл:
site/tmpl/hello/default.php- Шаблон для новой страницы "Hello"
- Обновление в файле:
helloworld.xml- Необходимо добавить новые файлы в манифест компонента Joomla 4
Содержимое файлов компонента для Joomla 4.x
site/src/Controller/DisplayController.php
Контроллер MVC по умолчанию для фронтенда (сайта). У нас есть некоторый базовый код для извлечения и визуализации представления, но, как и прежде, мы в основном делегируем родительский класс Joomla 4. Поскольку это класс PHP, он создаётся под вашим корнем пространства имен PHP для фронтенда site в папке src/, в пространстве имен Controller.
<?php
namespace JohnSmith\Component\HelloWorld\Site\Controller;
defined('_JEXEC') or die;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Factory;
/**
* @package Joomla.Site
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2021 John Smith. All rights reserved.
* @license GNU General Public License version 3; see LICENSE
*/
/**
* Контроллер компонента HelloWorld
* @since 0.0.2
*/
class DisplayController extends BaseController {
public function display($cachable = false, $urlparams = array()) {
$document = Factory::getDocument();
$viewName = $this->input->getCmd('view', 'login');
$viewFormat = $document->getType();
$view = $this->getView($viewName, $viewFormat);
$view->document = $document;
$view->display();
}
}
site/src/View/Hello/HtmlView.php
Представление MVC для страницы "Hello World". Как и прежде, это представление просто наследует родительский объект, чтобы начать работу. Поскольку это класс PHP, он хранится в подпапке src/ папки site, в пространстве имен View/Hello, которое соответствует имени представления.
<?php
namespace JohnSmith\Component\HelloWorld\Site\View\Hello;
defined('_JEXEC') or die;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
/**
* @package Joomla.Site
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2021 John Smith. All rights reserved.
* @license GNU General Public License version 3; see LICENSE
*/
/**
* Просмотр формы проверки подлинности пользователя
*/
class HtmlView extends BaseHtmlView {
/**
* Display the view
*
* @param string $template Имя файла макета для шаблона.
* @return void
*/
public function display($template = null) {
// Вызов родительского отображения для отображения файла макета
parent::display($template);
}
}
site/tmpl/hello/default.php
Шаблон страницы для нашей новой страницы "Hello World" для фронтенда (сайта). Это идентично шаблону, который мы использовали в административной части, чтобы начать работу. Как шаблон, он находится в подпапке tmpl в папке site, соответствующей имени представления.
<?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
*/
// Не дать прямого доступа к выполнению PHP-кода в файле
defined('_JEXEC') or die('Но пасаран! =)');
?>
<h2>Hello world!</h2>
helloworld.xml
Наконец, давайте обновим манифест компонента helloworld.xml, чтобы включить в него новые файлы. Нам нужно сообщить Joomla 4, что новые файлы существуют, чтобы он скопировал их на место. Мы также обновим номер версии расширения в манифесте - прямо сейчас это не имеет реального эффекта, но в будущем изменение номера версии будет иметь большее значение, поэтому это хорошая привычка.
<?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.2</version>
<!-- Описание является необязательным и по умолчанию используется имя сомпонента -->
<description>
A hello world component!
</description>
<!-- Это пространство имен PHP, в котором организован
код расширения. Он должен следовать этому формату:
Vendor\Component\ComponentName
"Vendor" может быть названией компании или вашим собственным именем
Раздел "ComponentName" ДОЛЖЕН соответствовать имени, используемому
везде для вашего компонента. Каким бы ни было имя этого XML-файла,
пространство имен должно совпадать (заглавные/прописные буквы не учитываются).
-->
<namespace path="src/">JohnSmith\Component\HelloWorld</namespace>
<files folder="site/">
<folder>src</folder>
<folder>tmpl</folder>
</files>
<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>
Обратите внимания на строки:
- стр.14 — обновление версии компонента Joomla 4
- стр.33..36 — новые папки с новыми файлами компонента Joomla 4
Обновление расширения Joomla 4
Чтобы проверить изменения в вашем расширении, сначала вам нужно будет заархивировать папку com_helloworld и установить ее так же, как вы делали это раньше. Мы пройдем этот процесс шаг за шагом еще раз:
- Используя свой веб-браузер, перейдите в панель администратора Joomla 4 вашего сайта. Адрес будет
<домен>/administrator/. Например:https://mb4.ru/administrator/ - В левом меню админки Joomla 4 нажмите на ссылку "System" (Система).
- Там в поле "Install" (Установка) кликните по ссылке "Extensions" (Расширения).
- На вкладке "Upload Package File" (Загрузить файл пакета) найдите и выберите только что созданный новый zip-файл с вашего компьютера.
Как только ваша новая версия компонента будет установлена, снова нажмите ссылку "System" (Система) в главном меню, а затем выберите "Extensions" (Расширения) в поле "Manage" (Управление) на этот раз. Должен появиться список установленных расширений Joomla 4. Введите hello в строку поиска в правом верхнем углу и нажмите кнопку поиска. Вы должны увидеть свое расширение "Hello World", которое теперь указано как версия 0.0.2:

Тестирование новой страницы
На новой странице еще нет ссылки в меню (мы добавим её в следующей статье), поэтому для ее тестирования нам нужно будет использовать прямой URL-адрес. Перейдите по адресу: <joomla>/index.php?option=com_helloworld&view=hello (не внутри пути /administrator), и вы увидите, как появится ваша новая страница сайта "Hello World":

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