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.