Подключение библиотеки

Создание класса контроллера

Как работает контроллер

 

После выполнения кода главного файла компонента управление передаётся контроллеру - 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++, внесите код и сохраните) и переходите к следующему файлу.

 

 

 

Добавлять комментарии и ответы могут только пользователи, прошедшие регистрацию!
Зарегистрируйтесь и напишите своё мнение или ответ!