Создание точки входа компонента (файл hello.php)

Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц лицевой части сайта или administrator/index.php для страниц административного интерфейса системы. Функция обработки URL загружает требуемый компонент, основанный на значении 'option' в URL (используется метод передачи данных GET) или переданных данных методом POST.

Для разрабатываемого компонента, URL будет выглядеть следующим образом:

index.php? option=com_hello&view=hello

Эта ссылка запускает выполнение файла, являющего точкой входа в компонент: components/com_hello/hello.php.

 

Ниже приведен листинг файла hello.php:

<?php

// Защита от прямого обращения к скрипту

defined('_JEXEC') or die('Restricted access');

// Подключение файла контроллера.

require_once(JPATH_COMPONENT.DS.'controller.php');

// Проверка на дополнительные контроллеры

if($controller = JRequest::getVar('controller')) {

require_once(JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php');

}

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

$classname = 'HelloController'.$controller;

$controller = new $classname();

// Выполнить задачу запроса

$controller->execute(JRequest::getVar('task'));

// Переадресация

$controller->redirect();

Рассмотрим код более подробно:

1) defined('_JEXEC') or die('Restricted access');

Первая строка предотвращает прямой доступ к исполнительному файлу в целях общей безопасности сайта:

2) require_once(JPATH_COMPONENT.DS.'controller.php');

Следующая строка подключает основной контроллер компонента.

JPATH_COMPONENT - абсолютный путь к текущему компоненту, в данном случае - это components/com_hello.

DS - автоматический выбор слеша (разделителя директорий) '\' или '/', в зависимости от ОС. Таким образом, разработчик не должен волноваться о том, на какой системе установлена Joomla.

3) if($controller = JRequest::getVar('controller'))

Проверка на наличие вспомогательных контроллеров для компонента. Если таковые присутствуют, то подключаются из директории /controllers компонента. В рассматриваемом случае контроллер всего один.

4) $classname = 'HelloController'.$controller;

$controller = new $classname();

Создание класса основного контроллера компонента.

5) $controller->execute(JRequest::getVar('task'));

Получение контроллером текущей задачи из полученного URL вида: index.php?option=com_hello&task=Задача. Если значение task в переданном URL пустое, по умолчанию используется задача «display», предназначенная для вывода данных. При использовании задачи сохранения или удаления страницы контроллер компонента вызывает перенаправление на другую страницу с помощью строки $controller->redirect();

 

Фактически, точка входа компонента передает управлению контроллеру компонента для выполнения задачи, которая была определена в полученном запросе.

 

 

Создание контроллера компонента (файл controller.php)

Поскольку разрабатываемый компонент предназначен лишь для представления основ реализации компонентов под Joomla, контроллер этого компонента – очень простой. В некоторых больших компонентах число строк контроллера достигает до нескольких тысяч. В контроллере компонента «Hello» используется только один метод - display(). Большая часть необходимых функций уже встроена в класс JController, так что все, что требуется, это вызвать метод JController::display().

 

Ниже представлен листинг файла controller.php:

<?php

defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.controller');

 class HelloController extends JController

{

// метод вывода данных компонента

function display()

{

parent::display();

}

}

 

display () - это первый по приоритету метод, он вызывает родительский конструктор. JController:: display () метод определяет название шаблонов вывода запроса и загрузки, которые определяют и устанавливают выбор ветки в дереве задач.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: