После выполнения кода главного файла компонента управление передаётся контроллеру - controller.php. Как видно из названия, его задача - управление включением (запуском) соответствующих полученному запросу файлов компонента, например, открытию какой-либо страницы. Рассмотрим код контроллера.
1 <?php
2 /**
3 * @Author WDS
4 * @subpackage Components
5 * @license GNU/GPL
6 * @copyright Copyright (C) 2019
7 */8 // no direct access
9 defined( '_JEXEC' ) or die( 'Restricted access' );
В начале, как и в большинстве файлов, стоит открывающий тег и информация (строки 1-9).
Подключение библиотеки
Код в строке 11 подключает библиотеку
joomla.application.component.controller
при помощи функции jimport:
11 jimport('joomla.application.component.controller');
Создание класса контроллера
13 class FeedbackFormController extends JControllerLegacy
14 {
15 /**
16 * Метод для открытия страницы обратной связи
17 * @access public
18 */
19 function feedback()
20 {
21 require(JPATH_COMPONENT .'/views/tpl_new/tpl_new_mess.php');
22 }
23 }
24 ?>
Класс контроллера содержит методы, позволяющий включать (запускать) и исполнять определённые файлы, которые производят определенные действия, соответствующие запросу, например, создают страницу (точнее, создают элементы компонента на странице), производят определённые расчёты и так далее, в зависимости от того, что делает ваш компонент. В данном случае создаётся класс FeedbackFormController, расширяемый ("extends") от JControllerLegacy (строка 13). Далее, как обычно следует открывающая фигурная скобка (строка 14).
На данный момент в классе имеется только один метод, позволяющий создать на экране форму ввода обращения для пользователя (страницу обратной связи) - функция feedback(), которая при помощи функции require включает и исполняет файл tpl_new_mess.php, находящийся, как вы помните, в папке tpl_new, которая в свою очередь расположена в папке views компонента (см. главу 4); остальные методы будут прописаны по мере создания других страниц.
Как работает контроллер
В предыдущей главе подробно рассматривался принцип работы основного файла. Когда запрос поступает на основной файл сайта index.php, он создаёт константу _JEXEC, а так же выполняет ряд других функций; при этом запускаются различные файлы и начинается создание страницы. Когда очередь доходит до создания компонента, то вначале запрос поступает на его основной файл (глава 5). Как всё это происходит? Посмотрите на пример запроса:
1) https://мой-сайт.рф/component/feedback_form/?task=feedback&Itemid=155
2) https://мой-сайт.рф/index.php?option=com_feedback_form&task=feedback
Первый вариант адреса может при определённых условиях отображаться в строке браузера при открытии страницы (при включенном ЧПУ), а второй является ссылкой, которая будет показана при отключенном ЧПУ; однако обе ссылки откроют одну и ту же страницу. Здесь:
- мой-сайт.рф это адрес сайта (домена);
- component/feedback_form ( во втором варианте option=com_feedback_form) указывает системе, что нужно обратиться к определённому компоненту;
- переменная task определяет, какую функцию должен запустить контроллер.
Вспомните предыдущую главу, строку 26 кода основного файла:
$controller->execute( JRequest::getVar( 'task' ) );
В данном случае переменная task получила значение feedback и, соответственно, метод с таким же названием будет использован контроллером; данный метод запустит выполнение скрипта /views/tpl_new/tpl_new_mess.php.
Точно так же в дальнейшем будут запускаться и другие файлы, по такому же принципу создаваться методы, а пока перейдём к рассмотрению запущенного скрипта.
Пропишите указанный код в файле контроллера controller.php (откройте при помощи редактора Notepad++, внесите код и сохраните) и переходите к следующему файлу.