Создание контроллера и представления по умолчанию для Joomla (разработка компонентов ЧАСТЬ 2)

Joomla! Версии 2.5 и выше построена с применением подхода MVC (Model, View, Controller), когда подразумевается, что надо выделять 3 основных сущности:


  • модель - работает с данными;
  • представление - отображают контент, соответственно его типу (error, feed, html, json, raw, xml)  и шаблону, выбранном контроллером;
  • контроллер - выполняет задачи, устанавливают и получают состояния моделей и определяют представления, которые необходимо отобразить.


Точка входа в фронтенд компонента


В ядре Joomla! класс для управления контроллерами - JController. Для реализации собственного контроллера надо унаследоваться от этого класса (или от его производных). Файл точка входа в компонент site/helloworld.php должен содержать следующие строки:

<?php
// Предотвращает прямой доступ к этому файлу
defined('_JEXEC') ordie('Restrictedaccess');
 
// Подключение описания класса JController
jimport('joomla.application.component.controller');
 
// Получает объект класса контроллера, префикс которого HelloWorld
$controller = JController::getInstance('HelloWorld');
 
// Исполнение задачи (заданной переменной task)
$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));
 
// Вызывает перенаправление, если такое действие было установлено
$controller->redirect();
?> 

Создаём контроллер по умолчанию(фронтенд)


Статический метод getInstance класса JController создаёт контроллер. Это будет объект класса HelloWorldController. По умолчанию Joomla! будет искать в корневой папке компонента файл с именем controller.php.


Поскольку мы работаем с фронтендом, то будем наследоваться от класса JControllerLegacy, который, в свою очередь, наследуется от класса JController и не имеет никакой дополнительной функциональности (это сделано для совместимости с дальнейшими версиями Joomla!).


Создадим этот файл. Код файла:

<
p><?php
 
 defined('_JEXEC') or die('Restricted access');
  
 jimport('joomla.application.component.controller');
  
 class HelloWorldController extends JControllerLegacy
 {
 }
 ?>


Пока что оставим тело нашего контроллера пустым.


Мы помним, что контроллер обрабатывает полученную с запроса задачу. По умолчанию, если задача не установлена, то контроллер выполнит задачу с именем display, которая отвечает за отображение. Задача - это переменная запроса с именем taskзначение которой выглядит следующим образом:


<имя контроллера>.<имя метода>


Это означает, что будет создан объект класса контроллера с заданным именем, от имени которого будет вызван указанный метод. Также  по умолчанию будет отображено представление с именем, соответствующем префиксу контроллера (в нашем случае - HelloWorld). 


Создаём представление по умолчанию(фронтенд)


Когда контроллер решает отобразить представление, производиться поиск файла по пути component/com_<имя компонента>/views/<имя представления>.


Название директории с представлением по умолчанию - такое как и название компонента. В нашем случае путь - component/com_helloworld/views/helloworld/.


Файл, в котором храниться код представления имеет имя view.<режим отображения>.php. По умолчанию режим отображения и, скорее всего, вы будете использовать только этот режим, - html. Тогда, файл с кодом представления будет называться view.html.php.


Создадим этот файл site/views/helloworld/view.html.php:

<?php
defined('_JEXEC') or die('Restricted access');
//подключение объявления класса представления
jimport('joomla.application.component.view');
 
class HelloWorldViewHelloWorld extends JViewLegacy
{
 // Переопределение метода отображения
 function display($tpl = null)
 {
 $this->msg = "Hello World from FRONTEND";
 
 // Отображение представления
 parent::display($tpl);
 }
}


Метод display вызывается, когда установлена одноимённая задача в контроллере. Класс представления, по сути, состоит из двух частей:


  1. Собственно, класс, унаследованный от JView.
  2. Файл шаблона.


Создадим шаблон отображения для нашего представления. По умолчанию представления используют как шаблон файл (если явно не установлено иное значение в переменной запроса layout)
component/com_<имя компонента>/views/<имя представления>/tmpl/default.php.

<?php
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>
?>


Заметим, что переменные, объявленные в классе, доступны также и в шаблоне - таким образом, мы установили значение переменной msg в классе и, соответственно, можем использовать эту переменную в шаблоне.


Теперь только осталось составить установочный архив из файлов и папок, созданных в предыдущем уроке, и созданных в текущем, а также в файл манифеста записать строку:


<folder>views</folder>


В секцию files со значением атрибута folder=”site”. Также в файле манифеста поменяйте номер версии расширения.


Успехов в разработке.

Хотите комплексно решить Ваш вопрос? 

Перейдите в наш раздел видео-курсов

Оставьте первый комментарий

Не смогли найти, то что искали? Воспользуйтесь поиском

Популярные статьи

Последние статьи


Рекомендуем хостинг

 

 

BeGet

 

30 дней бесплатно!

 

Дополнительно Вы получаете бонусные домены, которые можно использовать как для регистрации, так и для продления доменов в зонах .RU, .РФ, .ONLINE, .SPACE, .SITE, .WEBSITE, .FUN, .HOST, .PRESS, .PW.