Эта статья является частью учебника "Разработка компонента MVC для Joomla 4.x". Он предназначен для последующего руководства по программированию, поэтому, если вы не читали предыдущие части руководства, вам рекомендуется сделать это. Предыдущая статья: «Разработка базового компонента для Joomla 4.x».
- Добавление в компонент 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.
Перевод с английского:
https://docs.joomla.org/J4.x:Developing_an_MVC_Component/Adding_a_View_to_the_Site_Part
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)