Оцените статью: 5 1 1 1 1 1 Рейтинг 5.00 (1 Оценка)

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 в подарок